[
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "content": "name: 🐞 Bug report\ndescription: Report a bug or an issue.\ntitle: 'bug: '\nlabels: ['Bug report']\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        <p align=\"center\">\n          <picture>\n            <source\n              width=\"256px\"\n              media=\"(prefers-color-scheme: dark)\"\n              srcset=\"https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-headline/revanced-headline-vertical-dark.svg\"\n            >\n            <img \n              width=\"256px\"\n              src=\"https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-headline/revanced-headline-vertical-light.svg\"\n            >\n          </picture>\n          <br>\n          <a href=\"https://revanced.app/\">\n             <picture>\n                 <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-logo/revanced-logo.svg\" />\n                 <img height=\"24px\" src=\"https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-logo/revanced-logo.svg\" />\n             </picture>\n           </a>&nbsp;&nbsp;&nbsp;\n           <a href=\"https://github.com/ReVanced\">\n               <picture>\n                   <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png\" />\n                   <img height=\"24px\" src=\"https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png\" />\n               </picture>\n           </a>&nbsp;&nbsp;&nbsp;\n           <a href=\"http://revanced.app/discord\">\n               <picture>\n                   <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png\" />\n                   <img height=\"24px\" src=\"https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png\" />\n               </picture>\n           </a>&nbsp;&nbsp;&nbsp;\n           <a href=\"https://reddit.com/r/revancedapp\">\n               <picture>\n                   <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png\" />\n                   <img height=\"24px\" src=\"https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png\" />\n               </picture>\n           </a>&nbsp;&nbsp;&nbsp;\n           <a href=\"https://t.me/app_revanced\">\n              <picture>\n                 <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png\" />\n                 <img height=\"24px\" src=\"https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png\" />\n              </picture>\n           </a>&nbsp;&nbsp;&nbsp;\n           <a href=\"https://x.com/revancedapp\">\n              <picture>\n                 <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png\">\n                 <img height=\"24px\" src=\"https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png\" />\n              </picture>\n           </a>&nbsp;&nbsp;&nbsp;\n           <a href=\"https://www.youtube.com/@ReVanced\">\n              <picture>\n                 <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png\" />\n                 <img height=\"24px\" src=\"https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png\" />\n             </picture>\n           </a>\n           <br>\n           <br>\n           Continuing the legacy of Vanced\n        </p>\n\n        # ReVanced Manager bug report\n\n        Before creating a new bug report, please keep the following in mind:\n\n        - **Do not submit a duplicate bug report**: Search for existing bug reports [here](https://github.com/ReVanced/revanced-manager/issues?q=label%3A%22Bug+report%22).\n        - **Review the contribution guidelines**: Make sure your bug report adheres to it. You can find the guidelines [here](https://github.com/ReVanced/revanced-manager/blob/main/CONTRIBUTING.md).\n        - **Do not use the issue page for support**: If you need help or have questions, check out other platforms on [revanced.app](https://revanced.app).\n  - type: textarea\n    attributes:\n      label: Bug description\n      description: |\n        - Describe your bug in detail\n        - Add steps to reproduce the bug if possible (Step 1. ... Step 2. ...)\n        - Add images and videos if possible\n        - List used patches, downloader and settings if applicable\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: Patch logs\n      description: Patch logs can be exported by clicking on the \"Logs\" button in the \"Patcher\" screen, when patching finishes.\n      render: shell\n  - type: textarea\n    attributes:\n      label: Debug logs\n      description: Debug logs can be exported by clicking on  \"Export debug logs\" in \"Settings\" > \"Advanced\".\n    validations:\n      required: true\n  - type: checkboxes\n    attributes:\n      label: Acknowledgements\n      description: Your bug report will be closed if you don't follow the checklist below.\n      options:\n        - label: I have checked all open and closed bug reports and this is not a duplicate.\n          required: true\n        - label: I have chosen an appropriate title.\n          required: true\n        - label: All requested information has been provided properly.\n          required: true\n        - label: The bug is only related to ReVanced Manager.\n          required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: 🗨 Discussions\n    url: https://github.com/revanced/revanced-suggestions/discussions\n    about: Have something unspecific to ReVanced Manager in mind? Search for or start a new discussion!"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "content": "name: ⭐ Feature request\ndescription: Create a detailed request for a new feature.\ntitle: 'feat: '\nlabels: ['Feature request']\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        <p align=\"center\">\n          <picture>\n            <source\n              width=\"256px\"\n              media=\"(prefers-color-scheme: dark)\"\n              srcset=\"https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-headline/revanced-headline-vertical-dark.svg\"\n            >\n            <img \n              width=\"256px\"\n              src=\"https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-headline/revanced-headline-vertical-light.svg\"\n            >\n          </picture>\n          <br>\n          <a href=\"https://revanced.app/\">\n             <picture>\n                 <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-logo/revanced-logo.svg\" />\n                 <img height=\"24px\" src=\"https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-logo/revanced-logo.svg\" />\n             </picture>\n           </a>&nbsp;&nbsp;&nbsp;\n           <a href=\"https://github.com/ReVanced\">\n               <picture>\n                   <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png\" />\n                   <img height=\"24px\" src=\"https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png\" />\n               </picture>\n           </a>&nbsp;&nbsp;&nbsp;\n           <a href=\"http://revanced.app/discord\">\n               <picture>\n                   <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png\" />\n                   <img height=\"24px\" src=\"https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png\" />\n               </picture>\n           </a>&nbsp;&nbsp;&nbsp;\n           <a href=\"https://reddit.com/r/revancedapp\">\n               <picture>\n                   <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png\" />\n                   <img height=\"24px\" src=\"https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png\" />\n               </picture>\n           </a>&nbsp;&nbsp;&nbsp;\n           <a href=\"https://t.me/app_revanced\">\n              <picture>\n                 <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png\" />\n                 <img height=\"24px\" src=\"https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png\" />\n              </picture>\n           </a>&nbsp;&nbsp;&nbsp;\n           <a href=\"https://x.com/revancedapp\">\n              <picture>\n                 <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png\">\n                 <img height=\"24px\" src=\"https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png\" />\n              </picture>\n           </a>&nbsp;&nbsp;&nbsp;\n           <a href=\"https://www.youtube.com/@ReVanced\">\n              <picture>\n                 <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png\" />\n                 <img height=\"24px\" src=\"https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png\" />\n             </picture>\n           </a>\n           <br>\n           <br>\n           Continuing the legacy of Vanced\n        </p>\n\n        # ReVanced Manager feature request\n\n        Before creating a new feature request, please keep the following in mind:\n\n        - **Do not submit a duplicate feature request**: Search for existing feature requests [here](https://github.com/ReVanced/revanced-manager/issues?q=label%3A%22Feature+request%22).\n        - **Review the contribution guidelines**: Make sure your feature request adheres to it. You can find the guidelines [here](https://github.com/ReVanced/revanced-manager/blob/main/CONTRIBUTING.md).\n        - **Do not use the issue page for support**: If you need help or have questions, check out other platforms on [revanced.app](https://revanced.app).\n  - type: textarea\n    attributes:\n      label: Feature description\n      description: |\n        - Describe your feature in detail\n        - Add images, videos, links, examples, references, etc. if possible\n  - type: textarea\n    attributes:\n      label: Motivation\n      description: |\n        A strong motivation is necessary for a feature request to be considered.\n        \n        - Why should this feature be implemented? \n        - What is the explicit use case?\n        - What are the benefits?\n        - What makes this feature important?\n    validations:\n      required: true\n  - type: checkboxes\n    id: acknowledgements\n    attributes:\n      label: Acknowledgements\n      description: Your feature request will be closed if you don't follow the checklist below.\n      options:\n        - label: I have checked all open and closed feature requests and this is not a duplicate\n          required: true\n        - label: I have chosen an appropriate title.\n          required: true\n        - label: All requested information has been provided properly.\n          required: true\n        - label: The feature request is only related to ReVanced Manager.\n          required: true\n"
  },
  {
    "path": ".github/config.yaml",
    "content": "firstPRMergeComment: >\n  Thank you for contributing to ReVanced. Join us on [Discord](https://revanced.app/discord) to receive a role for your contribution.\n"
  },
  {
    "path": ".github/workflows/build_pull_request.yml",
    "content": "name: Build pull request\n\non:\n  workflow_dispatch:\n  pull_request:\n    branches:\n      - dev\n\njobs:\n  release:\n    name: Build\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n\n      - name: Cache Gradle\n        uses: burrunan/gradle-cache-action@v3\n\n      - name: Build\n        env:\n          ORG_GRADLE_PROJECT_githubPackagesUsername: ${{ env.GITHUB_ACTOR }}\n          ORG_GRADLE_PROJECT_githubPackagesPassword: ${{ secrets.GITHUB_TOKEN }}\n        run: ./gradlew assembleRelease --no-daemon\n\n      - name: Upload artifacts\n        uses: actions/upload-artifact@v7\n        with:\n          name: revanced-manager\n          path: |\n            app/build/outputs/apk/release/revanced-manager*.apk\n            app/build/outputs/apk/release/revanced-manager*.apk.asc\n          archive: false\n"
  },
  {
    "path": ".github/workflows/open_pull_request.yml",
    "content": "name: Open a PR to main\n\non:\n  push:\n    branches:\n      - dev\n  workflow_dispatch:\n\nenv:\n  MESSAGE: Merge branch `${{ github.head_ref || github.ref_name }}` to `main`\n\njobs:\n  pull-request:\n    name: Open pull request\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n\n      - name: Open pull request\n        uses: repo-sync/pull-request@v2\n        with:\n          destination_branch: 'main'\n          pr_title: 'chore: ${{ env.MESSAGE }}'\n          pr_body: 'This pull request will ${{ env.MESSAGE }}.'\n          pr_draft: true\n"
  },
  {
    "path": ".github/workflows/pull_strings.yml",
    "content": "name: Pull strings\n\non:\n  schedule:\n    - cron: \"0 0 * * 0\"\n  workflow_dispatch:\n\njobs:\n  pull:\n    name: Pull strings\n    permissions:\n      contents: write\n      pull-requests: write\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n        with:\n          ref: dev\n          clean: true\n\n      - name: Pull strings\n        uses: crowdin/github-action@v2\n        with:\n          config: crowdin.yml\n          upload_sources: false\n          download_translations: true\n          skip_ref_checkout: true\n          localization_branch_name: feat/translations\n          create_pull_request: false\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}\n          CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}\n\n      - name: Open pull request\n        if: github.event_name == 'workflow_dispatch'\n        uses: repo-sync/pull-request@v2\n        with:\n          source_branch: feat/translations\n          destination_branch: dev\n          pr_title: \"chore: Sync translations\"\n          pr_body: \"Sync translations from [crowdin.com/project/revanced](https://crowdin.com/project/revanced)\"\n"
  },
  {
    "path": ".github/workflows/push_strings.yml",
    "content": "name: Push strings\n\non:\n  workflow_dispatch:\n  push:\n    branches:\n      - dev\n    paths:\n      - app/src/main/res/values/strings.xml\n\njobs:\n  push:\n    name: Push strings\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n\n      - name: Push strings\n        uses: crowdin/github-action@v2\n        with:\n          config: crowdin.yml\n          upload_sources: true\n        env:\n          CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}\n          CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "name: Release\n\non:\n    workflow_dispatch:\n    push:\n        branches:\n            - main\n            - dev\n\njobs:\n    release:\n        name: Release\n        permissions:\n            contents: write\n            packages: write\n            id-token: write\n            attestations: write\n            artifact-metadata: write\n        runs-on: ubuntu-latest\n        steps:\n            - name: Checkout\n              uses: actions/checkout@v6\n\n            - name: Setup Java\n              uses: actions/setup-java@v5\n              with:\n                  distribution: \"temurin\"\n                  java-version: \"17\"\n\n            - name: Cache Gradle\n              uses: burrunan/gradle-cache-action@v3\n\n            - name: Build\n              env:\n                  ORG_GRADLE_PROJECT_githubPackagesUsername: ${{ github.actor }}\n                  ORG_GRADLE_PROJECT_githubPackagesPassword: ${{ secrets.GITHUB_TOKEN }}\n              run: ./gradlew assembleRelease\n\n            - name: Setup Node.js\n              uses: actions/setup-node@v6\n              with:\n                  node-version: \"lts/*\"\n                  cache: \"npm\"\n\n            - name: Install dependencies\n              run: npm ci\n\n            - name: Import GPG key\n              uses: crazy-max/ghaction-import-gpg@v7\n              with:\n                  gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}\n                  passphrase: ${{ secrets.GPG_PASSPHRASE }}\n                  fingerprint: ${{ vars.GPG_FINGERPRINT }}\n\n            - name: Setup keystore\n              run: |\n                  echo \"${{ secrets.KEYSTORE }}\" | base64 --decode > \"app/keystore.jks\"\n\n            - name: Release API\n              run: npx multi-semantic-release --tag-format 'api@${version}' --ignore-packages app\n              env:\n                  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n                  ORG_GRADLE_PROJECT_githubPackagesUsername: ${{ github.actor }}\n                  ORG_GRADLE_PROJECT_githubPackagesPassword: ${{ secrets.GITHUB_TOKEN }}\n\n            - name: Release\n              id: release\n              run: |\n                  npx multi-semantic-release --tag-format 'v${version}' --ignore-packages api\n              env:\n                  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n                  ORG_GRADLE_PROJECT_githubPackagesUsername: ${{ github.actor }}\n                  ORG_GRADLE_PROJECT_githubPackagesPassword: ${{ secrets.GITHUB_TOKEN }}\n                  KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}\n                  KEYSTORE_ENTRY_ALIAS: ${{ secrets.KEYSTORE_ENTRY_ALIAS }}\n                  KEYSTORE_ENTRY_PASSWORD: ${{ secrets.KEYSTORE_ENTRY_PASSWORD }}\n\n            - name: Attest\n              if: steps.release.outputs.NEW_TAG != ''\n              uses: actions/attest@v4\n              with:\n                  subject-name: \"ReVanced Manager ${{ steps.release.outputs.NEW_TAG }}\"\n                  subject-path: app/build/outputs/apk/release/revanced-manager*.apk\n"
  },
  {
    "path": ".github/workflows/update_documentation.yml",
    "content": "name: Update documentation\n\non:\n  push:\n    paths:\n      - docs/**\n\njobs:\n  trigger:\n    runs-on: ubuntu-latest\n    name: Dispatch event to documentation repository\n    if: github.ref == 'refs/heads/main'\n    steps:\n      - uses: peter-evans/repository-dispatch@v4\n        with:\n          token: ${{ secrets.DOCUMENTATION_REPO_ACCESS_TOKEN  }}\n          repository: revanced/revanced-documentation\n          event-type: update-documentation\n          client-payload: '{\"repo\": \"${{ github.event.repository.name }}\", \"ref\": \"${{ github.ref }}\"}'"
  },
  {
    "path": ".gitignore",
    "content": "### Java template\n# Compiled class file\n*.class\n\n# Log file\n*.log\n\n# BlueJ files\n*.ctxt\n\n# Mobile Tools for Java (J2ME)\n.mtj.tmp/\n\n# Package Files #\n*.jar\n*.war\n*.nar\n*.ear\n*.zip\n*.tar.gz\n*.rar\n\n# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml\nhs_err_pid*\n\n### JetBrains template\n# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider\n# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839\n\n# User-specific stuff\n.idea/**/workspace.xml\n.idea/**/tasks.xml\n.idea/**/usage.statistics.xml\n.idea/**/dictionaries\n.idea/**/shelf\n\n# Generated files\n.idea/**/contentModel.xml\n\n# Sensitive or high-churn files\n.idea/**/dataSources/\n.idea/**/dataSources.ids\n.idea/**/dataSources.local.xml\n.idea/**/sqlDataSources.xml\n.idea/**/dynamic.xml\n.idea/**/uiDesigner.xml\n.idea/**/dbnavigator.xml\n\n# Gradle\n.idea/**/gradle.xml\n.idea/**/libraries\n\n# Gradle and Maven with auto-import\n# When using Gradle or Maven with auto-import, you should exclude module files,\n# since they will be recreated, and may cause churn.  Uncomment if using\n# auto-import.\n.idea/artifacts\n.idea/compiler.xml\n.idea/jarRepositories.xml\n.idea/modules.xml\n.idea/*.iml\n.idea/modules\n*.iml\n*.ipr\n\n# CMake\ncmake-build-*/\n\n# Mongo Explorer plugin\n.idea/**/mongoSettings.xml\n\n# File-based project format\n*.iws\n\n# IntelliJ\nout/\n\n# mpeltonen/sbt-idea plugin\n.idea_modules/\n\n# JIRA plugin\natlassian-ide-plugin.xml\n\n# Cursive Clojure plugin\n.idea/replstate.xml\n\n# Crashlytics plugin (for Android Studio and IntelliJ)\ncom_crashlytics_export_strings.xml\ncrashlytics.properties\ncrashlytics-build.properties\nfabric.properties\n\n# Editor-based Rest Client\n.idea/httpRequests\n\n# Android studio 3.1+ serialized cache file\n.idea/caches/build_file_checksums.ser\n\n### Gradle template\n.gradle\n**/build/\n!src/**/build/\n\n# Ignore Gradle GUI config\ngradle-app.setting\n\n# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)\n!gradle-wrapper.jar\n\n# Cache of project\n.gradletasknamecache\n\n# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898\n# gradle/wrapper/gradle-wrapper.properties\n\n# Potentially copyrighted test APK\n*.apk\n\n# Ignore vscode config\n.vscode/\n\n# Dependency directories\nnode_modules/\n\n# Ignore IDEA files\n.idea/\n\n.kotlin/\n\nlocal.properties\n\n.cxx"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "<p align=\"center\">\n  <picture>\n    <source\n      width=\"256px\"\n      media=\"(prefers-color-scheme: dark)\"\n      srcset=\"assets/revanced-headline/revanced-headline-vertical-dark.svg\"\n    >\n    <img \n      width=\"256px\"\n      src=\"assets/revanced-headline/revanced-headline-vertical-light.svg\"\n    >\n  </picture>\n  <br>\n  <a href=\"https://revanced.app/\">\n       <picture>\n           <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"assets/revanced-logo/revanced-logo.svg\" />\n           <img height=\"24px\" src=\"assets/revanced-logo/revanced-logo.svg\" />\n       </picture>\n   </a>&nbsp;&nbsp;&nbsp;\n   <a href=\"https://github.com/ReVanced\">\n       <picture>\n           <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png\" />\n           <img height=\"24px\" src=\"https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png\" />\n       </picture>\n   </a>&nbsp;&nbsp;&nbsp;\n   <a href=\"http://revanced.app/discord\">\n       <picture>\n           <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png\" />\n           <img height=\"24px\" src=\"https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png\" />\n       </picture>\n   </a>&nbsp;&nbsp;&nbsp;\n   <a href=\"https://reddit.com/r/revancedapp\">\n       <picture>\n           <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png\" />\n           <img height=\"24px\" src=\"https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png\" />\n       </picture>\n   </a>&nbsp;&nbsp;&nbsp;\n   <a href=\"https://t.me/app_revanced\">\n      <picture>\n         <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png\" />\n         <img height=\"24px\" src=\"https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png\" />\n      </picture>\n   </a>&nbsp;&nbsp;&nbsp;\n   <a href=\"https://x.com/revancedapp\">\n      <picture>\n         <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png\">\n         <img height=\"24px\" src=\"https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png\" />\n      </picture>\n   </a>&nbsp;&nbsp;&nbsp;\n   <a href=\"https://www.youtube.com/@ReVanced\">\n      <picture>\n         <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png\" />\n         <img height=\"24px\" src=\"https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png\" />\n     </picture>\n   </a>\n   <br>\n   <br>\n   Continuing the legacy of Vanced\n</p>\n\n# 👋 Contribution guidelines\n\nThis document describes how to contribute to ReVanced Manager.\n\n## 📖 Resources to help you get started\n\n* The [documentation](/docs/README.md) provides steps to build ReVanced Manager from source\n* Our [backlog](https://github.com/orgs/ReVanced/projects/12) is where we keep track of what we're working on\n* [Issues](https://github.com/ReVanced/revanced-manager/issues) are where we keep track of bugs and feature requests\n\n## 🙏 Submitting a feature request\n\nFeatures can be requested by opening an issue using the\n[Feature request issue template](https://github.com/ReVanced/revanced-manager/issues/new?assignees=&labels=Feature+request&projects=&template=feature_request.yml&title=feat%3A+).\n\n> **Note**\n> Requests can be accepted or rejected at the discretion of maintainers of ReVanced Manager.\n> Good motivation has to be provided for a request to be accepted.\n\n## 🐞 Submitting a bug report\n\nIf you encounter a bug while using ReVanced Manager, open an issue using the\n[Bug report issue template](https://github.com/ReVanced/revanced-manager/issues/new?assignees=&labels=Bug+report&projects=&template=bug_report.yml&title=bug%3A+).\n\n## 📝 How to contribute\n\n1. Before contributing, it is recommended to open an issue to discuss your change\n   with the maintainers of ReVanced Manager. This will help you determine whether your change is acceptable\n   and whether it is worth your time to implement it\n2. Development happens on the `dev` branch. Fork the repository and create your branch from `dev`\n3. Commit your changes\n4. Submit a pull request to the `dev` branch of the repository and reference issues\n   that your pull request closes in the description of your pull request\n5. Our team will review your pull request and provide feedback. Once your pull request is approved,\n   it will be merged into the `dev` branch and will be included in the next release of ReVanced Manager\n\n## 🤚 I want to contribute but don't know how to code\n\nEven if you don't know how to code, you can still contribute by\ntranslating ReVanced Manager on [Crowdin](https://translate.revanced.app/).\n\n❤️ Thank you for considering contributing to ReVanced Manager,  \nReVanced\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<https://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<https://www.gnu.org/licenses/why-not-lgpl.html>.\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n  <picture>\n    <source\n      width=\"256px\"\n      media=\"(prefers-color-scheme: dark)\"\n      srcset=\"assets/revanced-headline/revanced-headline-vertical-dark.svg\"\n    >\n    <img \n      width=\"256px\"\n      src=\"assets/revanced-headline/revanced-headline-vertical-light.svg\"\n    >\n  </picture>\n  <br>\n  <a href=\"https://revanced.app/\">\n       <picture>\n           <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"assets/revanced-logo/revanced-logo.svg\" />\n           <img height=\"24px\" src=\"assets/revanced-logo/revanced-logo.svg\" />\n       </picture>\n   </a>&nbsp;&nbsp;&nbsp;\n   <a href=\"https://github.com/ReVanced\">\n       <picture>\n           <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png\" />\n           <img height=\"24px\" src=\"https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png\" />\n       </picture>\n   </a>&nbsp;&nbsp;&nbsp;\n   <a href=\"http://revanced.app/discord\">\n       <picture>\n           <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png\" />\n           <img height=\"24px\" src=\"https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png\" />\n       </picture>\n   </a>&nbsp;&nbsp;&nbsp;\n   <a href=\"https://reddit.com/r/revancedapp\">\n       <picture>\n           <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png\" />\n           <img height=\"24px\" src=\"https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png\" />\n       </picture>\n   </a>&nbsp;&nbsp;&nbsp;\n   <a href=\"https://t.me/app_revanced\">\n      <picture>\n         <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png\" />\n         <img height=\"24px\" src=\"https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png\" />\n      </picture>\n   </a>&nbsp;&nbsp;&nbsp;\n   <a href=\"https://x.com/revancedapp\">\n      <picture>\n         <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png\">\n         <img height=\"24px\" src=\"https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png\" />\n      </picture>\n   </a>&nbsp;&nbsp;&nbsp;\n   <a href=\"https://www.youtube.com/@ReVanced\">\n      <picture>\n         <source height=\"24px\" media=\"(prefers-color-scheme: dark)\" srcset=\"https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png\" />\n         <img height=\"24px\" src=\"https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png\" />\n     </picture>\n   </a>\n   <br>\n   <br>\n   Continuing the legacy of Vanced\n</p>\n\n# 💊 ReVanced Manager\n\n![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/ReVanced/revanced-manager/release.yml)\n![GPLv3 License](https://img.shields.io/badge/License-GPL%20v3-yellow.svg)\n\nApplication to use ReVanced on Android\n\n## ❓ About\n\nReVanced Manager is an application that uses [ReVanced Patcher](https://github.com/revanced/revanced-patcher) to patch Android apps.\n\n## 💪 Features\n\nSome of the features ReVanced Manager provides are:\n\n- ⬇️ **Download**: Automatically download apps using the ReVanced Manager downloader system\n- 💉 **Patch**: Select and apply patches to any Android app\n- 🛠️ **Customize**: Manage patches, apps, signing, themes, updates, and many more settings\n\n## 🔽 Download\n\nYou can download the most recent version of ReVanced Manager at [revanced.app/download](https://revanced.app/download) or from [GitHub releases](https://github.com/ReVanced/revanced-manager/releases/latest).  \nLearn how to use ReVanced Manager by following the [documentation](/docs).\n\n## 📚 Everything else\n\n### 📙 Contributing\n\nThank you for considering contributing to ReVanced Manager.\nYou can find the contribution guidelines [here](CONTRIBUTING.md).\n\n### 🛠️ Building\n\nTo build a ReVanced Manager, you can follow the [documentation](/docs).\n\n### 📄 Documentation\n\nYou can find the documentation for ReVanced Manager [here](/docs).\n\n## ⚖️ License\n\nReVanced Manager is licensed under the GPLv3 license. Please see the [license file](LICENSE) for more information.\n[tl;dr](https://www.tldrlegal.com/license/gnu-general-public-license-v3-gpl-3) you may copy, distribute and modify ReVanced Manager as long as you track changes/dates in source files.\nAny modifications to ReVanced Manager must also be made available under the GPL, along with build & install instructions.\n"
  },
  {
    "path": "adsfund.json",
    "content": "{\n  \"info\": \"This is verification file for ads.fund project\",\n  \"project\": {\n    \"name\": \"ReVanced Manager\",\n    \"walletAddress\": \"0x7ab4091e00363654bf84B34151225742cd92FCE5\",\n    \"tokenAddress\": \"0xadf954bc6f509b3a32fb5e97ed4ba6c000e37155\"\n  }\n}\n"
  },
  {
    "path": "api/.releaserc",
    "content": "{\n  \"branches\": [\n    \"main\",\n    {\n      \"name\": \"dev\",\n      \"prerelease\": true\n    }\n  ],\n  \"plugins\": [\n    [\n      \"@semantic-release/commit-analyzer\",\n      {\n        \"releaseRules\": [\n          { \"type\": \"build\", \"scope\": \"Needs bump\", \"release\": \"patch\" }\n        ]\n      }\n    ],\n    \"@semantic-release/release-notes-generator\",\n    \"@semantic-release/changelog\",\n    \"gradle-semantic-release-plugin\",\n    [\n      \"@semantic-release/git\",\n      {\n        \"assets\": [\n          \"CHANGELOG.md\",\n          \"gradle.properties\"\n        ],\n        \"message\": \"chore: Release API v${nextRelease.version} [skip ci]\\n\\n${nextRelease.notes}\"\n      }\n    ],\n    [\n      \"@saithodev/semantic-release-backmerge\",\n      {\n        \"backmergeBranches\": [{\"from\": \"main\", \"to\": \"dev\"}],\n        \"clearWorkspace\": true\n      }\n    ]\n  ]\n}\n"
  },
  {
    "path": "api/CHANGELOG.md",
    "content": "# api 1.0.0 (2026-03-14)\n\n\n### Features\n\n* Add support for writing downloader UI with fragments ([#2998](https://github.com/ReVanced/revanced-manager/issues/2998)) ([7471710](https://github.com/ReVanced/revanced-manager/commit/7471710f287b4febb9546a7d7cd59d654b2754e9))\n* Allow multiple downloaders per APK ([#2916](https://github.com/ReVanced/revanced-manager/issues/2916)) ([0f56377](https://github.com/ReVanced/revanced-manager/commit/0f56377214fae05693a21177daf7534c103df74e))\n* Revamp UI and improve UX ([2d42197](https://github.com/ReVanced/revanced-manager/commit/2d4219701248ee70fd42d93755fee0a63b75e5db))\n* Update to Patcher v22 ([#2939](https://github.com/ReVanced/revanced-manager/issues/2939)) ([8667051](https://github.com/ReVanced/revanced-manager/commit/8667051283f934a32ac7b7cc76178397dc45a0e6))\n\n# api [1.0.0-dev.4](https://github.com/ReVanced/revanced-manager/compare/api@1.0.0-dev.3...api@1.0.0-dev.4) (2026-03-14)\n\n\n### Features\n\n* Revamp UI and improve UX ([2d42197](https://github.com/ReVanced/revanced-manager/commit/2d4219701248ee70fd42d93755fee0a63b75e5db))\n\n# api [1.0.0-dev.4](https://github.com/ReVanced/revanced-manager/compare/api@1.0.0-dev.3...api@1.0.0-dev.4) (2026-03-14)\n\n\n### Features\n\n* Revamp UI and improve UX ([2d42197](https://github.com/ReVanced/revanced-manager/commit/2d4219701248ee70fd42d93755fee0a63b75e5db))\n\n# api [1.0.0-dev.3](https://github.com/ReVanced/revanced-manager/compare/api@1.0.0-dev.2...api@1.0.0-dev.3) (2026-03-12)\n\n\n### Features\n\n* Add support for writing downloader UI with fragments ([#2998](https://github.com/ReVanced/revanced-manager/issues/2998)) ([7471710](https://github.com/ReVanced/revanced-manager/commit/7471710f287b4febb9546a7d7cd59d654b2754e9))\n\n# api [1.0.0-dev.2](https://github.com/ReVanced/revanced-manager/compare/api@1.0.0-dev.1...api@1.0.0-dev.2) (2026-02-27)\n\n\n### Features\n\n* Update to Patcher v22 ([#2939](https://github.com/ReVanced/revanced-manager/issues/2939)) ([8667051](https://github.com/ReVanced/revanced-manager/commit/8667051283f934a32ac7b7cc76178397dc45a0e6))\n\n# api 1.0.0-dev.1 (2026-02-19)\n\n\n### Features\n\n* Allow multiple downloaders per APK ([#2916](https://github.com/ReVanced/revanced-manager/issues/2916)) ([0f56377](https://github.com/ReVanced/revanced-manager/commit/0f56377214fae05693a21177daf7534c103df74e))\n"
  },
  {
    "path": "api/api/api.api",
    "content": "public abstract interface class app/revanced/manager/downloader/BaseDownloadScope : app/revanced/manager/downloader/Scope {\n}\n\npublic final class app/revanced/manager/downloader/ConstantsKt {\n\tpublic static final field DOWNLOADER_HOST_PERMISSION Ljava/lang/String;\n}\n\npublic final class app/revanced/manager/downloader/DownloadUrl : android/os/Parcelable {\n\tpublic static final field $stable I\n\tpublic static final field CREATOR Landroid/os/Parcelable$Creator;\n\tpublic fun <init> (Ljava/lang/String;Ljava/util/Map;)V\n\tpublic synthetic fun <init> (Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V\n\tpublic final fun component1 ()Ljava/lang/String;\n\tpublic final fun component2 ()Ljava/util/Map;\n\tpublic final fun copy (Ljava/lang/String;Ljava/util/Map;)Lapp/revanced/manager/downloader/DownloadUrl;\n\tpublic static synthetic fun copy$default (Lapp/revanced/manager/downloader/DownloadUrl;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lapp/revanced/manager/downloader/DownloadUrl;\n\tpublic final fun describeContents ()I\n\tpublic fun equals (Ljava/lang/Object;)Z\n\tpublic final fun getHeaders ()Ljava/util/Map;\n\tpublic final fun getUrl ()Ljava/lang/String;\n\tpublic fun hashCode ()I\n\tpublic final fun toDownloadResult ()Lkotlin/Pair;\n\tpublic fun toString ()Ljava/lang/String;\n\tpublic final fun writeToParcel (Landroid/os/Parcel;I)V\n}\n\npublic final class app/revanced/manager/downloader/Downloader {\n\tpublic static final field $stable I\n}\n\npublic final class app/revanced/manager/downloader/DownloaderBuilder {\n\tpublic static final field $stable I\n}\n\npublic abstract interface annotation class app/revanced/manager/downloader/DownloaderHostApi : java/lang/annotation/Annotation {\n}\n\npublic final class app/revanced/manager/downloader/DownloaderKt {\n\tpublic static final fun Downloader (ILkotlin/jvm/functions/Function1;)Lapp/revanced/manager/downloader/DownloaderBuilder;\n}\n\npublic final class app/revanced/manager/downloader/DownloaderScope : app/revanced/manager/downloader/Scope {\n\tpublic static final field $stable I\n\tpublic final fun download (Lkotlin/jvm/functions/Function3;)V\n\tpublic final fun get (Lkotlin/jvm/functions/Function4;)V\n\tpublic fun getDownloaderPackageName ()Ljava/lang/String;\n\tpublic fun getHostPackageName ()Ljava/lang/String;\n\tpublic final fun useService (Landroid/content/Intent;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\n}\n\npublic final class app/revanced/manager/downloader/ExtensionsKt {\n\tpublic static final fun download (Lapp/revanced/manager/downloader/DownloaderScope;Lkotlin/jvm/functions/Function4;)V\n}\n\npublic abstract interface class app/revanced/manager/downloader/GetScope : app/revanced/manager/downloader/Scope {\n\tpublic abstract fun requestStartActivity (Landroid/content/Intent;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\n}\n\npublic abstract interface class app/revanced/manager/downloader/InputDownloadScope : app/revanced/manager/downloader/BaseDownloadScope {\n}\n\npublic abstract interface class app/revanced/manager/downloader/OutputDownloadScope : app/revanced/manager/downloader/BaseDownloadScope {\n\tpublic abstract fun reportSize (JLkotlin/coroutines/Continuation;)Ljava/lang/Object;\n}\n\npublic final class app/revanced/manager/downloader/Package : android/os/Parcelable {\n\tpublic static final field $stable I\n\tpublic static final field CREATOR Landroid/os/Parcelable$Creator;\n\tpublic fun <init> (Ljava/lang/String;Ljava/lang/String;)V\n\tpublic final fun component1 ()Ljava/lang/String;\n\tpublic final fun component2 ()Ljava/lang/String;\n\tpublic final fun copy (Ljava/lang/String;Ljava/lang/String;)Lapp/revanced/manager/downloader/Package;\n\tpublic static synthetic fun copy$default (Lapp/revanced/manager/downloader/Package;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lapp/revanced/manager/downloader/Package;\n\tpublic final fun describeContents ()I\n\tpublic fun equals (Ljava/lang/Object;)Z\n\tpublic final fun getName ()Ljava/lang/String;\n\tpublic final fun getVersion ()Ljava/lang/String;\n\tpublic fun hashCode ()I\n\tpublic fun toString ()Ljava/lang/String;\n\tpublic final fun writeToParcel (Landroid/os/Parcel;I)V\n}\n\npublic abstract interface class app/revanced/manager/downloader/Scope {\n\tpublic abstract fun getDownloaderPackageName ()Ljava/lang/String;\n\tpublic abstract fun getHostPackageName ()Ljava/lang/String;\n}\n\npublic abstract class app/revanced/manager/downloader/UserInteractionException : java/lang/Exception {\n\tpublic static final field $stable I\n\tpublic synthetic fun <init> (Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\n}\n\npublic abstract class app/revanced/manager/downloader/UserInteractionException$Activity : app/revanced/manager/downloader/UserInteractionException {\n\tpublic static final field $stable I\n\tpublic synthetic fun <init> (Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V\n}\n\npublic final class app/revanced/manager/downloader/UserInteractionException$Activity$Cancelled : app/revanced/manager/downloader/UserInteractionException$Activity {\n\tpublic static final field $stable I\n}\n\npublic final class app/revanced/manager/downloader/UserInteractionException$Activity$NotCompleted : app/revanced/manager/downloader/UserInteractionException$Activity {\n\tpublic static final field $stable I\n\tpublic final fun getIntent ()Landroid/content/Intent;\n\tpublic final fun getResultCode ()I\n}\n\npublic final class app/revanced/manager/downloader/UserInteractionException$RequestDenied : app/revanced/manager/downloader/UserInteractionException {\n\tpublic static final field $stable I\n}\n\npublic final class app/revanced/manager/downloader/webview/APIKt {\n\tpublic static final fun WebViewDownloader (ILkotlin/jvm/functions/Function4;)Lapp/revanced/manager/downloader/DownloaderBuilder;\n\tpublic static final fun runWebView (Lapp/revanced/manager/downloader/GetScope;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\n}\n\npublic class app/revanced/manager/downloader/webview/IWebView$Default : app/revanced/manager/downloader/webview/IWebView {\n\tpublic fun <init> ()V\n\tpublic fun asBinder ()Landroid/os/IBinder;\n\tpublic fun finish ()V\n\tpublic fun load (Ljava/lang/String;)V\n}\n\npublic abstract class app/revanced/manager/downloader/webview/IWebView$Stub : android/os/Binder, app/revanced/manager/downloader/webview/IWebView {\n\tpublic fun <init> ()V\n\tpublic fun asBinder ()Landroid/os/IBinder;\n\tpublic static fun asInterface (Landroid/os/IBinder;)Lapp/revanced/manager/downloader/webview/IWebView;\n\tpublic fun onTransact (ILandroid/os/Parcel;Landroid/os/Parcel;I)Z\n}\n\npublic class app/revanced/manager/downloader/webview/IWebViewEvents$Default : app/revanced/manager/downloader/webview/IWebViewEvents {\n\tpublic fun <init> ()V\n\tpublic fun asBinder ()Landroid/os/IBinder;\n\tpublic fun download (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\n\tpublic fun pageLoad (Ljava/lang/String;)V\n\tpublic fun ready (Lapp/revanced/manager/downloader/webview/IWebView;)V\n}\n\npublic abstract class app/revanced/manager/downloader/webview/IWebViewEvents$Stub : android/os/Binder, app/revanced/manager/downloader/webview/IWebViewEvents {\n\tpublic fun <init> ()V\n\tpublic fun asBinder ()Landroid/os/IBinder;\n\tpublic static fun asInterface (Landroid/os/IBinder;)Lapp/revanced/manager/downloader/webview/IWebViewEvents;\n\tpublic fun onTransact (ILandroid/os/Parcel;Landroid/os/Parcel;I)Z\n}\n\npublic abstract interface class app/revanced/manager/downloader/webview/WebViewCallbackScope : app/revanced/manager/downloader/Scope {\n\tpublic abstract fun finish (Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\n\tpublic abstract fun load (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;\n}\n\npublic final class app/revanced/manager/downloader/webview/WebViewScope : app/revanced/manager/downloader/Scope {\n\tpublic static final field $stable I\n\tpublic final fun download (Lkotlin/jvm/functions/Function5;)V\n\tpublic fun getDownloaderPackageName ()Ljava/lang/String;\n\tpublic fun getHostPackageName ()Ljava/lang/String;\n\tpublic final fun pageLoad (Lkotlin/jvm/functions/Function3;)V\n}\n\n"
  },
  {
    "path": "api/build.gradle.kts",
    "content": "import org.jetbrains.kotlin.gradle.dsl.JvmTarget\n\nplugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.kotlin.android)\n    alias(libs.plugins.kotlin.parcelize)\n    alias(libs.plugins.binary.compatibility.validator)\n    `maven-publish`\n    signing\n}\n\ngroup = \"app.revanced\"\n\ndependencies {\n    implementation(libs.androidx.ktx)\n    implementation(libs.runtime.ktx)\n    implementation(libs.fragment.ktx)\n}\n\nkotlin {\n    jvmToolchain(17)\n    compilerOptions {\n        jvmTarget = JvmTarget.JVM_17\n        freeCompilerArgs.addAll(\n            \"-Xexplicit-backing-fields\",\n            \"-Xcontext-parameters\",\n        )\n    }\n}\n\nandroid {\n    namespace = \"app.revanced.manager.downloader\"\n    compileSdk {\n        version = release(36) {\n            minorApiLevel = 1\n        }\n    }\n\n    defaultConfig {\n        minSdk {\n            version = release(26)\n        }\n\n        consumerProguardFiles(\"consumer-rules.pro\")\n    }\n\n    publishing {\n        singleVariant(\"release\") {}\n    }\n\n    buildTypes {\n        release {\n            isMinifyEnabled = false\n            // Note: There are actually no optimisation since we disable it in proguard, AGP does not allow you to remove -optimize from this for some reason.\n            proguardFiles(\n                getDefaultProguardFile(\"proguard-android-optimize.txt\"),\n                \"proguard-rules.pro\"\n            )\n        }\n    }\n\n    compileOptions {\n        sourceCompatibility = JavaVersion.VERSION_17\n        targetCompatibility = JavaVersion.VERSION_17\n    }\n\n    buildFeatures {\n        aidl = true\n    }\n}\n\napiValidation {\n    nonPublicMarkers += \"app.revanced.manager.downloader.DownloaderHostApi\"\n}\n\npublishing {\n    repositories {\n        maven {\n            name = \"githubPackages\"\n            url = uri(\"https://maven.pkg.github.com/revanced/revanced-manager\")\n            credentials(PasswordCredentials::class)\n        }\n    }\n\n    publications {\n        create<MavenPublication>(\"Api\") {\n            afterEvaluate {\n                from(components[\"release\"])\n            }\n\n            groupId = \"app.revanced\"\n            artifactId = \"revanced-manager-api\"\n            version = project.version.toString()\n\n            pom {\n                name = \"ReVanced Manager API\"\n                description = \"API for ReVanced Manager.\"\n                url = \"https://revanced.app\"\n\n                licenses {\n                    license {\n                        name = \"GNU General Public License v3.0\"\n                        url = \"https://www.gnu.org/licenses/gpl-3.0.en.html\"\n                    }\n                }\n                developers {\n                    developer {\n                        id = \"ReVanced\"\n                        name = \"ReVanced\"\n                        email = \"contact@revanced.app\"\n                    }\n                }\n                scm {\n                    connection = \"scm:git:git://github.com/revanced/revanced-manager.git\"\n                    developerConnection = \"scm:git:git@github.com:revanced/revanced-manager.git\"\n                    url = \"https://github.com/revanced/revanced-manager\"\n                }\n            }\n        }\n    }\n}\n\nsigning {\n    useGpgCmd()\n    sign(publishing.publications[\"Api\"])\n}\n"
  },
  {
    "path": "api/consumer-rules.pro",
    "content": ""
  },
  {
    "path": "api/gradle.properties",
    "content": "version = 1.0.0\n"
  },
  {
    "path": "api/package.json",
    "content": "{\n  \"name\": \"api\",\n  \"private\": false,\n  \"devDependencies\": {\n    \"@anolilab/multi-semantic-release\": \"^1.1.10\",\n    \"@saithodev/semantic-release-backmerge\": \"^4.0.1\",\n    \"@semantic-release/changelog\": \"^6.0.3\",\n    \"@semantic-release/git\": \"^10.0.1\",\n    \"gradle-semantic-release-plugin\": \"^1.10.1\"\n  }\n}\n"
  },
  {
    "path": "api/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n</manifest>"
  },
  {
    "path": "api/src/main/aidl/app/revanced/manager/downloader/webview/IWebView.aidl",
    "content": "// IWebView.aidl\npackage app.revanced.manager.downloader.webview;\n\n@JavaPassthrough(annotation=\"@app.revanced.manager.downloader.DownloaderHostApi\")\noneway interface IWebView {\n    void load(String url);\n    void finish();\n}"
  },
  {
    "path": "api/src/main/aidl/app/revanced/manager/downloader/webview/IWebViewEvents.aidl",
    "content": "// IWebViewEvents.aidl\npackage app.revanced.manager.downloader.webview;\n\nimport app.revanced.manager.downloader.webview.IWebView;\n\n@JavaPassthrough(annotation=\"@app.revanced.manager.downloader.DownloaderHostApi\")\noneway interface IWebViewEvents {\n    void ready(IWebView iface);\n    void pageLoad(String url);\n    void download(String url, String mimetype, String userAgent);\n}"
  },
  {
    "path": "api/src/main/kotlin/app/revanced/manager/downloader/Constants.kt",
    "content": "package app.revanced.manager.downloader\n\n/**\n * The permission ID of the special downloader host permission. Only ReVanced Manager will have this permission.\n * Downloader UI activities and internal services can be protected using this permission.\n */\nconst val DOWNLOADER_HOST_PERMISSION = \"app.revanced.manager.permission.DOWNLOADER_HOST\""
  },
  {
    "path": "api/src/main/kotlin/app/revanced/manager/downloader/Downloader.kt",
    "content": "package app.revanced.manager.downloader\n\nimport android.content.ComponentName\nimport android.content.Context\nimport android.content.Intent\nimport android.content.ServiceConnection\nimport android.os.IBinder\nimport android.app.Activity\nimport android.os.Bundle\nimport android.os.Parcelable\nimport androidx.annotation.StringRes\nimport androidx.fragment.app.Fragment\nimport kotlinx.coroutines.withTimeout\nimport java.io.File\nimport java.io.InputStream\nimport java.io.OutputStream\nimport kotlin.coroutines.resume\nimport kotlin.coroutines.suspendCoroutine\nimport kotlin.jvm.java\n\n@RequiresOptIn(\n    level = RequiresOptIn.Level.ERROR,\n    message = \"This API is only intended for downloader hosts, don't use it in a downloader.\",\n)\n@Retention(AnnotationRetention.BINARY)\nannotation class DownloaderHostApi\n\n/**\n * The base interface for all DSL scopes.\n */\ninterface Scope {\n    /**\n     * The package name of ReVanced Manager.\n     */\n    val hostPackageName: String\n\n    /**\n     * The package name of the downloader.\n     */\n    val downloaderPackageName: String\n\n    /**\n     * A data directory for this downloader package.\n     */\n    val dataDir: File\n}\n\n/**\n * The scope of [DownloaderScope.get].\n */\ninterface GetScope : Scope {\n    /**\n     * Ask the user to perform some required interaction in the activity specified by the provided [Intent].\n     * This function returns normally with the resulting [Intent] when the activity finishes with code [Activity.RESULT_OK].\n     *\n     * @throws UserInteractionException.RequestDenied User decided to skip this downloader.\n     * @throws UserInteractionException.Activity.Cancelled The activity was cancelled.\n     * @throws UserInteractionException.Activity.NotCompleted The activity finished with an unknown result code.\n     */\n    suspend fun requestStartActivity(intent: Intent): Intent?\n\n    /**\n     * Starts an [Activity] using [requestStartActivity] which loads the specified [Fragment].\n     * The fragment may reside in the downloader package.\n     *\n     * @param clazz The class of the fragment to launch.\n     * @param args The fragment arguments.\n     */\n    suspend fun requestStartFragment(clazz: Class<out Fragment>, args: Bundle?) =\n        requestStartActivity(Intent().apply {\n            setClassName(hostPackageName, \"app.revanced.manager.DownloaderActivity\")\n            // We shouldn't use the downloader's resources if it is launching a fragment that resides in manager itself.\n            if (clazz.classLoader != GetScope::class.java.classLoader) putExtra(\n                \"DOWNLOADER_NAME\",\n                downloaderPackageName\n            )\n            putExtra(\"FRAGMENT_CLASS_NAME\", clazz.name)\n            putExtra(\"FRAGMENT_ARGS\", args)\n        })\n}\n\ninterface BaseDownloadScope : Scope\n\n/**\n * The scope for [DownloaderScope.download].\n */\ninterface InputDownloadScope : BaseDownloadScope\n\ntypealias Size = Long\ntypealias DownloadResult = Pair<InputStream, Size?>\n\ntypealias Version = String\ntypealias GetResult<T> = Pair<T, Version?>\n\nclass DownloaderScope<T : Parcelable> internal constructor(\n    private val scopeImpl: Scope,\n    internal val context: Context\n) : Scope by scopeImpl {\n    // Returning an InputStream is the primary way for a downloader to implement the download function, but we also want to offer an OutputStream API since using InputStream might not be convenient in all cases.\n    // It is much easier to implement the main InputStream API on top of OutputStreams compared to doing it the other way around, which is why we are using OutputStream here.\n    internal var download: (suspend OutputDownloadScope.(T, OutputStream) -> Unit)? = null\n    internal var get: (suspend GetScope.(String, String?) -> GetResult<T>?)? = null\n    private val inputDownloadScopeImpl = object : InputDownloadScope, Scope by scopeImpl {}\n\n    /**\n     * Define the download block of the downloader.\n     */\n    fun download(block: suspend InputDownloadScope.(data: T) -> DownloadResult) {\n        download = { app, outputStream ->\n            val (inputStream, size) = inputDownloadScopeImpl.block(app)\n\n            inputStream.use {\n                if (size != null) reportSize(size)\n                it.copyTo(outputStream)\n            }\n        }\n    }\n\n    /**\n     * Define the get block of the downloader.\n     * The block should return null if the app cannot be found. The version in the result must match the version argument unless it is null.\n     */\n    fun get(block: suspend GetScope.(packageName: String, version: String?) -> GetResult<T>?) {\n        get = block\n    }\n\n    /**\n     * Utilize the service specified by the provided [Intent]. The service will be unbound when the scope ends.\n     */\n    suspend fun <R : Any?> useService(intent: Intent, block: suspend (IBinder) -> R): R {\n        var onBind: ((IBinder) -> Unit)? = null\n        val serviceConn = object : ServiceConnection {\n            override fun onServiceConnected(name: ComponentName?, service: IBinder?) =\n                onBind!!(service!!)\n\n            override fun onServiceDisconnected(name: ComponentName?) {}\n        }\n\n        return try {\n            val binder = withTimeout(10000L) {\n                suspendCoroutine { continuation ->\n                    onBind = continuation::resume\n                    context.bindService(intent, serviceConn, Context.BIND_AUTO_CREATE)\n                }\n            }\n            block(binder)\n        } finally {\n            onBind = null\n            context.unbindService(serviceConn)\n        }\n    }\n}\n\nclass DownloaderBuilder<T : Parcelable> internal constructor(\n    @param:StringRes private val name: Int,\n    private val block: DownloaderScope<T>.() -> Unit\n) {\n    @DownloaderHostApi\n    fun build(scopeImpl: Scope, context: Context) =\n        with(DownloaderScope<T>(scopeImpl, context)) {\n            block()\n\n            Downloader(\n                download = download!!,\n                get = get!!,\n                name = name,\n            )\n        }\n}\n\nclass Downloader<T : Parcelable> internal constructor(\n    @property:DownloaderHostApi val get: suspend GetScope.(packageName: String, version: String?) -> GetResult<T>?,\n    @property:DownloaderHostApi val download: suspend OutputDownloadScope.(data: T, outputStream: OutputStream) -> Unit,\n    @property:DownloaderHostApi @param:StringRes val name: Int,\n)\n\n/**\n * Define a downloader.\n */\nfun <T : Parcelable> Downloader(@StringRes name: Int, block: DownloaderScope<T>.() -> Unit) =\n    DownloaderBuilder(name, block)\n\n/**\n * @see GetScope.requestStartActivity\n */\nsealed class UserInteractionException(message: String) : Exception(message) {\n    class RequestDenied @DownloaderHostApi constructor() :\n        UserInteractionException(\"Request denied by user\")\n\n    sealed class Activity(message: String) : UserInteractionException(message) {\n        class Cancelled @DownloaderHostApi constructor() : Activity(\"Interaction cancelled\")\n\n        /**\n         * @param resultCode The result code of the activity.\n         * @param intent The [Intent] of the activity.\n         */\n        class NotCompleted @DownloaderHostApi constructor(\n            val resultCode: Int,\n            val intent: Intent?\n        ) :\n            Activity(\"Unexpected activity result code: $resultCode\")\n    }\n}"
  },
  {
    "path": "api/src/main/kotlin/app/revanced/manager/downloader/Extensions.kt",
    "content": "package app.revanced.manager.downloader\n\nimport android.app.Activity\nimport android.app.Service\nimport android.content.Intent\nimport android.os.Bundle\nimport android.os.IBinder\nimport android.os.Parcelable\nimport androidx.fragment.app.Fragment\nimport java.io.OutputStream\n\n/**\n * The scope of the [OutputStream] version of [DownloaderScope.download].\n */\ninterface OutputDownloadScope : BaseDownloadScope {\n    suspend fun reportSize(size: Long)\n}\n\n/**\n * A replacement for [DownloaderScope.download] that uses [OutputStream].\n * The provided [OutputStream] does not need to be closed manually.\n */\nfun <T : Parcelable> DownloaderScope<T>.download(block: suspend OutputDownloadScope.(T, OutputStream) -> Unit) {\n    download = block\n}\n\n/**\n * Performs [GetScope.requestStartActivity] with an [Intent] created using the type information of [ACTIVITY].\n * @see [GetScope.requestStartActivity]\n */\nsuspend inline fun <reified ACTIVITY : Activity> GetScope.requestStartActivity() =\n    requestStartActivity(\n        Intent().apply { setClassName(downloaderPackageName, ACTIVITY::class.qualifiedName!!) }\n    )\n\n/**\n * Starts an [Activity] using [GetScope.requestStartActivity] which loads the specified [Fragment].\n * The fragment may reside in the downloader package.\n *\n * @param args The fragment arguments.\n */\nsuspend inline fun <reified T : Fragment> GetScope.requestStartFragment(args: Bundle?) =\n    requestStartFragment(T::class.java, args)\n\n/**\n * Performs [DownloaderScope.useService] with an [Intent] created using the type information of [SERVICE].\n * @see [DownloaderScope.useService]\n */\nsuspend inline fun <reified SERVICE : Service, R : Any?> DownloaderScope<*>.useService(\n    noinline block: suspend (IBinder) -> R\n) = useService(\n    Intent().apply { setClassName(downloaderPackageName, SERVICE::class.qualifiedName!!) }, block\n)"
  },
  {
    "path": "api/src/main/kotlin/app/revanced/manager/downloader/Parcelables.kt",
    "content": "package app.revanced.manager.downloader\n\nimport android.os.Parcelable\nimport kotlinx.parcelize.Parcelize\nimport java.net.HttpURLConnection\nimport java.net.URI\n\n/**\n * A simple parcelable data class for storing a package name and version.\n * This can be used as the data type for downloaders that only need a name and version to implement their [DownloaderScope.download] function.\n *\n * @param name The package name.\n * @param version The version.\n */\n@Parcelize\ndata class Package(val name: String, val version: String) : Parcelable\n\n/**\n * A data class for storing a download URL.\n *\n * @param url The download URL.\n * @param headers The headers to use for the request.\n */\n@Parcelize\ndata class DownloadUrl(val url: String, val headers: Map<String, String> = emptyMap()) : Parcelable {\n    /**\n     * Converts this into a [DownloadResult].\n     */\n    fun toDownloadResult(): DownloadResult = with(URI.create(url).toURL().openConnection() as HttpURLConnection) {\n        useCaches = false\n        allowUserInteraction = false\n        headers.forEach(::setRequestProperty)\n\n        connectTimeout = 10_000\n        connect()\n\n        inputStream to getHeaderField(\"Content-Length\").toLong()\n    }\n}"
  },
  {
    "path": "api/src/main/kotlin/app/revanced/manager/downloader/webview/API.kt",
    "content": "package app.revanced.manager.downloader.webview\n\nimport android.content.Intent\nimport android.os.Bundle\nimport androidx.annotation.StringRes\nimport app.revanced.manager.downloader.DownloadUrl\nimport app.revanced.manager.downloader.DownloaderScope\nimport app.revanced.manager.downloader.GetScope\nimport app.revanced.manager.downloader.Scope\nimport app.revanced.manager.downloader.Downloader\nimport app.revanced.manager.downloader.DownloaderHostApi\nimport app.revanced.manager.downloader.requestStartFragment\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.ExperimentalCoroutinesApi\nimport kotlinx.coroutines.cancelChildren\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.supervisorScope\nimport kotlinx.coroutines.withContext\nimport kotlin.properties.Delegates\n\ntypealias InitialUrl = String\ntypealias PageLoadCallback<T> = suspend WebViewCallbackScope<T>.(url: String) -> Unit\ntypealias DownloadCallback<T> = suspend WebViewCallbackScope<T>.(url: String, mimeType: String, userAgent: String) -> Unit\n\ninterface WebViewCallbackScope<T> : Scope {\n    /**\n     * Finishes the activity and returns the [result].\n     */\n    suspend fun finish(result: T)\n\n    /**\n     * Tells the WebView to load the specified [url].\n     */\n    suspend fun load(url: String)\n}\n\n@OptIn(DownloaderHostApi::class)\nclass WebViewScope<T> internal constructor(\n    coroutineScope: CoroutineScope,\n    private val scopeImpl: Scope,\n    setResult: (T) -> Unit\n) : Scope by scopeImpl {\n    private var onPageLoadCallback: PageLoadCallback<T> = {}\n    private var onDownloadCallback: DownloadCallback<T> = { _, _, _ -> }\n\n    @OptIn(ExperimentalCoroutinesApi::class)\n    private val dispatcher = Dispatchers.Default.limitedParallelism(1)\n    private lateinit var webView: IWebView\n    internal lateinit var initialUrl: String\n\n    internal val binder = object : IWebViewEvents.Stub() {\n        override fun ready(iface: IWebView?) {\n            coroutineScope.launch(dispatcher) {\n                webView = iface!!.also {\n                    it.load(initialUrl)\n                }\n            }\n        }\n\n        override fun pageLoad(url: String?) {\n            coroutineScope.launch(dispatcher) { onPageLoadCallback(callbackScope, url!!) }\n        }\n\n        override fun download(url: String?, mimetype: String?, userAgent: String?) {\n            coroutineScope.launch(dispatcher) {\n                onDownloadCallback(\n                    callbackScope,\n                    url!!,\n                    mimetype!!,\n                    userAgent!!\n                )\n            }\n        }\n    }\n\n    private val callbackScope = object : WebViewCallbackScope<T>, Scope by scopeImpl {\n        override suspend fun finish(result: T) {\n            setResult(result)\n            // Tell the WebViewActivity to finish\n            webView.let { withContext(Dispatchers.IO) { it.finish() } }\n        }\n\n        override suspend fun load(url: String) {\n            webView.let { withContext(Dispatchers.IO) { it.load(url) } }\n        }\n\n    }\n\n    /**\n     * Called when the WebView attempts to download a file to disk.\n     */\n    fun download(block: DownloadCallback<T>) {\n        onDownloadCallback = block\n    }\n\n    /**\n     * Called when the WebView finishes loading a page.\n     */\n    fun pageLoad(block: PageLoadCallback<T>) {\n        onPageLoadCallback = block\n    }\n}\n\n@JvmInline\nprivate value class Container<U>(val value: U)\n\n/**\n * Run a [android.webkit.WebView] Activity controlled by the provided code block.\n * The activity will keep running until it is cancelled or an event handler calls [WebViewCallbackScope.finish].\n * The [block] defines the event handlers and returns the initial URL.\n *\n * @param title The string displayed in the action bar.\n * @param block The control block.\n */\n@OptIn(DownloaderHostApi::class)\nsuspend fun <T> GetScope.runWebView(\n    title: String,\n    block: suspend WebViewScope<T>.() -> InitialUrl\n) = supervisorScope {\n    var result by Delegates.notNull<Container<T>>()\n\n    val scope = WebViewScope<T>(this@supervisorScope, this@runWebView) { result = Container(it) }\n    scope.initialUrl = scope.block()\n\n    // Start the webview and wait until it finishes.\n    requestStartFragment<WebViewFragment>(Bundle().apply {\n        putParcelable(\n            WebViewFragment.KEY,\n            WebViewFragment.Parameters(title, scope.binder)\n        )\n    })\n\n    // Return the result and cancel any leftover coroutines.\n    coroutineContext.cancelChildren()\n    result.value\n}\n\n/**\n * Implement a downloader using [runWebView] and [DownloadUrl]. This function will automatically define a handler for download events unlike [runWebView].\n * Returning null inside the [block] is equivalent to returning null inside [DownloaderScope.get].\n *\n * @see runWebView\n */\nfun WebViewDownloader(@StringRes name: Int, block: suspend WebViewScope<DownloadUrl>.(packageName: String, version: String?) -> InitialUrl?) =\n    Downloader(name) {\n        val label = context.getString(name)\n\n        get { packageName, version ->\n            class ReturnNull : Exception()\n\n            try {\n                runWebView(label) {\n                    download { url, _, userAgent ->\n                        finish(\n                            DownloadUrl(\n                                url,\n                                mapOf(\"User-Agent\" to userAgent)\n                            )\n                        )\n                    }\n\n                    block(this@runWebView, packageName, version) ?: throw ReturnNull()\n                } to version\n            } catch (_: ReturnNull) {\n                null\n            }\n        }\n\n        download {\n            it.toDownloadResult()\n        }\n    }"
  },
  {
    "path": "api/src/main/kotlin/app/revanced/manager/downloader/webview/WebViewFragment.kt",
    "content": "package app.revanced.manager.downloader.webview\n\nimport android.annotation.SuppressLint\nimport android.app.Activity\nimport android.content.Context\nimport android.os.Bundle\nimport android.os.IBinder\nimport android.os.Parcelable\nimport android.view.Menu\nimport android.view.MenuInflater\nimport android.view.MenuItem\nimport android.view.View\nimport android.webkit.CookieManager\nimport android.webkit.WebSettings\nimport android.webkit.WebView\nimport android.webkit.WebViewClient\nimport androidx.activity.addCallback\nimport androidx.activity.enableEdgeToEdge\nimport androidx.core.view.MenuProvider\nimport androidx.core.view.ViewCompat\nimport androidx.core.view.WindowInsetsCompat\nimport androidx.fragment.app.Fragment\nimport androidx.fragment.app.viewModels\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.lifecycleScope\nimport androidx.lifecycle.repeatOnLifecycle\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.downloader.DownloaderHostApi\nimport app.revanced.manager.downloader.R\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.launch\nimport kotlinx.parcelize.Parcelize\n\n@OptIn(DownloaderHostApi::class)\n@DownloaderHostApi\nclass WebViewFragment : Fragment(R.layout.webview_fragment) {\n    private val vm by viewModels<WebViewModel>()\n    lateinit var webView: WebView\n    private val args by lazy {\n        arguments?.getParcelable<Parameters>(KEY)!!\n    }\n\n    override fun onAttach(context: Context) {\n        super.onAttach(context)\n        requireActivity().apply {\n            enableEdgeToEdge()\n            onBackPressedDispatcher.addCallback {\n                if (webView.canGoBack()) webView.goBack()\n                else cancelActivity()\n            }\n            actionBar?.apply {\n                title = args.title\n                setHomeAsUpIndicator(android.R.drawable.ic_menu_close_clear_cancel)\n                setDisplayHomeAsUpEnabled(true)\n            }\n\n            addMenuProvider(\n                object : MenuProvider {\n                    override fun onCreateMenu(\n                        menu: Menu,\n                        menuInflater: MenuInflater\n                    ) {\n                    }\n\n                    override fun onMenuItemSelected(menuItem: MenuItem) =\n                        if (menuItem.itemId == android.R.id.home) {\n                            cancelActivity()\n\n                            true\n                        } else false\n                },\n                this\n            )\n        }\n    }\n\n    @SuppressLint(\"SetJavaScriptEnabled\")\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n\n        ViewCompat.setOnApplyWindowInsetsListener(view.findViewById(R.id.main)) { v, insets ->\n            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())\n            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)\n            insets\n        }\n        webView = view.findViewById<WebView>(R.id.webview)\n\n        val events = IWebViewEvents.Stub.asInterface(args.events)!!\n        vm.setup(events)\n\n        webView.apply {\n            settings.apply {\n                cacheMode = WebSettings.LOAD_NO_CACHE\n                allowContentAccess = false\n                domStorageEnabled = true\n                javaScriptEnabled = true\n            }\n\n            webViewClient = vm.webViewClient\n            setDownloadListener { url, userAgent, _, mimetype, _ ->\n                vm.onDownload(url, mimetype, userAgent)\n            }\n        }\n\n        val activity = requireActivity()\n        lifecycleScope.launch {\n            viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {\n                vm.commands.collect {\n                    when (it) {\n                        is WebViewModel.Command.Finish -> {\n                            activity.setResult(Activity.RESULT_OK)\n                            activity.finish()\n                        }\n\n                        is WebViewModel.Command.Load -> webView.loadUrl(it.url)\n                    }\n                }\n            }\n        }\n    }\n\n    private fun cancelActivity() {\n        val activity = requireActivity()\n        activity.setResult(Activity.RESULT_CANCELED)\n        activity.finish()\n    }\n\n    @Parcelize\n    internal class Parameters(\n        val title: String, val events: IBinder\n    ) : Parcelable\n\n    internal companion object {\n        const val KEY = \"params\"\n    }\n}\n\n@OptIn(DownloaderHostApi::class)\ninternal class WebViewModel : ViewModel() {\n    init {\n        CookieManager.getInstance().apply {\n            removeAllCookies(null)\n            setAcceptCookie(true)\n        }\n    }\n\n    private val commandChannel = Channel<Command>()\n    val commands = commandChannel.receiveAsFlow()\n\n    private var eventBinder: IWebViewEvents? = null\n    private val ctrlBinder = object : IWebView.Stub() {\n        override fun load(url: String?) {\n            viewModelScope.launch {\n                commandChannel.send(Command.Load(url!!))\n            }\n        }\n\n        override fun finish() {\n            viewModelScope.launch {\n                commandChannel.send(Command.Finish)\n            }\n        }\n    }\n\n    val webViewClient = object : WebViewClient() {\n        override fun onPageFinished(view: WebView?, url: String?) {\n            super.onPageFinished(view, url)\n            eventBinder!!.pageLoad(url)\n        }\n    }\n\n    fun onDownload(url: String, mimeType: String, userAgent: String) {\n        eventBinder!!.download(url, mimeType, userAgent)\n    }\n\n    fun setup(binder: IWebViewEvents) {\n        if (eventBinder != null) return\n        eventBinder = binder\n        binder.ready(ctrlBinder)\n    }\n\n    sealed interface Command {\n        data class Load(val url: String) : Command\n        data object Finish : Command\n    }\n}"
  },
  {
    "path": "api/src/main/res/layout/webview_fragment.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:id=\"@+id/main\">\n\n    <WebView\n        android:id=\"@+id/webview\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\" />\n</LinearLayout>"
  },
  {
    "path": "app/.gitignore",
    "content": "/build"
  },
  {
    "path": "app/.releaserc",
    "content": "{\n  \"branches\": [\n    \"main\",\n    {\n      \"name\": \"dev\",\n      \"prerelease\": true\n    }\n  ],\n  \"plugins\": [\n    [\n      \"@semantic-release/commit-analyzer\",\n      {\n        \"releaseRules\": [\n          { \"type\": \"build\", \"scope\": \"Needs bump\", \"release\": \"patch\" }\n        ]\n      }\n    ],\n    \"@semantic-release/release-notes-generator\",\n    \"@semantic-release/changelog\",\n    \"gradle-semantic-release-plugin\",\n    [\n      \"@semantic-release/git\",\n      {\n        \"assets\": [\n          \"CHANGELOG.md\",\n          \"gradle.properties\"\n        ],\n        \"message\": \"chore: Release v${nextRelease.version} [skip ci]\\n\\n${nextRelease.notes}\"\n      }\n    ],\n    [\n      \"@semantic-release/github\",\n      {\n        \"assets\": [\n          {\n            \"path\": \"build/outputs/apk/release/revanced-manager*.apk?(.asc)\"\n          }\n        ],\n        \"successComment\": false\n      }\n    ],\n    [\n      \"@saithodev/semantic-release-backmerge\",\n      {\n        \"backmergeBranches\": [{\"from\": \"main\", \"to\": \"dev\"}],\n        \"clearWorkspace\": true\n      }\n    ]\n  ]\n}\n"
  },
  {
    "path": "app/CHANGELOG.md",
    "content": "## app [2.2.3](https://github.com/ReVanced/revanced-manager/compare/v2.2.2...v2.2.3) (2026-03-19)\n\n\n### Bug Fixes\n\n* Disable network check on updating patches and downloaders ([c4a5ea8](https://github.com/ReVanced/revanced-manager/commit/c4a5ea8790ad17b497555042fd2171794eebc216))\n* **NotificationCard:** Fix card background contrast with action text ([#3103](https://github.com/ReVanced/revanced-manager/issues/3103)) ([947ac8a](https://github.com/ReVanced/revanced-manager/commit/947ac8ad4441cc1bfb8d3618eddb59f3765f4191))\n* **NotificationCard:** Use the right colors for buttons ([#3101](https://github.com/ReVanced/revanced-manager/issues/3101)) ([88fbc24](https://github.com/ReVanced/revanced-manager/commit/88fbc2491cce82bab38792528ac82d40fe76d3d9))\n\n## app [2.2.3-dev.3](https://github.com/ReVanced/revanced-manager/compare/v2.2.3-dev.2...v2.2.3-dev.3) (2026-03-19)\n\n\n### Bug Fixes\n\n* Disable network check on updating patches and downloaders ([c4a5ea8](https://github.com/ReVanced/revanced-manager/commit/c4a5ea8790ad17b497555042fd2171794eebc216))\n\n## app [2.2.3-dev.2](https://github.com/ReVanced/revanced-manager/compare/v2.2.3-dev.1...v2.2.3-dev.2) (2026-03-18)\n\n\n### Bug Fixes\n\n* **NotificationCard:** Fix card background contrast with action text ([#3103](https://github.com/ReVanced/revanced-manager/issues/3103)) ([947ac8a](https://github.com/ReVanced/revanced-manager/commit/947ac8ad4441cc1bfb8d3618eddb59f3765f4191))\n\n## app [2.2.3-dev.1](https://github.com/ReVanced/revanced-manager/compare/v2.2.2...v2.2.3-dev.1) (2026-03-18)\n\n\n### Bug Fixes\n\n* **NotificationCard:** Use the right colors for buttons ([#3101](https://github.com/ReVanced/revanced-manager/issues/3101)) ([88fbc24](https://github.com/ReVanced/revanced-manager/commit/88fbc2491cce82bab38792528ac82d40fe76d3d9))\n\n## app [2.2.2](https://github.com/ReVanced/revanced-manager/compare/v2.2.1...v2.2.2) (2026-03-17)\n\n\n### Bug Fixes\n\n* Collapse patches list by default in Dashboard ([a53890f](https://github.com/ReVanced/revanced-manager/commit/a53890f574e515d01656b1f5b3c1abb8e6d3e8a6))\n\n\n### Reverts\n\n* Revert \"fix: Patches being expanded instantly\" ([4d48ccd](https://github.com/ReVanced/revanced-manager/commit/4d48ccdd28545a63d02a8430b4fb9a090662bdc5))\n\n## app [2.2.2-dev.1](https://github.com/ReVanced/revanced-manager/compare/v2.2.1...v2.2.2-dev.1) (2026-03-17)\n\n\n### Bug Fixes\n\n* Collapse patches list by default in Dashboard ([a53890f](https://github.com/ReVanced/revanced-manager/commit/a53890f574e515d01656b1f5b3c1abb8e6d3e8a6))\n\n\n### Reverts\n\n* Revert \"fix: Patches being expanded instantly\" ([4d48ccd](https://github.com/ReVanced/revanced-manager/commit/4d48ccdd28545a63d02a8430b4fb9a090662bdc5))\n\n## app [2.2.1-dev.1](https://github.com/ReVanced/revanced-manager/compare/v2.2.0...v2.2.1-dev.1) (2026-03-17)\n\n\n### Bug Fixes\n\n*  Handle null value when selecting APK from storage ([879eb74](https://github.com/ReVanced/revanced-manager/commit/879eb742ced4a778cac35557c47b09e6c44048ac))\n\n# app [2.2.0](https://github.com/ReVanced/revanced-manager/compare/v2.1.0...v2.2.0) (2026-03-17)\n\n\n### Bug Fixes\n\n* About page content and log API requests ([62111e2](https://github.com/ReVanced/revanced-manager/commit/62111e2499d9fc0f4e7b364236e90d5a5f46981f))\n* Add padding for initial screen ([68da359](https://github.com/ReVanced/revanced-manager/commit/68da3592521d18f2f298bb74e72097a1efe57dc7))\n* Close \"Add downloaders\" dialog on add ([f60ce02](https://github.com/ReVanced/revanced-manager/commit/f60ce02a8193bf71b4b37329c3e8004e569e2b67))\n* Consistent circle separator between text across patchesinfoscreen and announcements ([a7792db](https://github.com/ReVanced/revanced-manager/commit/a7792dbf4d947982e343ff2aa2ce71bd5692c09a))\n* Correctly 180 the back arrow for expansible list ([6c62e57](https://github.com/ReVanced/revanced-manager/commit/6c62e57f09b72191de328c277787db80c4bb62af))\n* Custom ROM crashed with their file picker deleted somehow ([00aedda](https://github.com/ReVanced/revanced-manager/commit/00aeddac67031534bfef60183db6a124b16f24c4))\n* Don't 360 the back arrow button for no reason ([5a175e2](https://github.com/ReVanced/revanced-manager/commit/5a175e2c347f824124feb977110ff6be6cf7edcb))\n* Don't show user that you can do this when you clearly can't ([716ecdd](https://github.com/ReVanced/revanced-manager/commit/716ecdd5f30dc58725026f3b6e4021001c174aef))\n* Downloader string being use for incorrect app selection ([b9865df](https://github.com/ReVanced/revanced-manager/commit/b9865dfbf542ea0a82a341349b117c4a9c61fc10))\n* FAB animations in dashboard being instant ([6805ba1](https://github.com/ReVanced/revanced-manager/commit/6805ba18e0470e49dd304aa989dfa6c1e3da2668))\n* Hide installed section if no app are installed ([a6b7517](https://github.com/ReVanced/revanced-manager/commit/a6b7517e8f9c3055db88a5e42b718505d7ad5885))\n* Inconsistent announcement list ([06c5cff](https://github.com/ReVanced/revanced-manager/commit/06c5cffe1fa68349c342734f3743bc5d1b16b7d0))\n* Language picker using patch search string ([8c2be24](https://github.com/ReVanced/revanced-manager/commit/8c2be242ef95d11b96c705c9d4494f4be50e7786))\n* List being stuck too close together ([5ccf2e4](https://github.com/ReVanced/revanced-manager/commit/5ccf2e48a4fd155a7d8fad0ee3c295bd06194339))\n* Make safeguard dialog title more clearer ([7691a7e](https://github.com/ReVanced/revanced-manager/commit/7691a7e144f0777c0d71ea6af4b75a9fb17aeddf))\n* Make the card actually clickable ([979728a](https://github.com/ReVanced/revanced-manager/commit/979728a4cf504b77c50e3a3202e18b7cebe0bed2))\n* Make title notification card follow general preferred-ish visual size ([fc7a97c](https://github.com/ReVanced/revanced-manager/commit/fc7a97c98c52f3ec2e683fde6d1a24c85a2be801))\n* Make weight in unread AnnouncementList look so nicer on certain device density ([c2abfa5](https://github.com/ReVanced/revanced-manager/commit/c2abfa576afda3b8d792e316b2e07ce7ce44d59c))\n* Merge chervon style doppelgirl design to public dev ([ae5dc83](https://github.com/ReVanced/revanced-manager/commit/ae5dc835aa8b6c0f0e30df3ee48f8f3128c34c2f))\n* Merge chervon style doppelgirl design to public dev ([603ff91](https://github.com/ReVanced/revanced-manager/commit/603ff91a4ed34cdf2d48b5def3c9aece205f7fef))\n* Merge expressive switch doppelgirl design to public dev ([698b6ed](https://github.com/ReVanced/revanced-manager/commit/698b6ed1881357a3fbd692987305b93ed6ecaca2))\n* Onboarding screen perpetually loading on unavailable network ([4b9841b](https://github.com/ReVanced/revanced-manager/commit/4b9841b876b63747095a510ca0b517c09c9910a2))\n* Patches being expanded instantly ([83d7506](https://github.com/ReVanced/revanced-manager/commit/83d7506dbc6a15116e4e6a0dd8174da5c6e7e15d))\n* Performance impact with lots of app entries ([fb08890](https://github.com/ReVanced/revanced-manager/commit/fb0889052e1cb7fc3d115bc0825e074903ede385))\n* Redundant string information ([ab80c53](https://github.com/ReVanced/revanced-manager/commit/ab80c53c04a45f8587ad9ebdc06271c152a3ddcd))\n* Remove currently not applicable workaround code for building release ([aa0d59f](https://github.com/ReVanced/revanced-manager/commit/aa0d59f86fac7c497bf245e2d20b40a65d3fd0d0))\n* Remove useless archive icon when it's under archive list ([6d5ecd3](https://github.com/ReVanced/revanced-manager/commit/6d5ecd3d541c008b15cbb3e24c4c21a79ff353d1))\n* Search bar padding being set when fully expanded ([05e6ca1](https://github.com/ReVanced/revanced-manager/commit/05e6ca18ab6f2a65fdd75ce3d0efc16dc7b8f3b5))\n* Show copy logs toast on less than Android 12.1 ([940778b](https://github.com/ReVanced/revanced-manager/commit/940778b7a26b8a3d36d130e0f9bd42a948a596c0))\n* Some haptic constant are not working ([7954128](https://github.com/ReVanced/revanced-manager/commit/79541280df5dadef1628044e818d37f8b60e9da8))\n* Use refresh icon to indicate instant update check ([cf8b986](https://github.com/ReVanced/revanced-manager/commit/cf8b986e5ef76a03db5965d4bca80633cd41032f))\n* Use refresh icon to indicate instant update check (2/?) ([3120aff](https://github.com/ReVanced/revanced-manager/commit/3120affc9cd766a1188392eb46da43d955851d27))\n\n\n### Features\n\n* Add copy to clipboard on ShareSheet ([7e1416e](https://github.com/ReVanced/revanced-manager/commit/7e1416ecef13e2ea4289a6cfb64eb3bba8d6f331))\n* Add refresh banner when nothing is loaded after setup ([2f46e3b](https://github.com/ReVanced/revanced-manager/commit/2f46e3b52e3a06f8a96e50c617fdd47e356ca1d9))\n* App search bar on initial screen ([05c09da](https://github.com/ReVanced/revanced-manager/commit/05c09da3a274328a5a002828b582d65d85c39a23))\n* Change all arrow right icons to chevron rights ([ff25d4e](https://github.com/ReVanced/revanced-manager/commit/ff25d4eb5d2177f7ab0f3aeb6d2df32e2e783306))\n* Move API settings to Developer Options ([3067478](https://github.com/ReVanced/revanced-manager/commit/3067478ebbe9db06833d8d31545c65985309c48f))\n* Move optional notification to settings screen ([7638ec7](https://github.com/ReVanced/revanced-manager/commit/7638ec720292e33c938c14add000431a6347e3f5))\n* Notification priority system ([74ca361](https://github.com/ReVanced/revanced-manager/commit/74ca36119a98b3f7bf963e56494b55d83e2ceec9))\n* Required permission onboarding ([193315b](https://github.com/ReVanced/revanced-manager/commit/193315b69e665c5ab8940c9c9b473ac8949d29eb))\n* Search patched app and patchable app ([0586e76](https://github.com/ReVanced/revanced-manager/commit/0586e7671d5d8c693fa362cf2685622eb03a2537))\n* Tooltip for icon button and FAB ([197f37b](https://github.com/ReVanced/revanced-manager/commit/197f37b653a5b2426d5ddf6123db69819763cfd2))\n* Update default colour specification to Expressive 2025 ([cfdd62e](https://github.com/ReVanced/revanced-manager/commit/cfdd62ecff0aecf010a53d3b46d6529f8a01d5ac))\n\n\n### Reverts\n\n* Revert \"feat: Move optional notification to settings screen\" ([82adf9c](https://github.com/ReVanced/revanced-manager/commit/82adf9c8e3122ca32c913b628cf2576cd9112341))\n* Revert \"feat: Notification priority system\" ([b13157a](https://github.com/ReVanced/revanced-manager/commit/b13157a0fd216b4e3a4a8ef6b2f21beabaf10930))\n* Revert \"feat: Required permission onboarding\" ([efda212](https://github.com/ReVanced/revanced-manager/commit/efda212e92d31066bee0bb6174d4d483aed81aa8))\n* Revert \"fix: Don't show user that you can do this when you clearly can't\" ([ec261db](https://github.com/ReVanced/revanced-manager/commit/ec261db374f8b7d89e01a446b66c248bf28aad89))\n* Revert \"Reapply \"feat: Required permission onboarding\"\" ([3a8c26c](https://github.com/ReVanced/revanced-manager/commit/3a8c26c897e7dabc04a6a19e845d09f44a562d08))\n* Revert \"Revert \"feat: Move optional notification to settings screen\"\" ([8513cd1](https://github.com/ReVanced/revanced-manager/commit/8513cd15f8c5618464360d5ceca0213883f2c9f3))\n\n# app [2.2.0-dev.3](https://github.com/ReVanced/revanced-manager/compare/v2.2.0-dev.2...v2.2.0-dev.3) (2026-03-17)\n\n\n### Bug Fixes\n\n* Add padding for initial screen ([68da359](https://github.com/ReVanced/revanced-manager/commit/68da3592521d18f2f298bb74e72097a1efe57dc7))\n* Correctly 180 the back arrow for expansible list ([6c62e57](https://github.com/ReVanced/revanced-manager/commit/6c62e57f09b72191de328c277787db80c4bb62af))\n* Custom ROM crashed with their file picker deleted somehow ([00aedda](https://github.com/ReVanced/revanced-manager/commit/00aeddac67031534bfef60183db6a124b16f24c4))\n* Don't 360 the back arrow button for no reason ([5a175e2](https://github.com/ReVanced/revanced-manager/commit/5a175e2c347f824124feb977110ff6be6cf7edcb))\n* Don't show user that you can do this when you clearly can't ([716ecdd](https://github.com/ReVanced/revanced-manager/commit/716ecdd5f30dc58725026f3b6e4021001c174aef))\n* Downloader string being use for incorrect app selection ([b9865df](https://github.com/ReVanced/revanced-manager/commit/b9865dfbf542ea0a82a341349b117c4a9c61fc10))\n* FAB animations in dashboard being instant ([6805ba1](https://github.com/ReVanced/revanced-manager/commit/6805ba18e0470e49dd304aa989dfa6c1e3da2668))\n* Hide installed section if no app are installed ([a6b7517](https://github.com/ReVanced/revanced-manager/commit/a6b7517e8f9c3055db88a5e42b718505d7ad5885))\n* Inconsistent announcement list ([06c5cff](https://github.com/ReVanced/revanced-manager/commit/06c5cffe1fa68349c342734f3743bc5d1b16b7d0))\n* Language picker using patch search string ([8c2be24](https://github.com/ReVanced/revanced-manager/commit/8c2be242ef95d11b96c705c9d4494f4be50e7786))\n* List being stuck too close together ([5ccf2e4](https://github.com/ReVanced/revanced-manager/commit/5ccf2e48a4fd155a7d8fad0ee3c295bd06194339))\n* Make safeguard dialog title more clearer ([7691a7e](https://github.com/ReVanced/revanced-manager/commit/7691a7e144f0777c0d71ea6af4b75a9fb17aeddf))\n* Make the card actually clickable ([979728a](https://github.com/ReVanced/revanced-manager/commit/979728a4cf504b77c50e3a3202e18b7cebe0bed2))\n* Make title notification card follow general preferred-ish visual size ([fc7a97c](https://github.com/ReVanced/revanced-manager/commit/fc7a97c98c52f3ec2e683fde6d1a24c85a2be801))\n* Make weight in unread AnnouncementList look so nicer on certain device density ([c2abfa5](https://github.com/ReVanced/revanced-manager/commit/c2abfa576afda3b8d792e316b2e07ce7ce44d59c))\n* Merge chervon style doppelgirl design to public dev ([ae5dc83](https://github.com/ReVanced/revanced-manager/commit/ae5dc835aa8b6c0f0e30df3ee48f8f3128c34c2f))\n* Merge chervon style doppelgirl design to public dev ([603ff91](https://github.com/ReVanced/revanced-manager/commit/603ff91a4ed34cdf2d48b5def3c9aece205f7fef))\n* Merge expressive switch doppelgirl design to public dev ([698b6ed](https://github.com/ReVanced/revanced-manager/commit/698b6ed1881357a3fbd692987305b93ed6ecaca2))\n* Onboarding screen perpetually loading on unavailable network ([4b9841b](https://github.com/ReVanced/revanced-manager/commit/4b9841b876b63747095a510ca0b517c09c9910a2))\n* Patches being expanded instantly ([83d7506](https://github.com/ReVanced/revanced-manager/commit/83d7506dbc6a15116e4e6a0dd8174da5c6e7e15d))\n* Performance impact with lots of app entries ([fb08890](https://github.com/ReVanced/revanced-manager/commit/fb0889052e1cb7fc3d115bc0825e074903ede385))\n* Redundant string information ([ab80c53](https://github.com/ReVanced/revanced-manager/commit/ab80c53c04a45f8587ad9ebdc06271c152a3ddcd))\n* Remove currently not applicable workaround code for building release ([aa0d59f](https://github.com/ReVanced/revanced-manager/commit/aa0d59f86fac7c497bf245e2d20b40a65d3fd0d0))\n* Remove useless archive icon when it's under archive list ([6d5ecd3](https://github.com/ReVanced/revanced-manager/commit/6d5ecd3d541c008b15cbb3e24c4c21a79ff353d1))\n* Search bar padding being set when fully expanded ([05e6ca1](https://github.com/ReVanced/revanced-manager/commit/05e6ca18ab6f2a65fdd75ce3d0efc16dc7b8f3b5))\n* Show copy logs toast on less than Android 12.1 ([940778b](https://github.com/ReVanced/revanced-manager/commit/940778b7a26b8a3d36d130e0f9bd42a948a596c0))\n* Some haptic constant are not working ([7954128](https://github.com/ReVanced/revanced-manager/commit/79541280df5dadef1628044e818d37f8b60e9da8))\n* Use refresh icon to indicate instant update check ([cf8b986](https://github.com/ReVanced/revanced-manager/commit/cf8b986e5ef76a03db5965d4bca80633cd41032f))\n* Use refresh icon to indicate instant update check (2/?) ([3120aff](https://github.com/ReVanced/revanced-manager/commit/3120affc9cd766a1188392eb46da43d955851d27))\n\n\n### Features\n\n* Add refresh banner when nothing is loaded after setup ([2f46e3b](https://github.com/ReVanced/revanced-manager/commit/2f46e3b52e3a06f8a96e50c617fdd47e356ca1d9))\n* App search bar on initial screen ([05c09da](https://github.com/ReVanced/revanced-manager/commit/05c09da3a274328a5a002828b582d65d85c39a23))\n* Move optional notification to settings screen ([7638ec7](https://github.com/ReVanced/revanced-manager/commit/7638ec720292e33c938c14add000431a6347e3f5))\n* Notification priority system ([74ca361](https://github.com/ReVanced/revanced-manager/commit/74ca36119a98b3f7bf963e56494b55d83e2ceec9))\n* Required permission onboarding ([193315b](https://github.com/ReVanced/revanced-manager/commit/193315b69e665c5ab8940c9c9b473ac8949d29eb))\n* Search patched app and patchable app ([0586e76](https://github.com/ReVanced/revanced-manager/commit/0586e7671d5d8c693fa362cf2685622eb03a2537))\n* Tooltip for icon button and FAB ([197f37b](https://github.com/ReVanced/revanced-manager/commit/197f37b653a5b2426d5ddf6123db69819763cfd2))\n* Update default colour specification to Expressive 2025 ([cfdd62e](https://github.com/ReVanced/revanced-manager/commit/cfdd62ecff0aecf010a53d3b46d6529f8a01d5ac))\n\n\n### Reverts\n\n* Revert \"feat: Move optional notification to settings screen\" ([82adf9c](https://github.com/ReVanced/revanced-manager/commit/82adf9c8e3122ca32c913b628cf2576cd9112341))\n* Revert \"feat: Notification priority system\" ([b13157a](https://github.com/ReVanced/revanced-manager/commit/b13157a0fd216b4e3a4a8ef6b2f21beabaf10930))\n* Revert \"feat: Required permission onboarding\" ([efda212](https://github.com/ReVanced/revanced-manager/commit/efda212e92d31066bee0bb6174d4d483aed81aa8))\n* Revert \"fix: Don't show user that you can do this when you clearly can't\" ([ec261db](https://github.com/ReVanced/revanced-manager/commit/ec261db374f8b7d89e01a446b66c248bf28aad89))\n* Revert \"Reapply \"feat: Required permission onboarding\"\" ([3a8c26c](https://github.com/ReVanced/revanced-manager/commit/3a8c26c897e7dabc04a6a19e845d09f44a562d08))\n* Revert \"Revert \"feat: Move optional notification to settings screen\"\" ([8513cd1](https://github.com/ReVanced/revanced-manager/commit/8513cd15f8c5618464360d5ceca0213883f2c9f3))\n\n# app [2.2.0-dev.2](https://github.com/ReVanced/revanced-manager/compare/v2.2.0-dev.1...v2.2.0-dev.2) (2026-03-16)\n\n\n### Features\n\n* Add copy to clipboard on ShareSheet ([7e1416e](https://github.com/ReVanced/revanced-manager/commit/7e1416ecef13e2ea4289a6cfb64eb3bba8d6f331))\n\n# app [2.2.0-dev.1](https://github.com/ReVanced/revanced-manager/compare/v2.1.1-dev.2...v2.2.0-dev.1) (2026-03-16)\n\n\n### Bug Fixes\n\n* Consistent circle separator between text across patchesinfoscreen and announcements ([a7792db](https://github.com/ReVanced/revanced-manager/commit/a7792dbf4d947982e343ff2aa2ce71bd5692c09a))\n\n\n### Features\n\n* Change all arrow right icons to chevron rights ([ff25d4e](https://github.com/ReVanced/revanced-manager/commit/ff25d4eb5d2177f7ab0f3aeb6d2df32e2e783306))\n* Move API settings to Developer Options ([3067478](https://github.com/ReVanced/revanced-manager/commit/3067478ebbe9db06833d8d31545c65985309c48f))\n\n## app [2.1.1-dev.2](https://github.com/ReVanced/revanced-manager/compare/v2.1.1-dev.1...v2.1.1-dev.2) (2026-03-16)\n\n\n### Bug Fixes\n\n* Close \"Add downloaders\" dialog on add ([f60ce02](https://github.com/ReVanced/revanced-manager/commit/f60ce02a8193bf71b4b37329c3e8004e569e2b67))\n\n## app [2.1.1-dev.1](https://github.com/ReVanced/revanced-manager/compare/v2.1.0...v2.1.1-dev.1) (2026-03-16)\n\n\n### Bug Fixes\n\n* About page content and log API requests ([62111e2](https://github.com/ReVanced/revanced-manager/commit/62111e2499d9fc0f4e7b364236e90d5a5f46981f))\n\n# app [2.1.0](https://github.com/ReVanced/revanced-manager/compare/v2.0.1...v2.1.0) (2026-03-15)\n\n\n### Bug Fixes\n\n* Disable ProGuard to fix various patching errors ([5f79397](https://github.com/ReVanced/revanced-manager/commit/5f79397a7cc600ad16c18f807caccf72862c68e1))\n* Source list crash when using multiple downloaders ([#3043](https://github.com/ReVanced/revanced-manager/issues/3043)) ([8170837](https://github.com/ReVanced/revanced-manager/commit/8170837e2c2a57c3cc6d1d3f36fc0cf627b69f28))\n\n\n### Features\n\n* Change source filepicker type for downloaders ([#3045](https://github.com/ReVanced/revanced-manager/issues/3045)) ([dcc30cd](https://github.com/ReVanced/revanced-manager/commit/dcc30cdae9c0f46bce6d11df763cf1519b42a4af))\n\n# app [2.1.0-dev.2](https://github.com/ReVanced/revanced-manager/compare/v2.1.0-dev.1...v2.1.0-dev.2) (2026-03-15)\n\n\n### Bug Fixes\n\n* Disable ProGuard to fix various patching errors ([5f79397](https://github.com/ReVanced/revanced-manager/commit/5f79397a7cc600ad16c18f807caccf72862c68e1))\n\n# app [2.1.0-dev.1](https://github.com/ReVanced/revanced-manager/compare/v2.0.2-dev.1...v2.1.0-dev.1) (2026-03-15)\n\n\n### Features\n\n* Change source filepicker type for downloaders ([#3045](https://github.com/ReVanced/revanced-manager/issues/3045)) ([dcc30cd](https://github.com/ReVanced/revanced-manager/commit/dcc30cdae9c0f46bce6d11df763cf1519b42a4af))\n\n## app [2.0.2-dev.1](https://github.com/ReVanced/revanced-manager/compare/v2.0.1...v2.0.2-dev.1) (2026-03-15)\n\n\n### Bug Fixes\n\n* Source list crash when using multiple downloaders ([#3043](https://github.com/ReVanced/revanced-manager/issues/3043)) ([8170837](https://github.com/ReVanced/revanced-manager/commit/8170837e2c2a57c3cc6d1d3f36fc0cf627b69f28))\n\n## app [2.0.1](https://github.com/ReVanced/revanced-manager/compare/v2.0.0...v2.0.1) (2026-03-15)\n\n\n### Bug Fixes\n\n* Always download initial versions of patches and downloaders ([1ffcfca](https://github.com/ReVanced/revanced-manager/commit/1ffcfcafb883bfb500aa3611896e27215b8beb10))\n* Cleanup downloaded apps ([026b6a9](https://github.com/ReVanced/revanced-manager/commit/026b6a9a1eda240c21cfe2527bf1d8c09ac955ee))\n* Correct condition for displaying days ago in Util.kt ([#3027](https://github.com/ReVanced/revanced-manager/issues/3027)) ([467203a](https://github.com/ReVanced/revanced-manager/commit/467203a2fafb37e0ec790573e6acc1e221c31452))\n* Restore app deletion dialog ([65ce565](https://github.com/ReVanced/revanced-manager/commit/65ce565bbc45fb12020acee3e6f75f90c552f950))\n\n## app [2.0.1-dev.3](https://github.com/ReVanced/revanced-manager/compare/v2.0.1-dev.2...v2.0.1-dev.3) (2026-03-15)\n\n\n### Bug Fixes\n\n* Correct condition for displaying days ago in Util.kt ([#3027](https://github.com/ReVanced/revanced-manager/issues/3027)) ([467203a](https://github.com/ReVanced/revanced-manager/commit/467203a2fafb37e0ec790573e6acc1e221c31452))\n\n## app [2.0.1-dev.2](https://github.com/ReVanced/revanced-manager/compare/v2.0.1-dev.1...v2.0.1-dev.2) (2026-03-15)\n\n\n### Bug Fixes\n\n* Always download initial versions of patches and downloaders ([1ffcfca](https://github.com/ReVanced/revanced-manager/commit/1ffcfcafb883bfb500aa3611896e27215b8beb10))\n* Cleanup downloaded apps ([026b6a9](https://github.com/ReVanced/revanced-manager/commit/026b6a9a1eda240c21cfe2527bf1d8c09ac955ee))\n\n## app [2.0.1-dev.1](https://github.com/ReVanced/revanced-manager/compare/v2.0.0...v2.0.1-dev.1) (2026-03-15)\n\n\n### Bug Fixes\n\n* Restore app deletion dialog ([65ce565](https://github.com/ReVanced/revanced-manager/commit/65ce565bbc45fb12020acee3e6f75f90c552f950))\n\n# app [2.0.0](https://github.com/ReVanced/revanced-manager/compare/v1.25.1...v2.0.0) (2026-03-14)\n\n\n* feat!: Bump major version ([4f6197c](https://github.com/ReVanced/revanced-manager/commit/4f6197cf7dbd80fb554c12329b994ccd8383dee5))\n\n\n### Bug Fixes\n\n* `ExtendedFloatingActionButton` not accessible by screen readers ([#2080](https://github.com/ReVanced/revanced-manager/issues/2080)) ([e4f19b0](https://github.com/ReVanced/revanced-manager/commit/e4f19b0c251e818cce59e11362a29dc8f657e065))\n* add bounds checks in patch selector ([483be5d](https://github.com/ReVanced/revanced-manager/commit/483be5d722db2be2595f6f6dd0c537a6c8487daf))\n* Add missing header for \"Updates\" settings ([#2642](https://github.com/ReVanced/revanced-manager/issues/2642)) ([d4d2056](https://github.com/ReVanced/revanced-manager/commit/d4d2056585ccd4a0456318448dc822c0f40c9c50))\n* add newlines to debug logs ([4753873](https://github.com/ReVanced/revanced-manager/commit/4753873866b575e2dcb160020df63f63862c8f33))\n* Adjust ReVanced icons ([#2890](https://github.com/ReVanced/revanced-manager/issues/2890)) ([bc2a2cb](https://github.com/ReVanced/revanced-manager/commit/bc2a2cb3976234c8a74db93a593e103d77d22a07))\n* Allow different app version when downloading via plugin if setting is off ([#2579](https://github.com/ReVanced/revanced-manager/issues/2579)) ([59d233e](https://github.com/ReVanced/revanced-manager/commit/59d233e15c885104900c7d4129fb4839c4da81e0))\n* allow updating patches on metered networks ([9d9a0e8](https://github.com/ReVanced/revanced-manager/commit/9d9a0e81dbc9e73e6e3181f6bea9cabb69e49ea8))\n* always use default patch selection if customization is disabled ([cc77181](https://github.com/ReVanced/revanced-manager/commit/cc771817cba3dfd8f704cb7ecc9089ad7911c6ce))\n* android icon not loading in app selector ([deea682](https://github.com/ReVanced/revanced-manager/commit/deea68265157da65ef98986d751e2551797522e0))\n* automatically focus search views ([d23d673](https://github.com/ReVanced/revanced-manager/commit/d23d673c4703cdfa3be3a292873bbb37bea30ac7))\n* available updates dialog list item color ([1a54313](https://github.com/ReVanced/revanced-manager/commit/1a54313c1dc4efbb8b274201a79e28661a7ecf64))\n* Bottom sheet on patches selector glitched when going to full screen sheet ([aa153a7](https://github.com/ReVanced/revanced-manager/commit/aa153a74d596c19d2844cb2fe72b5694d6a5b510))\n* Broken header padding in `AlertDialogExtended` when using an Icon ([8d939a6](https://github.com/ReVanced/revanced-manager/commit/8d939a6669909a44382fc7404276f2eeefcf728d))\n* broken logo in about page on release builds ([ad775f3](https://github.com/ReVanced/revanced-manager/commit/ad775f3059345dd93ff2baf6d018c2beecc413df))\n* Broken version comparison ([c327857](https://github.com/ReVanced/revanced-manager/commit/c3278578237dcddd9e7ab79ee80a02fdeef9604d))\n* buildfile syntax ([#66](https://github.com/ReVanced/revanced-manager/issues/66)) ([5c17a78](https://github.com/ReVanced/revanced-manager/commit/5c17a78e46db586642d53362267472fbbd47ae8c))\n* bundles not loading on Android 14 ([56896d6](https://github.com/ReVanced/revanced-manager/commit/56896d6197baa836bcd4a499ea2cee487e3d07c8))\n* Change the title in the Update screen from \"Updates\" to \"Update\" ([5f23769](https://github.com/ReVanced/revanced-manager/commit/5f2376919bd036987eba8188e3a1a2ff53ef6793)), closes [#1960](https://github.com/ReVanced/revanced-manager/issues/1960)\n* cleanup advanced settings screen ([02ea5c6](https://github.com/ReVanced/revanced-manager/commit/02ea5c6d4a2e6baa7c034b614deb6e4232cf6d0b))\n* **Compose:** Adjusted universal patches safeguard and warnings ([#2550](https://github.com/ReVanced/revanced-manager/issues/2550)) ([663cf2d](https://github.com/ReVanced/revanced-manager/commit/663cf2d6b86c276c6bb236af8e05a4f69df9eba0))\n* contributors screen fix ([#1256](https://github.com/ReVanced/revanced-manager/issues/1256)) ([dc73462](https://github.com/ReVanced/revanced-manager/commit/dc73462ac41bd5f1813358eb5e2265a3e2e7c0f9))\n* contributors screen repository name ([426b289](https://github.com/ReVanced/revanced-manager/commit/426b28932fe37a6d7412685819ffc8e26b69d31c))\n* Correct preference description ([#2619](https://github.com/ReVanced/revanced-manager/issues/2619)) ([0096169](https://github.com/ReVanced/revanced-manager/commit/0096169af8f9e2db6c22b8e88f0dfe1cab1260be))\n* Correctly display universal patches warning ([#2570](https://github.com/ReVanced/revanced-manager/issues/2570)) ([24c4cd3](https://github.com/ReVanced/revanced-manager/commit/24c4cd3f991953dd00b5bf5e7c3ec965315a9528))\n* correctly patch apk files ([c5cb18a](https://github.com/ReVanced/revanced-manager/commit/c5cb18a7eab838ea096577780335a29b9771b43d))\n* crash caused by compose inlining bug ([05fe058](https://github.com/ReVanced/revanced-manager/commit/05fe0581516a373cc26dd559d3fc7f21fcf16f3f))\n* crash when removing used bundles ([189c993](https://github.com/ReVanced/revanced-manager/commit/189c993ada6406db6f8c48c4051c5bd9fac98e2b))\n* Create modules path in root installer ([4fc2ba3](https://github.com/ReVanced/revanced-manager/commit/4fc2ba339b6d275fb9da8b65ff86b74a6594436d))\n* delete temporary files ([#1341](https://github.com/ReVanced/revanced-manager/issues/1341)) ([b03f7b1](https://github.com/ReVanced/revanced-manager/commit/b03f7b18a029465142d08fe1ed68e92c81586a5f))\n* Detect downloaded APKs when patches support any version ([#2967](https://github.com/ReVanced/revanced-manager/issues/2967)) ([65e84e2](https://github.com/ReVanced/revanced-manager/commit/65e84e2944968a312f34d66d1a40c0cc9d3ef473))\n* disable `WebView` history ([#1278](https://github.com/ReVanced/revanced-manager/issues/1278)) ([a811df9](https://github.com/ReVanced/revanced-manager/commit/a811df9547da33fc61397cb33ba5fd35ee470ff9))\n* display version from manifest ([#2634](https://github.com/ReVanced/revanced-manager/issues/2634)) ([1fb94b7](https://github.com/ReVanced/revanced-manager/commit/1fb94b711fdbbbca7d9baaa90c53faf208fc4d0d))\n* Do not poll battery optimization status ([#2491](https://github.com/ReVanced/revanced-manager/issues/2491)) ([26778f5](https://github.com/ReVanced/revanced-manager/commit/26778f57e6dd185d9aed1086aa03659a2e91d1a9))\n* don't store app list in parcel ([e7802ed](https://github.com/ReVanced/revanced-manager/commit/e7802ed3d714cbe6e29409d27989c65d4d7ce6a5))\n* dont crash when the bundle cannot be downloaded ([4d201f1](https://github.com/ReVanced/revanced-manager/commit/4d201f17f2ce01aad6adb456a49c3f03526c5ad3))\n* Downgrade AGP to fix build issues ([c7e56c4](https://github.com/ReVanced/revanced-manager/commit/c7e56c4700a6566a010ef5aaf8ba7efd740dc9ce))\n* **downloader:** versions not loading correctly ([16c4290](https://github.com/ReVanced/revanced-manager/commit/16c4290f05d94cbe53e68cb98307d7be1bfce7af))\n* Exclude desktop AAPT and disable R8 optimizations ([6ce5b67](https://github.com/ReVanced/revanced-manager/commit/6ce5b672feb677eccafffb6a04bdf5513f6d62fa))\n* Flutter migration ([#2946](https://github.com/ReVanced/revanced-manager/issues/2946)) ([31a0f75](https://github.com/ReVanced/revanced-manager/commit/31a0f751aaff3233f50821963f28454d239318b2))\n* handle edge-to-edge properly in fullscreen dialogs ([eba92e2](https://github.com/ReVanced/revanced-manager/commit/eba92e2644663b10e7e17f2cf955afefe260d769))\n* handle exceptions when checking for bundle updates ([1dd6738](https://github.com/ReVanced/revanced-manager/commit/1dd673896454710094e83789abb585c106ee6bcb))\n* Handle open source licenses page crash ([#2569](https://github.com/ReVanced/revanced-manager/issues/2569)) ([f2ea007](https://github.com/ReVanced/revanced-manager/commit/f2ea00757a76ed8758bc0d4df54843c89483c986))\n* hide patch button ([#1284](https://github.com/ReVanced/revanced-manager/issues/1284)) ([dadc546](https://github.com/ReVanced/revanced-manager/commit/dadc5462e352e91cf971395def91d693677701bc))\n* Ignore long click when already in delete mode ([6f6296b](https://github.com/ReVanced/revanced-manager/commit/6f6296b8cde56d5fc73e00ef671ca7ab431455f4)), closes [#2503](https://github.com/ReVanced/revanced-manager/issues/2503)\n* Import AndroidX WindowInsets ([af2683d](https://github.com/ReVanced/revanced-manager/commit/af2683d91df375e0c4ff3ab75ad696f18f69ccf6))\n* import bundles on another thread ([0383bd7](https://github.com/ReVanced/revanced-manager/commit/0383bd74f73a3523d539c44cdf38b0e857c16bdc))\n* import export screen UX ([69c119d](https://github.com/ReVanced/revanced-manager/commit/69c119d545ac811c605124173e5cbc97a9064c79))\n* Improve background running notification ([#2614](https://github.com/ReVanced/revanced-manager/issues/2614)) ([05444d8](https://github.com/ReVanced/revanced-manager/commit/05444d8824a429c7e554d0597f8997e670936a63))\n* improve bundle page strings ([2a63a61](https://github.com/ReVanced/revanced-manager/commit/2a63a6163a8d2e6ee649cb22099b426ed605de8f))\n* Improve consistency between pre-release toggles ([e1b768c](https://github.com/ReVanced/revanced-manager/commit/e1b768c4679ecae8bff8007bdab56ff6544b12b6))\n* improve keystore import error handling and show toast ([cd142a7](https://github.com/ReVanced/revanced-manager/commit/cd142a70d3f210161d3c1f20d2cb82a70432469f))\n* Inconsistent padding for battery optimisation warning ([6c3a99a](https://github.com/ReVanced/revanced-manager/commit/6c3a99a4921ab4438a038ad4c4bccd0326fdd565))\n* Incorrect patcher string value ([f19080a](https://github.com/ReVanced/revanced-manager/commit/f19080a9862be4600860b67cd981b9a3a56b21e7))\n* install dialog getting stuck ([#2900](https://github.com/ReVanced/revanced-manager/issues/2900)) ([18a4df9](https://github.com/ReVanced/revanced-manager/commit/18a4df9af9cac120fdb8e4ff7aadd2e2a8d5c1a6))\n* **installer:** make the correct column scrollable ([64496bf](https://github.com/ReVanced/revanced-manager/commit/64496bfbe77a9a44f5535fd5f12eee803ac7c26a))\n* **installer:** progress tracking ([f547bb7](https://github.com/ReVanced/revanced-manager/commit/f547bb7ab1b7149d7290729527714168a2561b23))\n* **installer:** properly track worker state ([#32](https://github.com/ReVanced/revanced-manager/issues/32)) ([de1ef23](https://github.com/ReVanced/revanced-manager/commit/de1ef23824227796c8583242e624f83d9dae5af3))\n* **installer:** save step incorrectly being marked as completed ([0264308](https://github.com/ReVanced/revanced-manager/commit/0264308b6dad051db80da6f130e8d28d86b38f04))\n* **installer:** sign and install on threads ([3d59ee5](https://github.com/ReVanced/revanced-manager/commit/3d59ee51acc5a6ebb17f68c0462d17d7ecb0f07c))\n* Instantly re-fetch patch bundle on pre-release preference update ([d5671db](https://github.com/ReVanced/revanced-manager/commit/d5671db3a77541c07bbbb4c3baca02f3ba0703f2)), closes [#2784](https://github.com/ReVanced/revanced-manager/issues/2784)\n* jvm signature clash error ([ee0f342](https://github.com/ReVanced/revanced-manager/commit/ee0f34245636027d55bd5bdfce4d6a5e6c3b3dcd))\n* library info not being embedded ([8c9fe69](https://github.com/ReVanced/revanced-manager/commit/8c9fe6989fc6d05afd53baa877f1e6dffc067b50))\n* load patch bundles earlier ([a2f9e2f](https://github.com/ReVanced/revanced-manager/commit/a2f9e2f1da961a13b2b20e2812593031c9339b88))\n* **locales:** use buildconfig instead of generating kt file ([72b1db9](https://github.com/ReVanced/revanced-manager/commit/72b1db9a2f33ab5d5fffd8ba83c05901eff19bea))\n* Make app source dialog string more accurate ([c8b429f](https://github.com/ReVanced/revanced-manager/commit/c8b429fa4741a28b9c29144939036d6fa8633cb4))\n* Make transitions in/out duration the same ([cd24d59](https://github.com/ReVanced/revanced-manager/commit/cd24d59b19d8b662af9e662ac48b4c13071e2284))\n* Match \"Installation incompatible\" dialog message with Flutter Manager ([#2231](https://github.com/ReVanced/revanced-manager/issues/2231)) ([fedaedf](https://github.com/ReVanced/revanced-manager/commit/fedaedfda112260144b0b9b0776509ddb3438046))\n* Merge doppelgirl design decision to public ([1277315](https://github.com/ReVanced/revanced-manager/commit/12773154d6d73d90e9447ef4c0f991575f4840a9))\n* Migration of keystore, by fixing mislabeling of alias as cn ([#2769](https://github.com/ReVanced/revanced-manager/issues/2769)) ([aeab639](https://github.com/ReVanced/revanced-manager/commit/aeab639b2b09e8bbd2478cfbf5a518586405c0f7))\n* minify crash on building release ([#1245](https://github.com/ReVanced/revanced-manager/issues/1245)) ([6561e4c](https://github.com/ReVanced/revanced-manager/commit/6561e4c97c19134b22b72e19fad3884f99327b9a))\n* more android 34 fixes ([7fb1e27](https://github.com/ReVanced/revanced-manager/commit/7fb1e27617b69803b3d4463993b2290877502545))\n* move battery warning to dashboard ([3a05150](https://github.com/ReVanced/revanced-manager/commit/3a05150fa33f119ecdf436f8508862ef81c327a0))\n* Move temporary files outside of the cache directory ([#2122](https://github.com/ReVanced/revanced-manager/issues/2122)) ([b93ecc0](https://github.com/ReVanced/revanced-manager/commit/b93ecc0db20339393e1296c44ce4b1dbd837b577))\n* Never show again toggle doing nothing for Update dialog ([6f4219c](https://github.com/ReVanced/revanced-manager/commit/6f4219c01ba43b70e130f210c8d48978a6056f68))\n* Offcenter loading indicator in AppSelector ([12d92ba](https://github.com/ReVanced/revanced-manager/commit/12d92ba8110f5d1ac78aeecfa575444b5c53f561))\n* Offset badge ([c73fdfd](https://github.com/ReVanced/revanced-manager/commit/c73fdfdd2d3a1b8552d9c26df575b3019346596d))\n* only perform haptics on events ([e55566d](https://github.com/ReVanced/revanced-manager/commit/e55566d3df25480260922f0418b4bbee5d7b7a07))\n* option state crash ([#1456](https://github.com/ReVanced/revanced-manager/issues/1456)) ([f183b6d](https://github.com/ReVanced/revanced-manager/commit/f183b6d8a6b139fe3e84d5ea3a9658ef900453bc))\n* parcel error for nullable types ([336eed3](https://github.com/ReVanced/revanced-manager/commit/336eed3a95111ebbe456321f5986e6875ded354e))\n* pass worker inputs without serialization ([#44](https://github.com/ReVanced/revanced-manager/issues/44)) ([059a72b](https://github.com/ReVanced/revanced-manager/commit/059a72b9dd9103d2b3704daa7dbb13ad83971460))\n* patch count remaining at zero when using process runtime ([#2542](https://github.com/ReVanced/revanced-manager/issues/2542)) ([f5e1e0b](https://github.com/ReVanced/revanced-manager/commit/f5e1e0b0659e5775dd460b8dfc15427eb0175139))\n* patch options reset button being broken ([e1647fd](https://github.com/ReVanced/revanced-manager/commit/e1647fdef0c9f68e171a2d15e2b6e744da6bbaf5))\n* Patch process cancelation dialog conditions ([#2554](https://github.com/ReVanced/revanced-manager/issues/2554)) ([e97b19d](https://github.com/ReVanced/revanced-manager/commit/e97b19d2b65dbfc49ed062b123c363e412b9bf8e))\n* Patch selection screen padding ([#2533](https://github.com/ReVanced/revanced-manager/issues/2533)) ([cd2dbcc](https://github.com/ReVanced/revanced-manager/commit/cd2dbcc841e56dac99230ea6501af87c43e9c572))\n* Patcher FAB elevation being wrong on BAB component ([30ecf62](https://github.com/ReVanced/revanced-manager/commit/30ecf62d356df41bcd6e2b167ee7262ce6655e20))\n* **patcher:** add notification and wakelock to worker; chore: add app icon ([8b6d32d](https://github.com/ReVanced/revanced-manager/commit/8b6d32dd7b3ca4c694414a55a1b6202b62636530))\n* patches not being reloaded ([dccf861](https://github.com/ReVanced/revanced-manager/commit/dccf86163af34341e3e451df9f24356c7294ae1e))\n* **patches selector:** copy the selected patches list ([70e49aa](https://github.com/ReVanced/revanced-manager/commit/70e49aaaa3a42510cb9ced2209c90cd1da98391d))\n* perform selected app operations in the correct order ([34cf848](https://github.com/ReVanced/revanced-manager/commit/34cf848baaaa2504d162c515a95240d45bd7092a))\n* permission error when using installed app ([8767f0e](https://github.com/ReVanced/revanced-manager/commit/8767f0e99c6de5bbb0a690ced40f6e9a486f0828))\n* Playback Switch's Haptic Feedback ([#2639](https://github.com/ReVanced/revanced-manager/issues/2639)) ([9fdca5a](https://github.com/ReVanced/revanced-manager/commit/9fdca5a0afd6be8a24e2ec09eec0000b0b9cd179))\n* prevent back presses during installation ([2ff7072](https://github.com/ReVanced/revanced-manager/commit/2ff70728b490b92f212a82dcf599bc0c23f589e7))\n* Prevent trailing comma when no locales are generated ([b16931c](https://github.com/ReVanced/revanced-manager/commit/b16931ca79d5ce4d17c75f6dd3bf6f976b8ff7be))\n* process death resilience and account for android 11 bug ([#2355](https://github.com/ReVanced/revanced-manager/issues/2355)) ([83eeeae](https://github.com/ReVanced/revanced-manager/commit/83eeeae801827800a0787e9e753c72d2a24d7970))\n* progress bar not updating ([dcaa38c](https://github.com/ReVanced/revanced-manager/commit/dcaa38c8824f54da7a833c354b247f309d1c9871))\n* Release builds not working ([00b3c59](https://github.com/ReVanced/revanced-manager/commit/00b3c59572760993f69f2663456237faafff0283))\n* release builds not working properly ([6f6476e](https://github.com/ReVanced/revanced-manager/commit/6f6476e85158cad4e2497e9f72b73c4dc948f0bc))\n* remove battery optimization notification if user grants the permission ([9863c51](https://github.com/ReVanced/revanced-manager/commit/9863c5161a1bc16941a323e654f80f8cb0122f9f))\n* Remove quotes from strings ([fc30ba5](https://github.com/ReVanced/revanced-manager/commit/fc30ba5e83f27329b05dc81f484bb8f7471b6a99))\n* Remove redundant patch fab on initial tab screen ([c925078](https://github.com/ReVanced/revanced-manager/commit/c925078a84adcf371a999fdb9ed2d886fbad4507))\n* remove the unique constraint for patch bundle names ([ea29d0f](https://github.com/ReVanced/revanced-manager/commit/ea29d0f00c3b3b2c137c4849e6c445a6bf9a180f))\n* Remove unnecessary screen padding ([8419f75](https://github.com/ReVanced/revanced-manager/commit/8419f75d597dd198aa1029fae2109646c5874078)), closes [#2062](https://github.com/ReVanced/revanced-manager/issues/2062)\n* remove unused function preventing compilation ([2297e94](https://github.com/ReVanced/revanced-manager/commit/2297e94cb81a9a22ea032d8e247769774ca85087))\n* Reset cached theme on theme change to avoid broken colors ([#2527](https://github.com/ReVanced/revanced-manager/issues/2527)) ([9a82b78](https://github.com/ReVanced/revanced-manager/commit/9a82b785280954973cafc5e6dccb3c90fdb5ef49))\n* run blocking IO operations in the correct context ([969ddb7](https://github.com/ReVanced/revanced-manager/commit/969ddb7bef321d7aa2a682b8128b1f755f35c28b))\n* run props flow on correct dispatcher ([#2035](https://github.com/ReVanced/revanced-manager/issues/2035)) ([d3d4c27](https://github.com/ReVanced/revanced-manager/commit/d3d4c27f6d7affceef233a0138ee6c985c7f56bc))\n* Save FAB freaking out in select patches screen ([4c0b6b0](https://github.com/ReVanced/revanced-manager/commit/4c0b6b02e95a8d6f655bcf5c25493b1f9a4a4dcd))\n* Screen turns off while patching due to wrong WakeLock ([#2147](https://github.com/ReVanced/revanced-manager/issues/2147)) ([4de5340](https://github.com/ReVanced/revanced-manager/commit/4de534094adc0665021d3ba129a648d896718568))\n* scrolling in patch selector ([154f036](https://github.com/ReVanced/revanced-manager/commit/154f036fe956096bca983fe9d6654ccca38fd8ac))\n* SearchBar padding in patches screen ([54d59c3](https://github.com/ReVanced/revanced-manager/commit/54d59c36fec7958ae60e35f40b9f0e821ba941c4))\n* Selected patch count ([#2559](https://github.com/ReVanced/revanced-manager/issues/2559)) ([a91ff60](https://github.com/ReVanced/revanced-manager/commit/a91ff60533b44629ea60e8cd6acceeb80b0253b7))\n* serialization not working ([4d04ae0](https://github.com/ReVanced/revanced-manager/commit/4d04ae088c406d84936120cb753cd1f11fb8a8c2))\n* show available and selected patches in patch selector screen ([61f1ee0](https://github.com/ReVanced/revanced-manager/commit/61f1ee0627d6cbb6b9a4d226eb6c2f9e0b8c6453))\n* show install button when installation has been cancelled ([93f4a5b](https://github.com/ReVanced/revanced-manager/commit/93f4a5bb7c912ca77bb04e414432922c89d3e2c0))\n* Show previously downloaded APKs in source selector dialog ([#2964](https://github.com/ReVanced/revanced-manager/issues/2964)) ([b28f0a8](https://github.com/ReVanced/revanced-manager/commit/b28f0a84f367eafd9ac01c74aefcbbe9395ee4ba))\n* Show selection warning also on patch option ([#2643](https://github.com/ReVanced/revanced-manager/issues/2643)) ([3b82767](https://github.com/ReVanced/revanced-manager/commit/3b82767a897eeca1dda1d8343f1db4207050e960))\n* sources screen being misaligned during transitions ([2ac3d5c](https://github.com/ReVanced/revanced-manager/commit/2ac3d5c483d5cc4776681ed3f900550a4e45f616))\n* specify `multithreadingDexFileWriter` in `PatcherOptions` ([#1402](https://github.com/ReVanced/revanced-manager/issues/1402)) ([3f362b6](https://github.com/ReVanced/revanced-manager/commit/3f362b605fbce3ea72e7c95b7e0bc614443c7d44))\n* Support patching on ARMv7 by updating AAPT2 ([#2084](https://github.com/ReVanced/revanced-manager/issues/2084)) ([15b47f9](https://github.com/ReVanced/revanced-manager/commit/15b47f9bb6cd6bb0360fda6ac641cd4c75542287))\n* Transparent status on fullscreen dialog ([#2654](https://github.com/ReVanced/revanced-manager/issues/2654)) ([a8820a4](https://github.com/ReVanced/revanced-manager/commit/a8820a4daf71704f6945b8f794495fe8a8d7589e))\n* Turn off filters by default ([#2079](https://github.com/ReVanced/revanced-manager/issues/2079)) ([44f8b1f](https://github.com/ReVanced/revanced-manager/commit/44f8b1fb6bffed5866ada356910119465320a9a8))\n* typo in string name `import_keystore_description` ([#1273](https://github.com/ReVanced/revanced-manager/issues/1273)) ([933e69e](https://github.com/ReVanced/revanced-manager/commit/933e69e21e97fede2183a26dd1645a6eb96c4509))\n* **ui:** make entire patches view button selectable ([#1271](https://github.com/ReVanced/revanced-manager/issues/1271)) ([83cdaae](https://github.com/ReVanced/revanced-manager/commit/83cdaaee183ff1b6d905977df38fe4e47f7d5973))\n* unexclude other destabilizers ([2c3d436](https://github.com/ReVanced/revanced-manager/commit/2c3d436b258f100feea0b9864b7131ae2c5bda79))\n* Update selected patch count when SelectionState changes ([#2896](https://github.com/ReVanced/revanced-manager/issues/2896)) ([0d26df0](https://github.com/ReVanced/revanced-manager/commit/0d26df03f463195dae550240c7f652680763079c))\n* Updates popup shows incorrect names ([#1283](https://github.com/ReVanced/revanced-manager/issues/1283)) ([c879faf](https://github.com/ReVanced/revanced-manager/commit/c879faf2eb338476c6abd9f104922b0d49f95cd6))\n* Use `compatible` rather than `support` when referring to patch compatibility ([#2422](https://github.com/ReVanced/revanced-manager/issues/2422)) ([8b3c4eb](https://github.com/ReVanced/revanced-manager/commit/8b3c4eb91c491a0971e2ccf7d46012437eca5c25))\n* use correct `getViewModel` ([5b6ae80](https://github.com/ReVanced/revanced-manager/commit/5b6ae800fdfc93ef5058b21b3e48daac2a4e1358))\n* use correct classes to determine option type ([e833bf4](https://github.com/ReVanced/revanced-manager/commit/e833bf4ad14811bb6880ae2d97055e4ce0de222f))\n* use correct directory ([9e1ebb3](https://github.com/ReVanced/revanced-manager/commit/9e1ebb390244dcb9af03a9164a32386481ec5691))\n* Use FAB instead of ListItem to patch in App Overview ([6ace71b](https://github.com/ReVanced/revanced-manager/commit/6ace71b739302466274ce9b46f5f7dd6ab9da05d)), closes [#1995](https://github.com/ReVanced/revanced-manager/issues/1995)\n* use proper update icon ([b59a161](https://github.com/ReVanced/revanced-manager/commit/b59a16191a61c64275137c4a6145fd30d68aa480))\n* use ReVanced ring logo in about section ([#1302](https://github.com/ReVanced/revanced-manager/issues/1302)) ([933a4a3](https://github.com/ReVanced/revanced-manager/commit/933a4a32203425e745e05615217a8d0975c2e959))\n* Use the correct icon in API URL dialog ([c22e5b4](https://github.com/ReVanced/revanced-manager/commit/c22e5b4051515e0f02828a2b30f6af19b48ba55f)), closes [#1972](https://github.com/ReVanced/revanced-manager/issues/1972)\n* use upsert when modifying installed apps ([90edf1d](https://github.com/ReVanced/revanced-manager/commit/90edf1ddd0de29b299855810402a31828d989d04))\n* **VersionSelector:** use correct LazyColumn item key ([413fe98](https://github.com/ReVanced/revanced-manager/commit/413fe980a8c0b45e3924c98b2fbd1a3e9b579528))\n* we actually don't want to exclude reflection symbols ([3222840](https://github.com/ReVanced/revanced-manager/commit/32228404c4ef38bb8931d5cfdf6a7aefde23a89c))\n\n\n### Features\n\n* **about screen:** complete about screen ([1d6b34a](https://github.com/ReVanced/revanced-manager/commit/1d6b34a39f76e8e733649f7fcfeb20eb1009a39a))\n* Add `isScrollingUp` support for ScrollState ([bf049c3](https://github.com/ReVanced/revanced-manager/commit/bf049c3c1ac12a60c5c6226b5c3fec7f72caa7db))\n* add ability to share debug logs ([feb0ca4](https://github.com/ReVanced/revanced-manager/commit/feb0ca4cf315e5d332f36039fbb989b3cfb9cf58))\n* Add announcements ([#2948](https://github.com/ReVanced/revanced-manager/issues/2948)) ([813df46](https://github.com/ReVanced/revanced-manager/commit/813df46847620bd854dccc52ff244388b3385e17))\n* add checkboxes to the downloaded apps page ([ca93524](https://github.com/ReVanced/revanced-manager/commit/ca93524be0b37f38b860d8512c81d2898b2860af))\n* Add confirm dialogs when toggling dangerous settings ([#2072](https://github.com/ReVanced/revanced-manager/issues/2072)) ([6643276](https://github.com/ReVanced/revanced-manager/commit/66432764cfe8192f4cf8e599a592f27c675f25ec))\n* Add confirmation dialog to \"Reset\" options ([#2576](https://github.com/ReVanced/revanced-manager/issues/2576)) ([f32ffbb](https://github.com/ReVanced/revanced-manager/commit/f32ffbb6f2224f886af14205721fb2372f396de2))\n* Add downloader plugin system ([#2041](https://github.com/ReVanced/revanced-manager/issues/2041)) ([ca38737](https://github.com/ReVanced/revanced-manager/commit/ca3873778307612b93af3273ffe4821c6a5e398d))\n* add external process runtime ([#1799](https://github.com/ReVanced/revanced-manager/issues/1799)) ([0d73e0c](https://github.com/ReVanced/revanced-manager/commit/0d73e0cd32b6af3526c226ce4695c7e905f65b15))\n* Add haptic feedback ([#1457](https://github.com/ReVanced/revanced-manager/issues/1457)) ([76e0c95](https://github.com/ReVanced/revanced-manager/commit/76e0c9518746620cd2723a99c310f92f5b3fd996))\n* Add installer status dialog ([#1473](https://github.com/ReVanced/revanced-manager/issues/1473)) ([43b3743](https://github.com/ReVanced/revanced-manager/commit/43b37432138d7cd8a507efad80827d6f3bdcdf08))\n* Add language settings ([#2913](https://github.com/ReVanced/revanced-manager/issues/2913)) ([df31b39](https://github.com/ReVanced/revanced-manager/commit/df31b39cc8c1fbf00bc3301468e8e7e4b283caf2))\n* add network checks for features that require it ([f3f8bc4](https://github.com/ReVanced/revanced-manager/commit/f3f8bc4ec2f593ade91324d78f9ce83f60ef65cc))\n* add patch bundle info screen ([#55](https://github.com/ReVanced/revanced-manager/issues/55)) ([8ae4e85](https://github.com/ReVanced/revanced-manager/commit/8ae4e850dae9cf4df14afe90048ca0b0a48389ac))\n* Add patch selection filters ([#2956](https://github.com/ReVanced/revanced-manager/issues/2956)) ([0be493d](https://github.com/ReVanced/revanced-manager/commit/0be493da662ed2b46d4b8616942357eb6a111d17))\n* add patches selector bottom sheet ([#1360](https://github.com/ReVanced/revanced-manager/issues/1360)) ([f6fb534](https://github.com/ReVanced/revanced-manager/commit/f6fb534e04777b4f0ec2ff2b13768c724c68c028))\n* Add pure black theme ([#2824](https://github.com/ReVanced/revanced-manager/issues/2824)) ([3d75ffe](https://github.com/ReVanced/revanced-manager/commit/3d75ffe6a7a39efdebe13dbd07c937c1de409ead))\n* add required options screen ([#2378](https://github.com/ReVanced/revanced-manager/issues/2378)) ([3a63e42](https://github.com/ReVanced/revanced-manager/commit/3a63e42df9ce50069a573d98cf44a8abec03b639))\n* Add reset button to custom API ([#2076](https://github.com/ReVanced/revanced-manager/issues/2076)) ([df52a7b](https://github.com/ReVanced/revanced-manager/commit/df52a7bdef05e1c9f034ae067c3dd183fb8fdffd)), closes [#2051](https://github.com/ReVanced/revanced-manager/issues/2051)\n* Add sensitivity to `isScrollingUp` ([f6ca4e9](https://github.com/ReVanced/revanced-manager/commit/f6ca4e95551193c8d21afd09872d9bbe6c80c0e8))\n* add social links ([#1294](https://github.com/ReVanced/revanced-manager/issues/1294)) ([7df3350](https://github.com/ReVanced/revanced-manager/commit/7df3350acb4aae957e2a7c0d2f30faf6cae6ab85))\n* Add support for writing downloader UI with fragments ([#2998](https://github.com/ReVanced/revanced-manager/issues/2998)) ([7471710](https://github.com/ReVanced/revanced-manager/commit/7471710f287b4febb9546a7d7cd59d654b2754e9))\n* add toast feedback to the bundle update button ([ea50e65](https://github.com/ReVanced/revanced-manager/commit/ea50e65ab1d626152bdd40c1893cd408b7271472))\n* Add UI nudges to note about pitfalls ([9cf2bd6](https://github.com/ReVanced/revanced-manager/commit/9cf2bd6603179c0ea24df64849ed023ed69f2795))\n* add user agent ([#1382](https://github.com/ReVanced/revanced-manager/issues/1382)) ([3aea6cb](https://github.com/ReVanced/revanced-manager/commit/3aea6cbaecc9db103e9a3925b3c4a531de6c5f0e))\n* advanced settings page with device info ([#51](https://github.com/ReVanced/revanced-manager/issues/51)) ([86e4244](https://github.com/ReVanced/revanced-manager/commit/86e42449eb553417726b95f79f6edd7f526f6d44))\n* allow bundles to use classes from other bundles ([#1951](https://github.com/ReVanced/revanced-manager/issues/1951)) ([af8e2b4](https://github.com/ReVanced/revanced-manager/commit/af8e2b44c027d978046a0e7926f1425f0348b098))\n* Allow multiple downloaders per APK ([#2916](https://github.com/ReVanced/revanced-manager/issues/2916)) ([0f56377](https://github.com/ReVanced/revanced-manager/commit/0f56377214fae05693a21177daf7534c103df74e))\n* allow user to save logs ([a008cf5](https://github.com/ReVanced/revanced-manager/commit/a008cf5dd143fafb1f642cd037db29393716f7d5))\n* animate the arrow button ([db070b1](https://github.com/ReVanced/revanced-manager/commit/db070b125bf08ff251450259045755e6469c2d5e))\n* app downloader ([#43](https://github.com/ReVanced/revanced-manager/issues/43)) ([1f1a480](https://github.com/ReVanced/revanced-manager/commit/1f1a480d51edb310934523024c52e0c19b066662))\n* app selector screen ([373cc4b](https://github.com/ReVanced/revanced-manager/commit/373cc4bbb1a8194bf9475d0a13e1c154cd87480b))\n* **app-selector:** show patchable installed apps first ([#1496](https://github.com/ReVanced/revanced-manager/issues/1496)) ([afb0f80](https://github.com/ReVanced/revanced-manager/commit/afb0f80de5a73c213f77bfde761ea1ea0886abef))\n* armv7 warning ([2ffcaec](https://github.com/ReVanced/revanced-manager/commit/2ffcaec724d5a13b816e04813d45cde75681eb69))\n* Automatic language detection ([#2032](https://github.com/ReVanced/revanced-manager/issues/2032)) ([36a1c3f](https://github.com/ReVanced/revanced-manager/commit/36a1c3f36807500fbe820bf4142fef159b138c7d))\n* backend ([45a54d1](https://github.com/ReVanced/revanced-manager/commit/45a54d1608a77547e06748867d63a452224727b6))\n* better installer ui ([#29](https://github.com/ReVanced/revanced-manager/issues/29)) ([14888f9](https://github.com/ReVanced/revanced-manager/commit/14888f9da71ecf1c50d770123d1e8dd09aa6c8b1))\n* **bundles tab:** add BackHandler ([a9171e1](https://github.com/ReVanced/revanced-manager/commit/a9171e17bd628601f1e074a7fcdf74c15cb73709))\n* Change \"Update\" to \"Show\" in Update Available notification ([5c43413](https://github.com/ReVanced/revanced-manager/commit/5c434137d332aabaaca236b6f9616d7727d0b3d2)), closes [#1959](https://github.com/ReVanced/revanced-manager/issues/1959)\n* change appID and name of debug builds ([5b3e9e5](https://github.com/ReVanced/revanced-manager/commit/5b3e9e595cded277c051cc669d9f29bcb6ce5d18))\n* **Changelogs:** overall improvement ([#1429](https://github.com/ReVanced/revanced-manager/issues/1429)) ([2a3590d](https://github.com/ReVanced/revanced-manager/commit/2a3590ddd2cc74b746a3f632a93970bfa23cf384))\n* check for updates on startup ([#1462](https://github.com/ReVanced/revanced-manager/issues/1462)) ([bb2164e](https://github.com/ReVanced/revanced-manager/commit/bb2164e1a95a698b1b0f69e725af5e0e1e45b868))\n* check if the version being used is the recommended version ([#1675](https://github.com/ReVanced/revanced-manager/issues/1675)) ([9d961f6](https://github.com/ReVanced/revanced-manager/commit/9d961f6a52d15ed6116afc78c7008460347da69a))\n* Collapse ExtendedFAB on scroll ([#1630](https://github.com/ReVanced/revanced-manager/issues/1630)) ([b5c1f6d](https://github.com/ReVanced/revanced-manager/commit/b5c1f6d732b65c1c9becb7962c51a70a840dea73))\n* **Compose:** Add confirmation dialog on multiple operations  ([#2529](https://github.com/ReVanced/revanced-manager/issues/2529)) ([2671e68](https://github.com/ReVanced/revanced-manager/commit/2671e68004269deebdedaee38a6692b2302ca732))\n* **Compose:** hide developer settings ([#2551](https://github.com/ReVanced/revanced-manager/issues/2551)) ([0030c7a](https://github.com/ReVanced/revanced-manager/commit/0030c7a7885feee0578ee1423ee2aefc6a0e2c2c))\n* **Compose:** Improve patches selector tab by adding the bundle version ([#2545](https://github.com/ReVanced/revanced-manager/issues/2545)) ([3710675](https://github.com/ReVanced/revanced-manager/commit/3710675ac0ca77cecfb172b4cf148f41a762bf06))\n* **Compose:** Move developer options to top level ([#2528](https://github.com/ReVanced/revanced-manager/issues/2528)) ([cedc6ad](https://github.com/ReVanced/revanced-manager/commit/cedc6ad49f23d778a52a8846f9e384fd2106e074))\n* contributors screen ([#42](https://github.com/ReVanced/revanced-manager/issues/42)) ([3f54381](https://github.com/ReVanced/revanced-manager/commit/3f54381d307fd71296be18e97a1ab870f1cdc297))\n* **Contributors Screen:** implement design from Figma ([#1465](https://github.com/ReVanced/revanced-manager/issues/1465)) ([d5bdc29](https://github.com/ReVanced/revanced-manager/commit/d5bdc293f308e2a283d744afdc1aed6a165f7166))\n* Dashboard Screen ([#18](https://github.com/ReVanced/revanced-manager/issues/18)) ([a127b95](https://github.com/ReVanced/revanced-manager/commit/a127b959ead5a9c83a0c4f7e7840aeeb68362c0d))\n* disable filter chips when there are no patches ([fd520bb](https://github.com/ReVanced/revanced-manager/commit/fd520bba700bae9d8eae745ce23a95b07b7f7d34))\n* Don't mark all announcements as read on first launch, and set the correct default tags ([398ca00](https://github.com/ReVanced/revanced-manager/commit/398ca006b637048e6280edaf9685800f7638e6ba))\n* dont ask for root on launch ([9562d80](https://github.com/ReVanced/revanced-manager/commit/9562d80bfdc785fe5ed512a15cfd7c0e09091acc))\n* download apps in patcher screen ([#73](https://github.com/ReVanced/revanced-manager/issues/73)) ([a854221](https://github.com/ReVanced/revanced-manager/commit/a854221969c363712a0b3de84607092709db291f))\n* Downloader source system ([#3007](https://github.com/ReVanced/revanced-manager/issues/3007)) ([3e0967e](https://github.com/ReVanced/revanced-manager/commit/3e0967e7c2a1e23af7e3f23eed01b3cb4180b27a))\n* experimental patches setting ([b07fd23](https://github.com/ReVanced/revanced-manager/commit/b07fd2321dd0aecce556f341e2b18f930baa58fd))\n* Export more info in logs ([#2957](https://github.com/ReVanced/revanced-manager/issues/2957)) ([69abbdc](https://github.com/ReVanced/revanced-manager/commit/69abbdc48adf8e92e7b32167fcf1674c2079056f))\n* filter options for patches ([62bccd1](https://github.com/ReVanced/revanced-manager/commit/62bccd150441747e5cd6de71de304e416922bdda))\n* finish implementing the sources system ([#70](https://github.com/ReVanced/revanced-manager/issues/70)) ([858b0ec](https://github.com/ReVanced/revanced-manager/commit/858b0ec5b456043fa61b681bbbd195fd9c30a6f0))\n* get bundle information from jar manifest ([#2027](https://github.com/ReVanced/revanced-manager/issues/2027)) ([60fdec9](https://github.com/ReVanced/revanced-manager/commit/60fdec9804c763ef9308a7a56d245401dbd35d7c))\n* hide tabs when 1 bundle is used ([41268ca](https://github.com/ReVanced/revanced-manager/commit/41268ca80b71f68dbf9523fa7bac34feeec7d011))\n* hide unfinished pages in release mode ([c199801](https://github.com/ReVanced/revanced-manager/commit/c199801fb7f91306538391177d240cf1121964d2))\n* Highlight links in Markdown ([7bf8988](https://github.com/ReVanced/revanced-manager/commit/7bf89887e420a402b30da4796ba3648147f00394)), closes [#1962](https://github.com/ReVanced/revanced-manager/issues/1962)\n* implement DI ([7fa7b9d](https://github.com/ReVanced/revanced-manager/commit/7fa7b9d53a3217c7e1e4c70a524fd68ae170c832))\n* implement more patch option types ([#2015](https://github.com/ReVanced/revanced-manager/issues/2015)) ([b18c678](https://github.com/ReVanced/revanced-manager/commit/b18c6783547e910fa2dbd3d7edcc5fe329e6d921))\n* implement navigation ([7fc6ec5](https://github.com/ReVanced/revanced-manager/commit/7fc6ec5c2cf8eb9ebfc3dda01cdfd80962be1f8f))\n* implement Submit Issue button ([#1276](https://github.com/ReVanced/revanced-manager/issues/1276)) ([a269a39](https://github.com/ReVanced/revanced-manager/commit/a269a39aa4a34b94aef4e1e85126c571e96be575))\n* improve accessibility ([#64](https://github.com/ReVanced/revanced-manager/issues/64)) ([39b08e5](https://github.com/ReVanced/revanced-manager/commit/39b08e5201d2cec6bdb67f9386120a7a40c9ccc6))\n* Improve APK file name formatting on save ([#2421](https://github.com/ReVanced/revanced-manager/issues/2421)) ([a53a8ba](https://github.com/ReVanced/revanced-manager/commit/a53a8ba62734daf9bd80ab79265241a4a22f489c))\n* improve AppSelectorScreen caching/perf ([#2961](https://github.com/ReVanced/revanced-manager/issues/2961)) ([81e5a93](https://github.com/ReVanced/revanced-manager/commit/81e5a9315db4c858fa29163d15457af97163967a))\n* improve bundle dialog UI ([409c888](https://github.com/ReVanced/revanced-manager/commit/409c888d523f398505daaaff9d2490dc5a863680))\n* Improve bundle info screen design ([#2548](https://github.com/ReVanced/revanced-manager/issues/2548)) ([55524f7](https://github.com/ReVanced/revanced-manager/commit/55524f7284a44bbf8e8c782eedd7fc06d54944cf))\n* Improve custom API URL dialog ([#2033](https://github.com/ReVanced/revanced-manager/issues/2033)) ([7dae562](https://github.com/ReVanced/revanced-manager/commit/7dae56281994942577bac7bf50c59e805672d0e1))\n* Improve device information in debugging section ([d889677](https://github.com/ReVanced/revanced-manager/commit/d889677b29aeb4a49a025da98060265e88876ddf)), closes [#1977](https://github.com/ReVanced/revanced-manager/issues/1977)\n* Improve initial update popup wording ([5901372](https://github.com/ReVanced/revanced-manager/commit/5901372523643eef5a605256662c8e1f0a9f2263)), closes [#1956](https://github.com/ReVanced/revanced-manager/issues/1956)\n* improve InstalledAppsScreen caching/perf ([#2963](https://github.com/ReVanced/revanced-manager/issues/2963)) ([323d217](https://github.com/ReVanced/revanced-manager/commit/323d2170efa0e3f2c8d2245ff08a2e92c52cb9d7))\n* improve keystore UI and UX ([#52](https://github.com/ReVanced/revanced-manager/issues/52)) ([49b4bbb](https://github.com/ReVanced/revanced-manager/commit/49b4bbbf0ba84b006a1694ca95662cf224a84b0f))\n* Improve patch bundle screen ([#2070](https://github.com/ReVanced/revanced-manager/issues/2070)) ([a907528](https://github.com/ReVanced/revanced-manager/commit/a907528a2096d8de9778efa8f85e0cdc1d7c2b80))\n* improve patcher screen labels ([f4d6c60](https://github.com/ReVanced/revanced-manager/commit/f4d6c60b9ec4c76e8e3fa233f79e062b802860e5))\n* improve patcher UI ([#1494](https://github.com/ReVanced/revanced-manager/issues/1494)) ([429b428](https://github.com/ReVanced/revanced-manager/commit/429b428f673dd949289baaf27ed2e08970db83ae))\n* Improve root installation ([#2895](https://github.com/ReVanced/revanced-manager/issues/2895)) ([763483b](https://github.com/ReVanced/revanced-manager/commit/763483b65f755201db087eecc6f3b02b65921177))\n* Improve Settings order ([#2060](https://github.com/ReVanced/revanced-manager/issues/2060)) ([fa86c1a](https://github.com/ReVanced/revanced-manager/commit/fa86c1a0bb039a86e0649eae30c7b33620f98dbe))\n* improve the safeguards ([#2038](https://github.com/ReVanced/revanced-manager/issues/2038)) ([e5b414e](https://github.com/ReVanced/revanced-manager/commit/e5b414e277341967c7b5a5f071ddac1fdfdb8e63))\n* Improve trust plugin dialog design ([#2420](https://github.com/ReVanced/revanced-manager/issues/2420)) ([0300da9](https://github.com/ReVanced/revanced-manager/commit/0300da9eac6c0fc29dbbb66622c0d52f4cf68934))\n* Improve unsupported patch warnings ([#2066](https://github.com/ReVanced/revanced-manager/issues/2066)) ([3c23d57](https://github.com/ReVanced/revanced-manager/commit/3c23d573bf3998304cad4485016004a871cf1636)), closes [#2052](https://github.com/ReVanced/revanced-manager/issues/2052)\n* Improve update screen design ([#2487](https://github.com/ReVanced/revanced-manager/issues/2487)) ([7007010](https://github.com/ReVanced/revanced-manager/commit/7007010f14239452e565736fe7cee7666a682ffb))\n* Improve update setting tile titles ([e2623d6](https://github.com/ReVanced/revanced-manager/commit/e2623d6d79b3b87e9ba29016e42f1d645b2f9e19)), closes [#1968](https://github.com/ReVanced/revanced-manager/issues/1968)\n* improve UX for failed or missing bundles ([49f8510](https://github.com/ReVanced/revanced-manager/commit/49f851022db72b110c8597aa1c711461c1b01882))\n* improved compose stability ([8c40119](https://github.com/ReVanced/revanced-manager/commit/8c40119609c650d1f012d810a4117e84fbe2da52))\n* improved dashboard screen ([5c2f9d9](https://github.com/ReVanced/revanced-manager/commit/5c2f9d91a6e803d9b3705e2b3aa84176353ba963))\n* in-app updater ([#25](https://github.com/ReVanced/revanced-manager/issues/25)) ([d71a4bf](https://github.com/ReVanced/revanced-manager/commit/d71a4bf3c3457a02578bb8ad3c7615b074f6e3f1))\n* **installer:** adjust arrow icon size ([e997255](https://github.com/ReVanced/revanced-manager/commit/e997255cf3c3c5ba777da07752217f99e01dd789))\n* **installer:** adjust step icon size and alignment ([cfcabf6](https://github.com/ReVanced/revanced-manager/commit/cfcabf6ef1c212f2627d5d02f4d59981bdc276ca))\n* **installer:** apk signing and installation ([da32ff9](https://github.com/ReVanced/revanced-manager/commit/da32ff954a84cf8ff321bbbf71cc5b544d6e6be9))\n* **installer:** sign apk in patcher worker ([c003c3c](https://github.com/ReVanced/revanced-manager/commit/c003c3c3245f5a663a0371d4e9df71777ba728b9))\n* **Installer:** use BottomAppBar ([#1428](https://github.com/ReVanced/revanced-manager/issues/1428)) ([ceb7623](https://github.com/ReVanced/revanced-manager/commit/ceb762379461443e7e62c37511df1c84a6068bb4))\n* integrate revanced patcher ([#22](https://github.com/ReVanced/revanced-manager/issues/22)) ([caeabfc](https://github.com/ReVanced/revanced-manager/commit/caeabfc91b2aa7e3de9e6a31859049d4b2d37388))\n* keystore import/export ([#30](https://github.com/ReVanced/revanced-manager/issues/30)) ([fd0ec6c](https://github.com/ReVanced/revanced-manager/commit/fd0ec6c6a7fc8488db859056a95ebe0455e2843b))\n* **koin:** use the android logger ([f30333e](https://github.com/ReVanced/revanced-manager/commit/f30333e75338dd2c1ef891723ecb834fc1eb10f7))\n* licenses screen ([#47](https://github.com/ReVanced/revanced-manager/issues/47)) ([e3cb056](https://github.com/ReVanced/revanced-manager/commit/e3cb056858ea8917162c1a421a7a8d03ddaa08e2))\n* make bundles selectable ([#1237](https://github.com/ReVanced/revanced-manager/issues/1237)) ([a246863](https://github.com/ReVanced/revanced-manager/commit/a246863a89fe8781feaf2a45fcb7ea991d26028f))\n* Make patch bundles list scrollable ([#2322](https://github.com/ReVanced/revanced-manager/issues/2322)) ([a5c8a23](https://github.com/ReVanced/revanced-manager/commit/a5c8a23f9ffb36543d45b46bb5f01c5dea56bf90))\n* Make patcher screen design more consistent with inspiration ([#2805](https://github.com/ReVanced/revanced-manager/issues/2805)) ([dbb6c01](https://github.com/ReVanced/revanced-manager/commit/dbb6c01e89a5e710185ff4304de0ac9e19bed053))\n* Merge app selector screen with apps screen ([37fdd15](https://github.com/ReVanced/revanced-manager/commit/37fdd159409b160f7e348125c6f97fab73bf1ba4))\n* migrate to API v5 ([2270f32](https://github.com/ReVanced/revanced-manager/commit/2270f329de25376eb9f0ce196994cc841977ff2a))\n* more info for the select from application screen ([#81](https://github.com/ReVanced/revanced-manager/issues/81)) ([3f446f8](https://github.com/ReVanced/revanced-manager/commit/3f446f8236101755a9d51a2aa759f70a0bd429da))\n* move plugin api to another repository ([55e7ebf](https://github.com/ReVanced/revanced-manager/commit/55e7ebf4fc5adf8800430ad4aa2579cb6210290d))\n* Move safeguards above patcher preference group ([9f7eaa2](https://github.com/ReVanced/revanced-manager/commit/9f7eaa212339f2093050087dc7ab0b8237356939))\n* move update to notification card ([#1917](https://github.com/ReVanced/revanced-manager/issues/1917)) ([b80f94b](https://github.com/ReVanced/revanced-manager/commit/b80f94b77bba89e31608cdb302dab0619bf7c5cc))\n* **NotificationCard:** rewrite & consistent usage ([#1426](https://github.com/ReVanced/revanced-manager/issues/1426)) ([f8aafa0](https://github.com/ReVanced/revanced-manager/commit/f8aafa050328423b3168a7943f566fce58100cb0))\n* Open contributor's GitHub profile when clicked ([#2775](https://github.com/ReVanced/revanced-manager/issues/2775)) ([2571cb8](https://github.com/ReVanced/revanced-manager/commit/2571cb8c1108e9c1ed84950f17692c09d66e0556))\n* Open the app-specific manage all files permission dialog ([#2148](https://github.com/ReVanced/revanced-manager/issues/2148)) ([a3f31ea](https://github.com/ReVanced/revanced-manager/commit/a3f31ea65788a43ce57d548e8240e5b1fe3005d0))\n* Order bundles by number of patches ([bb5d414](https://github.com/ReVanced/revanced-manager/commit/bb5d414abb4f294aa88d795486836a99ade2b388))\n* patch bundle sources system ([#24](https://github.com/ReVanced/revanced-manager/issues/24)) ([9675a27](https://github.com/ReVanced/revanced-manager/commit/9675a2777b364e5ede0d44b92eb7e551d4f7b3d6))\n* patch options ([#45](https://github.com/ReVanced/revanced-manager/issues/45)) ([8540d30](https://github.com/ReVanced/revanced-manager/commit/8540d301962669e3d79ca345c852f5b01df641a4))\n* patch options UI ([#80](https://github.com/ReVanced/revanced-manager/issues/80)) ([0a1acd2](https://github.com/ReVanced/revanced-manager/commit/0a1acd24e3f0d06fde412b8eeecd923d92ee64a9))\n* **patch-selector:** default patches selection ([#1272](https://github.com/ReVanced/revanced-manager/issues/1272)) ([a17c2de](https://github.com/ReVanced/revanced-manager/commit/a17c2de228cccb4a0bb0ca7497720011bec131fc))\n* **patch-selector:** remove TODO about an unplanned feature ([4924eae](https://github.com/ReVanced/revanced-manager/commit/4924eaef800c429f2a59b8a15fd48fae0292810c))\n* **patcher:** Improve installation ([#2185](https://github.com/ReVanced/revanced-manager/issues/2185)) ([3bd4f0d](https://github.com/ReVanced/revanced-manager/commit/3bd4f0d8f3f60d079d4647d42592b10a15f0dae8))\n* patches selector screen ([55e871a](https://github.com/ReVanced/revanced-manager/commit/55e871aa7d27885e44ef33faab1bb4ae33e7a460))\n* Progressive AlertDialog for adding bundles ([9a01273](https://github.com/ReVanced/revanced-manager/commit/9a01273c43bd6bcdb0cdfd26c5a467cd3193e5d7)), closes [#1992](https://github.com/ReVanced/revanced-manager/issues/1992)\n* ProGuard ([d84e6a3](https://github.com/ReVanced/revanced-manager/commit/d84e6a3ffc20d018b2edeb505de20a920785ba5c))\n* Purple default theme ([#1601](https://github.com/ReVanced/revanced-manager/issues/1601)) ([0616666](https://github.com/ReVanced/revanced-manager/commit/0616666d5ef9b53bef5fd630b1b1a47088097d37))\n* Redesign the patches screen ([#2381](https://github.com/ReVanced/revanced-manager/issues/2381)) ([8dc4e5b](https://github.com/ReVanced/revanced-manager/commit/8dc4e5b89ee4d36263c8b4187650691b68484688))\n* remember patch options ([#1449](https://github.com/ReVanced/revanced-manager/issues/1449)) ([90db765](https://github.com/ReVanced/revanced-manager/commit/90db765c9aa014495775a34927904dedf5fef1e3))\n* remove dead help icons ([3bb071d](https://github.com/ReVanced/revanced-manager/commit/3bb071d80d319d4943b0d4c3048f232f3eb9f5cf))\n* Remove tag from changelog ([d2119d3](https://github.com/ReVanced/revanced-manager/commit/d2119d36430198151140b469192f76f781df6dd3))\n* Rename \"Patch bundle\" to \"Patches\" ([#2541](https://github.com/ReVanced/revanced-manager/issues/2541)) ([2cdd6d1](https://github.com/ReVanced/revanced-manager/commit/2cdd6d1843f1e49c7c720f8859e11d6a30c0eea6))\n* rename debug build to `ReVanced Manager (dev)` ([d3417ad](https://github.com/ReVanced/revanced-manager/commit/d3417adbeba0a8e06d3494a2fd108f735f73632c))\n* rename main bundle to `Default` ([e44d3fd](https://github.com/ReVanced/revanced-manager/commit/e44d3fdee444d915e3e8b8143e55f1353980aad2))\n* rename package to `app.revanced.manager` ([5ec97f4](https://github.com/ReVanced/revanced-manager/commit/5ec97f4a852a07d0e554bbe1eacc379179ac089e))\n* Rename strings ([e127845](https://github.com/ReVanced/revanced-manager/commit/e1278452b9c73479cdfb0eb0703db1552b158633))\n* rename ViewModels for consistency ([064a54e](https://github.com/ReVanced/revanced-manager/commit/064a54eaf0675a1cc9d21f3e1071160deb25c201))\n* Reorder Import & Export settings ([#2403](https://github.com/ReVanced/revanced-manager/issues/2403)) ([2697077](https://github.com/ReVanced/revanced-manager/commit/2697077fc88bb795027303558c9d52448a4daded))\n* Revamp UI and improve UX ([2d42197](https://github.com/ReVanced/revanced-manager/commit/2d4219701248ee70fd42d93755fee0a63b75e5db))\n* ReVanced theme colors ([59b894d](https://github.com/ReVanced/revanced-manager/commit/59b894dce4b99c51151a4cccd03a998ceec31778))\n* revert to blue theme colors ([5f4c958](https://github.com/ReVanced/revanced-manager/commit/5f4c9584a94a1edd1eeaa0b9ecfcd9b281b7cccc))\n* root installation ([#1243](https://github.com/ReVanced/revanced-manager/issues/1243)) ([62e934c](https://github.com/ReVanced/revanced-manager/commit/62e934c4032096bed36201510fc55304ba48de68))\n* save patch options and selected patches in bundle ([#50](https://github.com/ReVanced/revanced-manager/issues/50)) ([23162f6](https://github.com/ReVanced/revanced-manager/commit/23162f6233fa6a176514b35feff731f8f28b4d4b))\n* save patch selection using room db ([#38](https://github.com/ReVanced/revanced-manager/issues/38)) ([1efccda](https://github.com/ReVanced/revanced-manager/commit/1efccda3f55d964fae3bee9ee1f0bd260bb1cc74))\n* Screen slide transition ([#2396](https://github.com/ReVanced/revanced-manager/issues/2396)) ([2de16e1](https://github.com/ReVanced/revanced-manager/commit/2de16e18e8ba5e84149b377f225693ea35fa2385))\n* Scrollbars ([#1479](https://github.com/ReVanced/revanced-manager/issues/1479)) ([b5558ea](https://github.com/ReVanced/revanced-manager/commit/b5558ea3ffef40f96b271f8dfe3a5cf95328781e))\n* Select bundle type before adding bundle ([#1490](https://github.com/ReVanced/revanced-manager/issues/1490)) ([88e860c](https://github.com/ReVanced/revanced-manager/commit/88e860cf0132aed23a3cfd3d9d12e472aa895718))\n* selected app info page ([#1395](https://github.com/ReVanced/revanced-manager/issues/1395)) ([b69a369](https://github.com/ReVanced/revanced-manager/commit/b69a369d4e304c8a4c8a8db052309b485171e353))\n* Set app ownership when installing apps ([#2558](https://github.com/ReVanced/revanced-manager/issues/2558)) ([7c410fe](https://github.com/ReVanced/revanced-manager/commit/7c410fef4512087657e3978d5be049c422b25456))\n* settings migration (compose) ([#1309](https://github.com/ReVanced/revanced-manager/issues/1309)) ([bf1d628](https://github.com/ReVanced/revanced-manager/commit/bf1d628944cb5a439d0bda7c49d820a5fa7576b3))\n* settings screen ([b7d53cf](https://github.com/ReVanced/revanced-manager/commit/b7d53cfca84d7239bed9189e265a03fd44dc2e45))\n* **settings screen:** add battery optimization notification ([5754864](https://github.com/ReVanced/revanced-manager/commit/57548641e7ecd06decfc926cb860674ce7443d7a))\n* **settings screen:** match typography from figma ([948a6d1](https://github.com/ReVanced/revanced-manager/commit/948a6d14404e067907c9e84576cfeba76134aaf6))\n* **settings:** move experimental patches option to advanced ([805d440](https://github.com/ReVanced/revanced-manager/commit/805d440450d821a26d3ef90a4f97cd796635057d))\n* **Settings:** use SettingsListItem consistently and overall improvements ([#1427](https://github.com/ReVanced/revanced-manager/issues/1427)) ([5e35893](https://github.com/ReVanced/revanced-manager/commit/5e35893883fa109d74b028478e60b51f97a2e12d))\n* show installed app in version selector ([1ab1e46](https://github.com/ReVanced/revanced-manager/commit/1ab1e4682ffbfe16c02c438ad833adbfdec58b33))\n* Show logger details in patcher screen ([4d354f5](https://github.com/ReVanced/revanced-manager/commit/4d354f5aefecfffac2c85d835be8eb0ce5d37b0f))\n* Show manager update dialog ([#2069](https://github.com/ReVanced/revanced-manager/issues/2069)) ([113a74d](https://github.com/ReVanced/revanced-manager/commit/113a74d270c1c222d4d06049b4edda8f27724a20)), closes [#1963](https://github.com/ReVanced/revanced-manager/issues/1963) [#1958](https://github.com/ReVanced/revanced-manager/issues/1958)\n* Show patch bundle version used to patch an app ([#2966](https://github.com/ReVanced/revanced-manager/issues/2966)) ([11bd46c](https://github.com/ReVanced/revanced-manager/commit/11bd46ce26d4fbc7f126bee5e254d4f6b5e0cc43))\n* Show patches as individual steps in patcher screen ([#2889](https://github.com/ReVanced/revanced-manager/issues/2889)) ([11dd6e4](https://github.com/ReVanced/revanced-manager/commit/11dd6e4064099427a8c9bc6f225a19412e5c70e2))\n* Show patches load errors in patches tab and adjust API down notification to work correctly ([5b871b8](https://github.com/ReVanced/revanced-manager/commit/5b871b8cf29d95b91f856a8e6d725fdc96af2337))\n* Show persistent error card when patch bundle download fails ([#2965](https://github.com/ReVanced/revanced-manager/issues/2965)) ([9e9b189](https://github.com/ReVanced/revanced-manager/commit/9e9b189b2c5e462a8ddd10f6ca407f185b3d2016))\n* show stacktrace in installer ui ([#36](https://github.com/ReVanced/revanced-manager/issues/36)) ([8d53180](https://github.com/ReVanced/revanced-manager/commit/8d53180d86e6e9d9c8a4056a5fde0603f17e3157))\n* show toast when no patches are selected ([8aa70d3](https://github.com/ReVanced/revanced-manager/commit/8aa70d350e07aae8b4a22b6bc6fb90c0f6227acd))\n* splash screen ([60a5a11](https://github.com/ReVanced/revanced-manager/commit/60a5a11c71634aeda414c2ed85f7706ba3deefe1))\n* store patched apps ([#79](https://github.com/ReVanced/revanced-manager/issues/79)) ([b14285b](https://github.com/ReVanced/revanced-manager/commit/b14285b2c83e60376ad42fa6ea508257cd04d47d))\n* switch to androidx.navigation ([#2362](https://github.com/ReVanced/revanced-manager/issues/2362)) ([7438f45](https://github.com/ReVanced/revanced-manager/commit/7438f45903ec6ed3436a895d4c32d34d41b00010))\n* switch to Preferences DataStore ([#60](https://github.com/ReVanced/revanced-manager/issues/60)) ([1852799](https://github.com/ReVanced/revanced-manager/commit/18527999b5f8752faf36c145276d51e2e095c8ee))\n* switch to revanced api v4 ([7e858a2](https://github.com/ReVanced/revanced-manager/commit/7e858a244cc4038bdb029c4418278700f6a6490f))\n* switch to the new api ([#75](https://github.com/ReVanced/revanced-manager/issues/75)) ([a55160e](https://github.com/ReVanced/revanced-manager/commit/a55160e7c619ec5541de72fa80f079c9bc94d2d5))\n* Toggle to use pre-release versions of ReVanced Manager ([#2773](https://github.com/ReVanced/revanced-manager/issues/2773)) ([d758964](https://github.com/ReVanced/revanced-manager/commit/d7589647426b3d3438161a2f0b59bf4f154ac34b))\n* Toggle to use pre-release versions of ReVanced Patches ([08cec67](https://github.com/ReVanced/revanced-manager/commit/08cec674bbbe5297090ac5ee6039569975fbe9e7))\n* TopAppBar scroll behavior ([#2397](https://github.com/ReVanced/revanced-manager/issues/2397)) ([dc51d61](https://github.com/ReVanced/revanced-manager/commit/dc51d6134dae0fdc415f66e2716c6bffa35dfdb5))\n* Update AAPT2 to built-tools v35. ([1ba11b3](https://github.com/ReVanced/revanced-manager/commit/1ba11b30218be263a56f6512b968f5e3dded9daf))\n* **Update Screen:** changelogs & handle states ([#1464](https://github.com/ReVanced/revanced-manager/issues/1464)) ([3af26e7](https://github.com/ReVanced/revanced-manager/commit/3af26e706571339a3c69688098a51616549c58a8))\n* **update screen:** complete main update screen ([553af83](https://github.com/ReVanced/revanced-manager/commit/553af831393d7276088ceb0b0a854ec654f72def))\n* Update to Patcher v22 ([#2939](https://github.com/ReVanced/revanced-manager/issues/2939)) ([8667051](https://github.com/ReVanced/revanced-manager/commit/8667051283f934a32ac7b7cc76178397dc45a0e6))\n* updater changelogs ([#48](https://github.com/ReVanced/revanced-manager/issues/48)) ([6dbcd62](https://github.com/ReVanced/revanced-manager/commit/6dbcd6293e94d8d20cccc401b0edeb1d7047553e))\n* updater UI and code improvements ([#1597](https://github.com/ReVanced/revanced-manager/issues/1597)) ([a12cae7](https://github.com/ReVanced/revanced-manager/commit/a12cae72998d85138dcf29c0e5d430359e338d5e))\n* Use \"Debug\" and \"Debug signed\" for build names respectively ([5133f02](https://github.com/ReVanced/revanced-manager/commit/5133f02ad61b85af28608c7180b7a2accb4811ab))\n* Use correct casing in module description ([59b4c0b](https://github.com/ReVanced/revanced-manager/commit/59b4c0b2d2e426dfe66b5a01d219b57bb0df5b8b))\n* Use patch first flow ([535694e](https://github.com/ReVanced/revanced-manager/commit/535694e38d02a2404605377a3eb4798dad7a3b2c))\n* Use patch selector screen in patches tab ([15b43bf](https://github.com/ReVanced/revanced-manager/commit/15b43bfe815db57e69d15e0fb75d3cb41303932b))\n* use revanced api for changelogs ([686eb40](https://github.com/ReVanced/revanced-manager/commit/686eb40cb0f8b8d785732dd2bc82d17b5a4fd042))\n* Use sectioned list for patches selector screen ([8f05023](https://github.com/ReVanced/revanced-manager/commit/8f05023105ba6bfcfef1b3dfa7e6a8ba46daa27b))\n* Use simpler strings ([83d33e8](https://github.com/ReVanced/revanced-manager/commit/83d33e87e3f89cb3efce63dcabcde6478f69b8e7))\n* View bundle patches ([#2065](https://github.com/ReVanced/revanced-manager/issues/2065)) ([089f200](https://github.com/ReVanced/revanced-manager/commit/089f200fe6ff59020a87883a47ef20a0c4c08565))\n\n\n### Reverts\n\n* downgrade Kotlin to 1.8.21 ([fc90bbc](https://github.com/ReVanced/revanced-manager/commit/fc90bbc27ce765e0b55bb5ac9132e58f46aee9aa))\n\n\n### BREAKING CHANGES\n\n* bump major version to 2.0.0\n\n# app [2.0.0-dev.1](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.38...v2.0.0-dev.1) (2026-03-14)\n\n\n* feat!: Bump major version ([4f6197c](https://github.com/ReVanced/revanced-manager/commit/4f6197cf7dbd80fb554c12329b994ccd8383dee5))\n\n\n### BREAKING CHANGES\n\n* bump major version to 2.0.0\n\n# app [1.26.0-dev.38](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.37...v1.26.0-dev.38) (2026-03-14)\n\n\n### Features\n\n* Downloader source system ([#3007](https://github.com/ReVanced/revanced-manager/issues/3007)) ([3e0967e](https://github.com/ReVanced/revanced-manager/commit/3e0967e7c2a1e23af7e3f23eed01b3cb4180b27a))\n\n# app [1.26.0-dev.37](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.36...v1.26.0-dev.37) (2026-03-14)\n\n\n### Bug Fixes\n\n* Make app source dialog string more accurate ([c8b429f](https://github.com/ReVanced/revanced-manager/commit/c8b429fa4741a28b9c29144939036d6fa8633cb4))\n\n# app [1.26.0-dev.36](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.35...v1.26.0-dev.36) (2026-03-14)\n\n\n### Bug Fixes\n\n* Bottom sheet on patches selector glitched when going to full screen sheet ([aa153a7](https://github.com/ReVanced/revanced-manager/commit/aa153a74d596c19d2844cb2fe72b5694d6a5b510))\n* Detect downloaded APKs when patches support any version ([#2967](https://github.com/ReVanced/revanced-manager/issues/2967)) ([65e84e2](https://github.com/ReVanced/revanced-manager/commit/65e84e2944968a312f34d66d1a40c0cc9d3ef473))\n* Downgrade AGP to fix build issues ([c7e56c4](https://github.com/ReVanced/revanced-manager/commit/c7e56c4700a6566a010ef5aaf8ba7efd740dc9ce))\n* Import AndroidX WindowInsets ([af2683d](https://github.com/ReVanced/revanced-manager/commit/af2683d91df375e0c4ff3ab75ad696f18f69ccf6))\n* Make transitions in/out duration the same ([cd24d59](https://github.com/ReVanced/revanced-manager/commit/cd24d59b19d8b662af9e662ac48b4c13071e2284))\n* Merge doppelgirl design decision to public ([1277315](https://github.com/ReVanced/revanced-manager/commit/12773154d6d73d90e9447ef4c0f991575f4840a9))\n* Patcher FAB elevation being wrong on BAB component ([30ecf62](https://github.com/ReVanced/revanced-manager/commit/30ecf62d356df41bcd6e2b167ee7262ce6655e20))\n* Remove redundant patch fab on initial tab screen ([c925078](https://github.com/ReVanced/revanced-manager/commit/c925078a84adcf371a999fdb9ed2d886fbad4507))\n* SearchBar padding in patches screen ([54d59c3](https://github.com/ReVanced/revanced-manager/commit/54d59c36fec7958ae60e35f40b9f0e821ba941c4))\n* Show previously downloaded APKs in source selector dialog ([#2964](https://github.com/ReVanced/revanced-manager/issues/2964)) ([b28f0a8](https://github.com/ReVanced/revanced-manager/commit/b28f0a84f367eafd9ac01c74aefcbbe9395ee4ba))\n\n\n### Features\n\n* Add UI nudges to note about pitfalls ([9cf2bd6](https://github.com/ReVanced/revanced-manager/commit/9cf2bd6603179c0ea24df64849ed023ed69f2795))\n* Export more info in logs ([#2957](https://github.com/ReVanced/revanced-manager/issues/2957)) ([69abbdc](https://github.com/ReVanced/revanced-manager/commit/69abbdc48adf8e92e7b32167fcf1674c2079056f))\n* Merge app selector screen with apps screen ([37fdd15](https://github.com/ReVanced/revanced-manager/commit/37fdd159409b160f7e348125c6f97fab73bf1ba4))\n* Revamp UI and improve UX ([2d42197](https://github.com/ReVanced/revanced-manager/commit/2d4219701248ee70fd42d93755fee0a63b75e5db))\n* Show logger details in patcher screen ([4d354f5](https://github.com/ReVanced/revanced-manager/commit/4d354f5aefecfffac2c85d835be8eb0ce5d37b0f))\n* Show patches load errors in patches tab and adjust API down notification to work correctly ([5b871b8](https://github.com/ReVanced/revanced-manager/commit/5b871b8cf29d95b91f856a8e6d725fdc96af2337))\n* Show persistent error card when patch bundle download fails ([#2965](https://github.com/ReVanced/revanced-manager/issues/2965)) ([9e9b189](https://github.com/ReVanced/revanced-manager/commit/9e9b189b2c5e462a8ddd10f6ca407f185b3d2016))\n* Use patch first flow ([535694e](https://github.com/ReVanced/revanced-manager/commit/535694e38d02a2404605377a3eb4798dad7a3b2c))\n* Use patch selector screen in patches tab ([15b43bf](https://github.com/ReVanced/revanced-manager/commit/15b43bfe815db57e69d15e0fb75d3cb41303932b))\n* Use sectioned list for patches selector screen ([8f05023](https://github.com/ReVanced/revanced-manager/commit/8f05023105ba6bfcfef1b3dfa7e6a8ba46daa27b))\n\n# app [1.26.0-dev.35](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.34...v1.26.0-dev.35) (2026-03-12)\n\n\n### Features\n\n* Add support for writing downloader UI with fragments ([#2998](https://github.com/ReVanced/revanced-manager/issues/2998)) ([7471710](https://github.com/ReVanced/revanced-manager/commit/7471710f287b4febb9546a7d7cd59d654b2754e9))\n\n# app [1.26.0-dev.34](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.33...v1.26.0-dev.34) (2026-03-10)\n\n\n### Features\n\n* Improve root installation ([#2895](https://github.com/ReVanced/revanced-manager/issues/2895)) ([763483b](https://github.com/ReVanced/revanced-manager/commit/763483b65f755201db087eecc6f3b02b65921177))\n\n# app [1.26.0-dev.33](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.32...v1.26.0-dev.33) (2026-03-10)\n\n\n### Bug Fixes\n\n* Adjust ReVanced icons ([#2890](https://github.com/ReVanced/revanced-manager/issues/2890)) ([bc2a2cb](https://github.com/ReVanced/revanced-manager/commit/bc2a2cb3976234c8a74db93a593e103d77d22a07))\n\n# app [1.26.0-dev.32](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.31...v1.26.0-dev.32) (2026-03-08)\n\n\n### Features\n\n* migrate to API v5 ([2270f32](https://github.com/ReVanced/revanced-manager/commit/2270f329de25376eb9f0ce196994cc841977ff2a))\n\n# app [1.26.0-dev.31](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.30...v1.26.0-dev.31) (2026-03-04)\n\n\n### Features\n\n* Don't mark all announcements as read on first launch, and set the correct default tags ([398ca00](https://github.com/ReVanced/revanced-manager/commit/398ca006b637048e6280edaf9685800f7638e6ba))\n\n# app [1.26.0-dev.30](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.29...v1.26.0-dev.30) (2026-03-02)\n\n\n### Features\n\n* Update AAPT2 to built-tools v35. ([1ba11b3](https://github.com/ReVanced/revanced-manager/commit/1ba11b30218be263a56f6512b968f5e3dded9daf))\n\n# app [1.26.0-dev.29](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.28...v1.26.0-dev.29) (2026-02-28)\n\n\n### Bug Fixes\n\n* Exclude desktop AAPT and disable R8 optimizations ([6ce5b67](https://github.com/ReVanced/revanced-manager/commit/6ce5b672feb677eccafffb6a04bdf5513f6d62fa))\n* unexclude other destabilizers ([2c3d436](https://github.com/ReVanced/revanced-manager/commit/2c3d436b258f100feea0b9864b7131ae2c5bda79))\n\n# app [1.26.0-dev.28](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.27...v1.26.0-dev.28) (2026-02-28)\n\n\n### Features\n\n* Add patch selection filters ([#2956](https://github.com/ReVanced/revanced-manager/issues/2956)) ([0be493d](https://github.com/ReVanced/revanced-manager/commit/0be493da662ed2b46d4b8616942357eb6a111d17))\n\n# app [1.26.0-dev.27](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.26...v1.26.0-dev.27) (2026-02-28)\n\n\n### Features\n\n* Show patch bundle version used to patch an app ([#2966](https://github.com/ReVanced/revanced-manager/issues/2966)) ([11bd46c](https://github.com/ReVanced/revanced-manager/commit/11bd46ce26d4fbc7f126bee5e254d4f6b5e0cc43))\n\n# app [1.26.0-dev.26](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.25...v1.26.0-dev.26) (2026-02-27)\n\n\n### Features\n\n* improve InstalledAppsScreen caching/perf ([#2963](https://github.com/ReVanced/revanced-manager/issues/2963)) ([323d217](https://github.com/ReVanced/revanced-manager/commit/323d2170efa0e3f2c8d2245ff08a2e92c52cb9d7))\n\n# app [1.26.0-dev.25](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.24...v1.26.0-dev.25) (2026-02-27)\n\n\n### Features\n\n* improve AppSelectorScreen caching/perf ([#2961](https://github.com/ReVanced/revanced-manager/issues/2961)) ([81e5a93](https://github.com/ReVanced/revanced-manager/commit/81e5a9315db4c858fa29163d15457af97163967a))\n\n# app [1.26.0-dev.24](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.23...v1.26.0-dev.24) (2026-02-27)\n\n\n### Bug Fixes\n\n* Incorrect patcher string value ([f19080a](https://github.com/ReVanced/revanced-manager/commit/f19080a9862be4600860b67cd981b9a3a56b21e7))\n* Never show again toggle doing nothing for Update dialog ([6f4219c](https://github.com/ReVanced/revanced-manager/commit/6f4219c01ba43b70e130f210c8d48978a6056f68))\n* Release builds not working ([00b3c59](https://github.com/ReVanced/revanced-manager/commit/00b3c59572760993f69f2663456237faafff0283))\n* Remove quotes from strings ([fc30ba5](https://github.com/ReVanced/revanced-manager/commit/fc30ba5e83f27329b05dc81f484bb8f7471b6a99))\n* we actually don't want to exclude reflection symbols ([3222840](https://github.com/ReVanced/revanced-manager/commit/32228404c4ef38bb8931d5cfdf6a7aefde23a89c))\n\n\n### Features\n\n* Add announcements ([#2948](https://github.com/ReVanced/revanced-manager/issues/2948)) ([813df46](https://github.com/ReVanced/revanced-manager/commit/813df46847620bd854dccc52ff244388b3385e17))\n* Update to Patcher v22 ([#2939](https://github.com/ReVanced/revanced-manager/issues/2939)) ([8667051](https://github.com/ReVanced/revanced-manager/commit/8667051283f934a32ac7b7cc76178397dc45a0e6))\n\n# app [1.26.0-dev.23](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.22...v1.26.0-dev.23) (2026-02-19)\n\n\n### Bug Fixes\n\n* Flutter migration ([#2946](https://github.com/ReVanced/revanced-manager/issues/2946)) ([31a0f75](https://github.com/ReVanced/revanced-manager/commit/31a0f751aaff3233f50821963f28454d239318b2))\n\n# app [1.26.0-dev.22](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.21...v1.26.0-dev.22) (2026-02-19)\n\n\n### Bug Fixes\n\n* Create modules path in root installer ([4fc2ba3](https://github.com/ReVanced/revanced-manager/commit/4fc2ba339b6d275fb9da8b65ff86b74a6594436d))\n\n# app [1.26.0-dev.21](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.20...v1.26.0-dev.21) (2026-02-19)\n\n\n### Features\n\n* Allow multiple downloaders per APK ([#2916](https://github.com/ReVanced/revanced-manager/issues/2916)) ([0f56377](https://github.com/ReVanced/revanced-manager/commit/0f56377214fae05693a21177daf7534c103df74e))\n\n# app [1.26.0-dev.20](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.19...v1.26.0-dev.20) (2026-01-09)\n\n\n### Bug Fixes\n\n* Save FAB freaking out in select patches screen ([4c0b6b0](https://github.com/ReVanced/revanced-manager/commit/4c0b6b02e95a8d6f655bcf5c25493b1f9a4a4dcd))\n\n# app [1.26.0-dev.19](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.18...v1.26.0-dev.19) (2026-01-08)\n\n\n### Bug Fixes\n\n* **locales:** use buildconfig instead of generating kt file ([72b1db9](https://github.com/ReVanced/revanced-manager/commit/72b1db9a2f33ab5d5fffd8ba83c05901eff19bea))\n\n# app [1.26.0-dev.18](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.17...v1.26.0-dev.18) (2026-01-08)\n\n\n### Bug Fixes\n\n* Prevent trailing comma when no locales are generated ([b16931c](https://github.com/ReVanced/revanced-manager/commit/b16931ca79d5ce4d17c75f6dd3bf6f976b8ff7be))\n\n\n### Features\n\n* Add language settings ([#2913](https://github.com/ReVanced/revanced-manager/issues/2913)) ([df31b39](https://github.com/ReVanced/revanced-manager/commit/df31b39cc8c1fbf00bc3301468e8e7e4b283caf2))\n\n# app [1.26.0-dev.17](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.16...v1.26.0-dev.17) (2026-01-06)\n\n\n### Bug Fixes\n\n* allow updating patches on metered networks ([9d9a0e8](https://github.com/ReVanced/revanced-manager/commit/9d9a0e81dbc9e73e6e3181f6bea9cabb69e49ea8))\n\n# app [1.26.0-dev.16](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.15...v1.26.0-dev.16) (2025-12-30)\n\n\n### Features\n\n* Show patches as individual steps in patcher screen ([#2889](https://github.com/ReVanced/revanced-manager/issues/2889)) ([11dd6e4](https://github.com/ReVanced/revanced-manager/commit/11dd6e4064099427a8c9bc6f225a19412e5c70e2))\n\n# app [1.26.0-dev.15](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.14...v1.26.0-dev.15) (2025-12-29)\n\n\n### Bug Fixes\n\n* install dialog getting stuck ([#2900](https://github.com/ReVanced/revanced-manager/issues/2900)) ([18a4df9](https://github.com/ReVanced/revanced-manager/commit/18a4df9af9cac120fdb8e4ff7aadd2e2a8d5c1a6))\n\n# app [1.26.0-dev.14](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.13...v1.26.0-dev.14) (2025-12-28)\n\n\n### Bug Fixes\n\n* Update selected patch count when SelectionState changes ([#2896](https://github.com/ReVanced/revanced-manager/issues/2896)) ([0d26df0](https://github.com/ReVanced/revanced-manager/commit/0d26df03f463195dae550240c7f652680763079c))\n\n# app [1.26.0-dev.13](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.12...v1.26.0-dev.13) (2025-12-17)\n\n\n### Features\n\n* Make patcher screen design more consistent with inspiration ([#2805](https://github.com/ReVanced/revanced-manager/issues/2805)) ([dbb6c01](https://github.com/ReVanced/revanced-manager/commit/dbb6c01e89a5e710185ff4304de0ac9e19bed053))\n\n# app [1.26.0-dev.12](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.11...v1.26.0-dev.12) (2025-12-17)\n\n\n### Features\n\n* Improve trust plugin dialog design ([#2420](https://github.com/ReVanced/revanced-manager/issues/2420)) ([0300da9](https://github.com/ReVanced/revanced-manager/commit/0300da9eac6c0fc29dbbb66622c0d52f4cf68934))\n\n# app [1.26.0-dev.11](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.10...v1.26.0-dev.11) (2025-10-25)\n\n\n### Features\n\n* Add pure black theme ([#2824](https://github.com/ReVanced/revanced-manager/issues/2824)) ([3d75ffe](https://github.com/ReVanced/revanced-manager/commit/3d75ffe6a7a39efdebe13dbd07c937c1de409ead))\n\n# app [1.26.0-dev.10](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.9...v1.26.0-dev.10) (2025-10-06)\n\n\n### Bug Fixes\n\n* prevent back presses during installation ([2ff7072](https://github.com/ReVanced/revanced-manager/commit/2ff70728b490b92f212a82dcf599bc0c23f589e7))\n\n# app [1.26.0-dev.9](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.8...v1.26.0-dev.9) (2025-10-06)\n\n\n### Bug Fixes\n\n* Instantly re-fetch patch bundle on pre-release preference update ([d5671db](https://github.com/ReVanced/revanced-manager/commit/d5671db3a77541c07bbbb4c3baca02f3ba0703f2)), closes [#2784](https://github.com/ReVanced/revanced-manager/issues/2784)\n\n# app [1.26.0-dev.8](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.7...v1.26.0-dev.8) (2025-10-06)\n\n\n### Bug Fixes\n\n* Offcenter loading indicator in AppSelector ([12d92ba](https://github.com/ReVanced/revanced-manager/commit/12d92ba8110f5d1ac78aeecfa575444b5c53f561))\n\n# app [1.26.0-dev.7](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.6...v1.26.0-dev.7) (2025-10-03)\n\n\n### Bug Fixes\n\n* Improve consistency between pre-release toggles ([e1b768c](https://github.com/ReVanced/revanced-manager/commit/e1b768c4679ecae8bff8007bdab56ff6544b12b6))\n\n# app [1.26.0-dev.6](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.5...v1.26.0-dev.6) (2025-10-03)\n\n\n### Bug Fixes\n\n* Broken version comparison ([c327857](https://github.com/ReVanced/revanced-manager/commit/c3278578237dcddd9e7ab79ee80a02fdeef9604d))\n\n\n### Features\n\n* Open contributor's GitHub profile when clicked ([#2775](https://github.com/ReVanced/revanced-manager/issues/2775)) ([2571cb8](https://github.com/ReVanced/revanced-manager/commit/2571cb8c1108e9c1ed84950f17692c09d66e0556))\n\n# app [1.26.0-dev.5](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.4...v1.26.0-dev.5) (2025-10-03)\n\n\n### Features\n\n* Toggle to use pre-release versions of ReVanced Patches ([08cec67](https://github.com/ReVanced/revanced-manager/commit/08cec674bbbe5297090ac5ee6039569975fbe9e7))\n\n# app [1.26.0-dev.4](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.3...v1.26.0-dev.4) (2025-10-03)\n\n\n### Bug Fixes\n\n* add newlines to debug logs ([4753873](https://github.com/ReVanced/revanced-manager/commit/4753873866b575e2dcb160020df63f63862c8f33))\n\n# app [1.26.0-dev.3](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.2...v1.26.0-dev.3) (2025-10-03)\n\n\n### Features\n\n* Toggle to use pre-release versions of ReVanced Manager ([#2773](https://github.com/ReVanced/revanced-manager/issues/2773)) ([d758964](https://github.com/ReVanced/revanced-manager/commit/d7589647426b3d3438161a2f0b59bf4f154ac34b))\n\n# app [1.26.0-dev.2](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.1...v1.26.0-dev.2) (2025-10-03)\n\n\n### Bug Fixes\n\n* Migration of keystore, by fixing mislabeling of alias as cn ([#2769](https://github.com/ReVanced/revanced-manager/issues/2769)) ([aeab639](https://github.com/ReVanced/revanced-manager/commit/aeab639b2b09e8bbd2478cfbf5a518586405c0f7))\n\n# app [1.26.0-dev.1](https://github.com/ReVanced/revanced-manager/compare/v1.25.1...v1.26.0-dev.1) (2025-10-02)\n\n\n### Bug Fixes\n\n* `ExtendedFloatingActionButton` not accessible by screen readers ([#2080](https://github.com/ReVanced/revanced-manager/issues/2080)) ([e4f19b0](https://github.com/ReVanced/revanced-manager/commit/e4f19b0c251e818cce59e11362a29dc8f657e065))\n* add bounds checks in patch selector ([483be5d](https://github.com/ReVanced/revanced-manager/commit/483be5d722db2be2595f6f6dd0c537a6c8487daf))\n* Add missing header for \"Updates\" settings ([#2642](https://github.com/ReVanced/revanced-manager/issues/2642)) ([d4d2056](https://github.com/ReVanced/revanced-manager/commit/d4d2056585ccd4a0456318448dc822c0f40c9c50))\n* Allow different app version when downloading via plugin if setting is off ([#2579](https://github.com/ReVanced/revanced-manager/issues/2579)) ([59d233e](https://github.com/ReVanced/revanced-manager/commit/59d233e15c885104900c7d4129fb4839c4da81e0))\n* always use default patch selection if customization is disabled ([cc77181](https://github.com/ReVanced/revanced-manager/commit/cc771817cba3dfd8f704cb7ecc9089ad7911c6ce))\n* android icon not loading in app selector ([deea682](https://github.com/ReVanced/revanced-manager/commit/deea68265157da65ef98986d751e2551797522e0))\n* automatically focus search views ([d23d673](https://github.com/ReVanced/revanced-manager/commit/d23d673c4703cdfa3be3a292873bbb37bea30ac7))\n* available updates dialog list item color ([1a54313](https://github.com/ReVanced/revanced-manager/commit/1a54313c1dc4efbb8b274201a79e28661a7ecf64))\n* Broken header padding in `AlertDialogExtended` when using an Icon ([8d939a6](https://github.com/ReVanced/revanced-manager/commit/8d939a6669909a44382fc7404276f2eeefcf728d))\n* broken logo in about page on release builds ([ad775f3](https://github.com/ReVanced/revanced-manager/commit/ad775f3059345dd93ff2baf6d018c2beecc413df))\n* buildfile syntax ([#66](https://github.com/ReVanced/revanced-manager/issues/66)) ([5c17a78](https://github.com/ReVanced/revanced-manager/commit/5c17a78e46db586642d53362267472fbbd47ae8c))\n* bundles not loading on Android 14 ([56896d6](https://github.com/ReVanced/revanced-manager/commit/56896d6197baa836bcd4a499ea2cee487e3d07c8))\n* Change the title in the Update screen from \"Updates\" to \"Update\" ([5f23769](https://github.com/ReVanced/revanced-manager/commit/5f2376919bd036987eba8188e3a1a2ff53ef6793)), closes [#1960](https://github.com/ReVanced/revanced-manager/issues/1960)\n* cleanup advanced settings screen ([02ea5c6](https://github.com/ReVanced/revanced-manager/commit/02ea5c6d4a2e6baa7c034b614deb6e4232cf6d0b))\n* **Compose:** Adjusted universal patches safeguard and warnings ([#2550](https://github.com/ReVanced/revanced-manager/issues/2550)) ([663cf2d](https://github.com/ReVanced/revanced-manager/commit/663cf2d6b86c276c6bb236af8e05a4f69df9eba0))\n* contributors screen fix ([#1256](https://github.com/ReVanced/revanced-manager/issues/1256)) ([dc73462](https://github.com/ReVanced/revanced-manager/commit/dc73462ac41bd5f1813358eb5e2265a3e2e7c0f9))\n* contributors screen repository name ([426b289](https://github.com/ReVanced/revanced-manager/commit/426b28932fe37a6d7412685819ffc8e26b69d31c))\n* Correct preference description ([#2619](https://github.com/ReVanced/revanced-manager/issues/2619)) ([0096169](https://github.com/ReVanced/revanced-manager/commit/0096169af8f9e2db6c22b8e88f0dfe1cab1260be))\n* Correctly display universal patches warning ([#2570](https://github.com/ReVanced/revanced-manager/issues/2570)) ([24c4cd3](https://github.com/ReVanced/revanced-manager/commit/24c4cd3f991953dd00b5bf5e7c3ec965315a9528))\n* correctly patch apk files ([c5cb18a](https://github.com/ReVanced/revanced-manager/commit/c5cb18a7eab838ea096577780335a29b9771b43d))\n* crash caused by compose inlining bug ([05fe058](https://github.com/ReVanced/revanced-manager/commit/05fe0581516a373cc26dd559d3fc7f21fcf16f3f))\n* crash when removing used bundles ([189c993](https://github.com/ReVanced/revanced-manager/commit/189c993ada6406db6f8c48c4051c5bd9fac98e2b))\n* delete temporary files ([#1341](https://github.com/ReVanced/revanced-manager/issues/1341)) ([b03f7b1](https://github.com/ReVanced/revanced-manager/commit/b03f7b18a029465142d08fe1ed68e92c81586a5f))\n* disable `WebView` history ([#1278](https://github.com/ReVanced/revanced-manager/issues/1278)) ([a811df9](https://github.com/ReVanced/revanced-manager/commit/a811df9547da33fc61397cb33ba5fd35ee470ff9))\n* display version from manifest ([#2634](https://github.com/ReVanced/revanced-manager/issues/2634)) ([1fb94b7](https://github.com/ReVanced/revanced-manager/commit/1fb94b711fdbbbca7d9baaa90c53faf208fc4d0d))\n* Do not poll battery optimization status ([#2491](https://github.com/ReVanced/revanced-manager/issues/2491)) ([26778f5](https://github.com/ReVanced/revanced-manager/commit/26778f57e6dd185d9aed1086aa03659a2e91d1a9))\n* don't store app list in parcel ([e7802ed](https://github.com/ReVanced/revanced-manager/commit/e7802ed3d714cbe6e29409d27989c65d4d7ce6a5))\n* dont crash when the bundle cannot be downloaded ([4d201f1](https://github.com/ReVanced/revanced-manager/commit/4d201f17f2ce01aad6adb456a49c3f03526c5ad3))\n* **downloader:** versions not loading correctly ([16c4290](https://github.com/ReVanced/revanced-manager/commit/16c4290f05d94cbe53e68cb98307d7be1bfce7af))\n* handle edge-to-edge properly in fullscreen dialogs ([eba92e2](https://github.com/ReVanced/revanced-manager/commit/eba92e2644663b10e7e17f2cf955afefe260d769))\n* handle exceptions when checking for bundle updates ([1dd6738](https://github.com/ReVanced/revanced-manager/commit/1dd673896454710094e83789abb585c106ee6bcb))\n* Handle open source licenses page crash ([#2569](https://github.com/ReVanced/revanced-manager/issues/2569)) ([f2ea007](https://github.com/ReVanced/revanced-manager/commit/f2ea00757a76ed8758bc0d4df54843c89483c986))\n* hide patch button ([#1284](https://github.com/ReVanced/revanced-manager/issues/1284)) ([dadc546](https://github.com/ReVanced/revanced-manager/commit/dadc5462e352e91cf971395def91d693677701bc))\n* Ignore long click when already in delete mode ([6f6296b](https://github.com/ReVanced/revanced-manager/commit/6f6296b8cde56d5fc73e00ef671ca7ab431455f4)), closes [#2503](https://github.com/ReVanced/revanced-manager/issues/2503)\n* import bundles on another thread ([0383bd7](https://github.com/ReVanced/revanced-manager/commit/0383bd74f73a3523d539c44cdf38b0e857c16bdc))\n* import export screen UX ([69c119d](https://github.com/ReVanced/revanced-manager/commit/69c119d545ac811c605124173e5cbc97a9064c79))\n* Improve background running notification ([#2614](https://github.com/ReVanced/revanced-manager/issues/2614)) ([05444d8](https://github.com/ReVanced/revanced-manager/commit/05444d8824a429c7e554d0597f8997e670936a63))\n* improve bundle page strings ([2a63a61](https://github.com/ReVanced/revanced-manager/commit/2a63a6163a8d2e6ee649cb22099b426ed605de8f))\n* improve keystore import error handling and show toast ([cd142a7](https://github.com/ReVanced/revanced-manager/commit/cd142a70d3f210161d3c1f20d2cb82a70432469f))\n* Inconsistent padding for battery optimisation warning ([6c3a99a](https://github.com/ReVanced/revanced-manager/commit/6c3a99a4921ab4438a038ad4c4bccd0326fdd565))\n* **installer:** make the correct column scrollable ([64496bf](https://github.com/ReVanced/revanced-manager/commit/64496bfbe77a9a44f5535fd5f12eee803ac7c26a))\n* **installer:** progress tracking ([f547bb7](https://github.com/ReVanced/revanced-manager/commit/f547bb7ab1b7149d7290729527714168a2561b23))\n* **installer:** properly track worker state ([#32](https://github.com/ReVanced/revanced-manager/issues/32)) ([de1ef23](https://github.com/ReVanced/revanced-manager/commit/de1ef23824227796c8583242e624f83d9dae5af3))\n* **installer:** save step incorrectly being marked as completed ([0264308](https://github.com/ReVanced/revanced-manager/commit/0264308b6dad051db80da6f130e8d28d86b38f04))\n* **installer:** sign and install on threads ([3d59ee5](https://github.com/ReVanced/revanced-manager/commit/3d59ee51acc5a6ebb17f68c0462d17d7ecb0f07c))\n* jvm signature clash error ([ee0f342](https://github.com/ReVanced/revanced-manager/commit/ee0f34245636027d55bd5bdfce4d6a5e6c3b3dcd))\n* library info not being embedded ([8c9fe69](https://github.com/ReVanced/revanced-manager/commit/8c9fe6989fc6d05afd53baa877f1e6dffc067b50))\n* load patch bundles earlier ([a2f9e2f](https://github.com/ReVanced/revanced-manager/commit/a2f9e2f1da961a13b2b20e2812593031c9339b88))\n* Match \"Installation incompatible\" dialog message with Flutter Manager ([#2231](https://github.com/ReVanced/revanced-manager/issues/2231)) ([fedaedf](https://github.com/ReVanced/revanced-manager/commit/fedaedfda112260144b0b9b0776509ddb3438046))\n* minify crash on building release ([#1245](https://github.com/ReVanced/revanced-manager/issues/1245)) ([6561e4c](https://github.com/ReVanced/revanced-manager/commit/6561e4c97c19134b22b72e19fad3884f99327b9a))\n* more android 34 fixes ([7fb1e27](https://github.com/ReVanced/revanced-manager/commit/7fb1e27617b69803b3d4463993b2290877502545))\n* move battery warning to dashboard ([3a05150](https://github.com/ReVanced/revanced-manager/commit/3a05150fa33f119ecdf436f8508862ef81c327a0))\n* Move temporary files outside of the cache directory ([#2122](https://github.com/ReVanced/revanced-manager/issues/2122)) ([b93ecc0](https://github.com/ReVanced/revanced-manager/commit/b93ecc0db20339393e1296c44ce4b1dbd837b577))\n* Offset badge ([c73fdfd](https://github.com/ReVanced/revanced-manager/commit/c73fdfdd2d3a1b8552d9c26df575b3019346596d))\n* only perform haptics on events ([e55566d](https://github.com/ReVanced/revanced-manager/commit/e55566d3df25480260922f0418b4bbee5d7b7a07))\n* option state crash ([#1456](https://github.com/ReVanced/revanced-manager/issues/1456)) ([f183b6d](https://github.com/ReVanced/revanced-manager/commit/f183b6d8a6b139fe3e84d5ea3a9658ef900453bc))\n* parcel error for nullable types ([336eed3](https://github.com/ReVanced/revanced-manager/commit/336eed3a95111ebbe456321f5986e6875ded354e))\n* pass worker inputs without serialization ([#44](https://github.com/ReVanced/revanced-manager/issues/44)) ([059a72b](https://github.com/ReVanced/revanced-manager/commit/059a72b9dd9103d2b3704daa7dbb13ad83971460))\n* patch count remaining at zero when using process runtime ([#2542](https://github.com/ReVanced/revanced-manager/issues/2542)) ([f5e1e0b](https://github.com/ReVanced/revanced-manager/commit/f5e1e0b0659e5775dd460b8dfc15427eb0175139))\n* patch options reset button being broken ([e1647fd](https://github.com/ReVanced/revanced-manager/commit/e1647fdef0c9f68e171a2d15e2b6e744da6bbaf5))\n* Patch process cancelation dialog conditions ([#2554](https://github.com/ReVanced/revanced-manager/issues/2554)) ([e97b19d](https://github.com/ReVanced/revanced-manager/commit/e97b19d2b65dbfc49ed062b123c363e412b9bf8e))\n* Patch selection screen padding ([#2533](https://github.com/ReVanced/revanced-manager/issues/2533)) ([cd2dbcc](https://github.com/ReVanced/revanced-manager/commit/cd2dbcc841e56dac99230ea6501af87c43e9c572))\n* **patcher:** add notification and wakelock to worker; chore: add app icon ([8b6d32d](https://github.com/ReVanced/revanced-manager/commit/8b6d32dd7b3ca4c694414a55a1b6202b62636530))\n* patches not being reloaded ([dccf861](https://github.com/ReVanced/revanced-manager/commit/dccf86163af34341e3e451df9f24356c7294ae1e))\n* **patches selector:** copy the selected patches list ([70e49aa](https://github.com/ReVanced/revanced-manager/commit/70e49aaaa3a42510cb9ced2209c90cd1da98391d))\n* perform selected app operations in the correct order ([34cf848](https://github.com/ReVanced/revanced-manager/commit/34cf848baaaa2504d162c515a95240d45bd7092a))\n* permission error when using installed app ([8767f0e](https://github.com/ReVanced/revanced-manager/commit/8767f0e99c6de5bbb0a690ced40f6e9a486f0828))\n* Playback Switch's Haptic Feedback ([#2639](https://github.com/ReVanced/revanced-manager/issues/2639)) ([9fdca5a](https://github.com/ReVanced/revanced-manager/commit/9fdca5a0afd6be8a24e2ec09eec0000b0b9cd179))\n* process death resilience and account for android 11 bug ([#2355](https://github.com/ReVanced/revanced-manager/issues/2355)) ([83eeeae](https://github.com/ReVanced/revanced-manager/commit/83eeeae801827800a0787e9e753c72d2a24d7970))\n* progress bar not updating ([dcaa38c](https://github.com/ReVanced/revanced-manager/commit/dcaa38c8824f54da7a833c354b247f309d1c9871))\n* release builds not working properly ([6f6476e](https://github.com/ReVanced/revanced-manager/commit/6f6476e85158cad4e2497e9f72b73c4dc948f0bc))\n* remove battery optimization notification if user grants the permission ([9863c51](https://github.com/ReVanced/revanced-manager/commit/9863c5161a1bc16941a323e654f80f8cb0122f9f))\n* remove the unique constraint for patch bundle names ([ea29d0f](https://github.com/ReVanced/revanced-manager/commit/ea29d0f00c3b3b2c137c4849e6c445a6bf9a180f))\n* Remove unnecessary screen padding ([8419f75](https://github.com/ReVanced/revanced-manager/commit/8419f75d597dd198aa1029fae2109646c5874078)), closes [#2062](https://github.com/ReVanced/revanced-manager/issues/2062)\n* remove unused function preventing compilation ([2297e94](https://github.com/ReVanced/revanced-manager/commit/2297e94cb81a9a22ea032d8e247769774ca85087))\n* Reset cached theme on theme change to avoid broken colors ([#2527](https://github.com/ReVanced/revanced-manager/issues/2527)) ([9a82b78](https://github.com/ReVanced/revanced-manager/commit/9a82b785280954973cafc5e6dccb3c90fdb5ef49))\n* run blocking IO operations in the correct context ([969ddb7](https://github.com/ReVanced/revanced-manager/commit/969ddb7bef321d7aa2a682b8128b1f755f35c28b))\n* run props flow on correct dispatcher ([#2035](https://github.com/ReVanced/revanced-manager/issues/2035)) ([d3d4c27](https://github.com/ReVanced/revanced-manager/commit/d3d4c27f6d7affceef233a0138ee6c985c7f56bc))\n* Screen turns off while patching due to wrong WakeLock ([#2147](https://github.com/ReVanced/revanced-manager/issues/2147)) ([4de5340](https://github.com/ReVanced/revanced-manager/commit/4de534094adc0665021d3ba129a648d896718568))\n* scrolling in patch selector ([154f036](https://github.com/ReVanced/revanced-manager/commit/154f036fe956096bca983fe9d6654ccca38fd8ac))\n* Selected patch count ([#2559](https://github.com/ReVanced/revanced-manager/issues/2559)) ([a91ff60](https://github.com/ReVanced/revanced-manager/commit/a91ff60533b44629ea60e8cd6acceeb80b0253b7))\n* serialization not working ([4d04ae0](https://github.com/ReVanced/revanced-manager/commit/4d04ae088c406d84936120cb753cd1f11fb8a8c2))\n* show available and selected patches in patch selector screen ([61f1ee0](https://github.com/ReVanced/revanced-manager/commit/61f1ee0627d6cbb6b9a4d226eb6c2f9e0b8c6453))\n* show install button when installation has been cancelled ([93f4a5b](https://github.com/ReVanced/revanced-manager/commit/93f4a5bb7c912ca77bb04e414432922c89d3e2c0))\n* Show selection warning also on patch option ([#2643](https://github.com/ReVanced/revanced-manager/issues/2643)) ([3b82767](https://github.com/ReVanced/revanced-manager/commit/3b82767a897eeca1dda1d8343f1db4207050e960))\n* sources screen being misaligned during transitions ([2ac3d5c](https://github.com/ReVanced/revanced-manager/commit/2ac3d5c483d5cc4776681ed3f900550a4e45f616))\n* specify `multithreadingDexFileWriter` in `PatcherOptions` ([#1402](https://github.com/ReVanced/revanced-manager/issues/1402)) ([3f362b6](https://github.com/ReVanced/revanced-manager/commit/3f362b605fbce3ea72e7c95b7e0bc614443c7d44))\n* Support patching on ARMv7 by updating AAPT2 ([#2084](https://github.com/ReVanced/revanced-manager/issues/2084)) ([15b47f9](https://github.com/ReVanced/revanced-manager/commit/15b47f9bb6cd6bb0360fda6ac641cd4c75542287))\n* Transparent status on fullscreen dialog ([#2654](https://github.com/ReVanced/revanced-manager/issues/2654)) ([a8820a4](https://github.com/ReVanced/revanced-manager/commit/a8820a4daf71704f6945b8f794495fe8a8d7589e))\n* Turn off filters by default ([#2079](https://github.com/ReVanced/revanced-manager/issues/2079)) ([44f8b1f](https://github.com/ReVanced/revanced-manager/commit/44f8b1fb6bffed5866ada356910119465320a9a8))\n* typo in string name `import_keystore_description` ([#1273](https://github.com/ReVanced/revanced-manager/issues/1273)) ([933e69e](https://github.com/ReVanced/revanced-manager/commit/933e69e21e97fede2183a26dd1645a6eb96c4509))\n* **ui:** make entire patches view button selectable ([#1271](https://github.com/ReVanced/revanced-manager/issues/1271)) ([83cdaae](https://github.com/ReVanced/revanced-manager/commit/83cdaaee183ff1b6d905977df38fe4e47f7d5973))\n* Updates popup shows incorrect names ([#1283](https://github.com/ReVanced/revanced-manager/issues/1283)) ([c879faf](https://github.com/ReVanced/revanced-manager/commit/c879faf2eb338476c6abd9f104922b0d49f95cd6))\n* Use `compatible` rather than `support` when referring to patch compatibility ([#2422](https://github.com/ReVanced/revanced-manager/issues/2422)) ([8b3c4eb](https://github.com/ReVanced/revanced-manager/commit/8b3c4eb91c491a0971e2ccf7d46012437eca5c25))\n* use correct `getViewModel` ([5b6ae80](https://github.com/ReVanced/revanced-manager/commit/5b6ae800fdfc93ef5058b21b3e48daac2a4e1358))\n* use correct classes to determine option type ([e833bf4](https://github.com/ReVanced/revanced-manager/commit/e833bf4ad14811bb6880ae2d97055e4ce0de222f))\n* use correct directory ([9e1ebb3](https://github.com/ReVanced/revanced-manager/commit/9e1ebb390244dcb9af03a9164a32386481ec5691))\n* Use FAB instead of ListItem to patch in App Overview ([6ace71b](https://github.com/ReVanced/revanced-manager/commit/6ace71b739302466274ce9b46f5f7dd6ab9da05d)), closes [#1995](https://github.com/ReVanced/revanced-manager/issues/1995)\n* use proper update icon ([b59a161](https://github.com/ReVanced/revanced-manager/commit/b59a16191a61c64275137c4a6145fd30d68aa480))\n* use ReVanced ring logo in about section ([#1302](https://github.com/ReVanced/revanced-manager/issues/1302)) ([933a4a3](https://github.com/ReVanced/revanced-manager/commit/933a4a32203425e745e05615217a8d0975c2e959))\n* Use the correct icon in API URL dialog ([c22e5b4](https://github.com/ReVanced/revanced-manager/commit/c22e5b4051515e0f02828a2b30f6af19b48ba55f)), closes [#1972](https://github.com/ReVanced/revanced-manager/issues/1972)\n* use upsert when modifying installed apps ([90edf1d](https://github.com/ReVanced/revanced-manager/commit/90edf1ddd0de29b299855810402a31828d989d04))\n* **VersionSelector:** use correct LazyColumn item key ([413fe98](https://github.com/ReVanced/revanced-manager/commit/413fe980a8c0b45e3924c98b2fbd1a3e9b579528))\n\n\n### Features\n\n* **about screen:** complete about screen ([1d6b34a](https://github.com/ReVanced/revanced-manager/commit/1d6b34a39f76e8e733649f7fcfeb20eb1009a39a))\n* Add `isScrollingUp` support for ScrollState ([bf049c3](https://github.com/ReVanced/revanced-manager/commit/bf049c3c1ac12a60c5c6226b5c3fec7f72caa7db))\n* add ability to share debug logs ([feb0ca4](https://github.com/ReVanced/revanced-manager/commit/feb0ca4cf315e5d332f36039fbb989b3cfb9cf58))\n* add checkboxes to the downloaded apps page ([ca93524](https://github.com/ReVanced/revanced-manager/commit/ca93524be0b37f38b860d8512c81d2898b2860af))\n* Add confirm dialogs when toggling dangerous settings ([#2072](https://github.com/ReVanced/revanced-manager/issues/2072)) ([6643276](https://github.com/ReVanced/revanced-manager/commit/66432764cfe8192f4cf8e599a592f27c675f25ec))\n* Add confirmation dialog to \"Reset\" options ([#2576](https://github.com/ReVanced/revanced-manager/issues/2576)) ([f32ffbb](https://github.com/ReVanced/revanced-manager/commit/f32ffbb6f2224f886af14205721fb2372f396de2))\n* Add downloader plugin system ([#2041](https://github.com/ReVanced/revanced-manager/issues/2041)) ([ca38737](https://github.com/ReVanced/revanced-manager/commit/ca3873778307612b93af3273ffe4821c6a5e398d))\n* add external process runtime ([#1799](https://github.com/ReVanced/revanced-manager/issues/1799)) ([0d73e0c](https://github.com/ReVanced/revanced-manager/commit/0d73e0cd32b6af3526c226ce4695c7e905f65b15))\n* Add haptic feedback ([#1457](https://github.com/ReVanced/revanced-manager/issues/1457)) ([76e0c95](https://github.com/ReVanced/revanced-manager/commit/76e0c9518746620cd2723a99c310f92f5b3fd996))\n* Add installer status dialog ([#1473](https://github.com/ReVanced/revanced-manager/issues/1473)) ([43b3743](https://github.com/ReVanced/revanced-manager/commit/43b37432138d7cd8a507efad80827d6f3bdcdf08))\n* add network checks for features that require it ([f3f8bc4](https://github.com/ReVanced/revanced-manager/commit/f3f8bc4ec2f593ade91324d78f9ce83f60ef65cc))\n* add patch bundle info screen ([#55](https://github.com/ReVanced/revanced-manager/issues/55)) ([8ae4e85](https://github.com/ReVanced/revanced-manager/commit/8ae4e850dae9cf4df14afe90048ca0b0a48389ac))\n* add patches selector bottom sheet ([#1360](https://github.com/ReVanced/revanced-manager/issues/1360)) ([f6fb534](https://github.com/ReVanced/revanced-manager/commit/f6fb534e04777b4f0ec2ff2b13768c724c68c028))\n* add required options screen ([#2378](https://github.com/ReVanced/revanced-manager/issues/2378)) ([3a63e42](https://github.com/ReVanced/revanced-manager/commit/3a63e42df9ce50069a573d98cf44a8abec03b639))\n* Add reset button to custom API ([#2076](https://github.com/ReVanced/revanced-manager/issues/2076)) ([df52a7b](https://github.com/ReVanced/revanced-manager/commit/df52a7bdef05e1c9f034ae067c3dd183fb8fdffd)), closes [#2051](https://github.com/ReVanced/revanced-manager/issues/2051)\n* Add sensitivity to `isScrollingUp` ([f6ca4e9](https://github.com/ReVanced/revanced-manager/commit/f6ca4e95551193c8d21afd09872d9bbe6c80c0e8))\n* add social links ([#1294](https://github.com/ReVanced/revanced-manager/issues/1294)) ([7df3350](https://github.com/ReVanced/revanced-manager/commit/7df3350acb4aae957e2a7c0d2f30faf6cae6ab85))\n* add toast feedback to the bundle update button ([ea50e65](https://github.com/ReVanced/revanced-manager/commit/ea50e65ab1d626152bdd40c1893cd408b7271472))\n* add user agent ([#1382](https://github.com/ReVanced/revanced-manager/issues/1382)) ([3aea6cb](https://github.com/ReVanced/revanced-manager/commit/3aea6cbaecc9db103e9a3925b3c4a531de6c5f0e))\n* advanced settings page with device info ([#51](https://github.com/ReVanced/revanced-manager/issues/51)) ([86e4244](https://github.com/ReVanced/revanced-manager/commit/86e42449eb553417726b95f79f6edd7f526f6d44))\n* allow bundles to use classes from other bundles ([#1951](https://github.com/ReVanced/revanced-manager/issues/1951)) ([af8e2b4](https://github.com/ReVanced/revanced-manager/commit/af8e2b44c027d978046a0e7926f1425f0348b098))\n* allow user to save logs ([a008cf5](https://github.com/ReVanced/revanced-manager/commit/a008cf5dd143fafb1f642cd037db29393716f7d5))\n* animate the arrow button ([db070b1](https://github.com/ReVanced/revanced-manager/commit/db070b125bf08ff251450259045755e6469c2d5e))\n* app downloader ([#43](https://github.com/ReVanced/revanced-manager/issues/43)) ([1f1a480](https://github.com/ReVanced/revanced-manager/commit/1f1a480d51edb310934523024c52e0c19b066662))\n* app selector screen ([373cc4b](https://github.com/ReVanced/revanced-manager/commit/373cc4bbb1a8194bf9475d0a13e1c154cd87480b))\n* **app-selector:** show patchable installed apps first ([#1496](https://github.com/ReVanced/revanced-manager/issues/1496)) ([afb0f80](https://github.com/ReVanced/revanced-manager/commit/afb0f80de5a73c213f77bfde761ea1ea0886abef))\n* armv7 warning ([2ffcaec](https://github.com/ReVanced/revanced-manager/commit/2ffcaec724d5a13b816e04813d45cde75681eb69))\n* Automatic language detection ([#2032](https://github.com/ReVanced/revanced-manager/issues/2032)) ([36a1c3f](https://github.com/ReVanced/revanced-manager/commit/36a1c3f36807500fbe820bf4142fef159b138c7d))\n* backend ([45a54d1](https://github.com/ReVanced/revanced-manager/commit/45a54d1608a77547e06748867d63a452224727b6))\n* better installer ui ([#29](https://github.com/ReVanced/revanced-manager/issues/29)) ([14888f9](https://github.com/ReVanced/revanced-manager/commit/14888f9da71ecf1c50d770123d1e8dd09aa6c8b1))\n* **bundles tab:** add BackHandler ([a9171e1](https://github.com/ReVanced/revanced-manager/commit/a9171e17bd628601f1e074a7fcdf74c15cb73709))\n* Change \"Update\" to \"Show\" in Update Available notification ([5c43413](https://github.com/ReVanced/revanced-manager/commit/5c434137d332aabaaca236b6f9616d7727d0b3d2)), closes [#1959](https://github.com/ReVanced/revanced-manager/issues/1959)\n* change appID and name of debug builds ([5b3e9e5](https://github.com/ReVanced/revanced-manager/commit/5b3e9e595cded277c051cc669d9f29bcb6ce5d18))\n* **Changelogs:** overall improvement ([#1429](https://github.com/ReVanced/revanced-manager/issues/1429)) ([2a3590d](https://github.com/ReVanced/revanced-manager/commit/2a3590ddd2cc74b746a3f632a93970bfa23cf384))\n* check for updates on startup ([#1462](https://github.com/ReVanced/revanced-manager/issues/1462)) ([bb2164e](https://github.com/ReVanced/revanced-manager/commit/bb2164e1a95a698b1b0f69e725af5e0e1e45b868))\n* check if the version being used is the recommended version ([#1675](https://github.com/ReVanced/revanced-manager/issues/1675)) ([9d961f6](https://github.com/ReVanced/revanced-manager/commit/9d961f6a52d15ed6116afc78c7008460347da69a))\n* Collapse ExtendedFAB on scroll ([#1630](https://github.com/ReVanced/revanced-manager/issues/1630)) ([b5c1f6d](https://github.com/ReVanced/revanced-manager/commit/b5c1f6d732b65c1c9becb7962c51a70a840dea73))\n* **Compose:** Add confirmation dialog on multiple operations  ([#2529](https://github.com/ReVanced/revanced-manager/issues/2529)) ([2671e68](https://github.com/ReVanced/revanced-manager/commit/2671e68004269deebdedaee38a6692b2302ca732))\n* **Compose:** hide developer settings ([#2551](https://github.com/ReVanced/revanced-manager/issues/2551)) ([0030c7a](https://github.com/ReVanced/revanced-manager/commit/0030c7a7885feee0578ee1423ee2aefc6a0e2c2c))\n* **Compose:** Improve patches selector tab by adding the bundle version ([#2545](https://github.com/ReVanced/revanced-manager/issues/2545)) ([3710675](https://github.com/ReVanced/revanced-manager/commit/3710675ac0ca77cecfb172b4cf148f41a762bf06))\n* **Compose:** Move developer options to top level ([#2528](https://github.com/ReVanced/revanced-manager/issues/2528)) ([cedc6ad](https://github.com/ReVanced/revanced-manager/commit/cedc6ad49f23d778a52a8846f9e384fd2106e074))\n* contributors screen ([#42](https://github.com/ReVanced/revanced-manager/issues/42)) ([3f54381](https://github.com/ReVanced/revanced-manager/commit/3f54381d307fd71296be18e97a1ab870f1cdc297))\n* **Contributors Screen:** implement design from Figma ([#1465](https://github.com/ReVanced/revanced-manager/issues/1465)) ([d5bdc29](https://github.com/ReVanced/revanced-manager/commit/d5bdc293f308e2a283d744afdc1aed6a165f7166))\n* Dashboard Screen ([#18](https://github.com/ReVanced/revanced-manager/issues/18)) ([a127b95](https://github.com/ReVanced/revanced-manager/commit/a127b959ead5a9c83a0c4f7e7840aeeb68362c0d))\n* disable filter chips when there are no patches ([fd520bb](https://github.com/ReVanced/revanced-manager/commit/fd520bba700bae9d8eae745ce23a95b07b7f7d34))\n* dont ask for root on launch ([9562d80](https://github.com/ReVanced/revanced-manager/commit/9562d80bfdc785fe5ed512a15cfd7c0e09091acc))\n* download apps in patcher screen ([#73](https://github.com/ReVanced/revanced-manager/issues/73)) ([a854221](https://github.com/ReVanced/revanced-manager/commit/a854221969c363712a0b3de84607092709db291f))\n* experimental patches setting ([b07fd23](https://github.com/ReVanced/revanced-manager/commit/b07fd2321dd0aecce556f341e2b18f930baa58fd))\n* filter options for patches ([62bccd1](https://github.com/ReVanced/revanced-manager/commit/62bccd150441747e5cd6de71de304e416922bdda))\n* finish implementing the sources system ([#70](https://github.com/ReVanced/revanced-manager/issues/70)) ([858b0ec](https://github.com/ReVanced/revanced-manager/commit/858b0ec5b456043fa61b681bbbd195fd9c30a6f0))\n* get bundle information from jar manifest ([#2027](https://github.com/ReVanced/revanced-manager/issues/2027)) ([60fdec9](https://github.com/ReVanced/revanced-manager/commit/60fdec9804c763ef9308a7a56d245401dbd35d7c))\n* hide tabs when 1 bundle is used ([41268ca](https://github.com/ReVanced/revanced-manager/commit/41268ca80b71f68dbf9523fa7bac34feeec7d011))\n* hide unfinished pages in release mode ([c199801](https://github.com/ReVanced/revanced-manager/commit/c199801fb7f91306538391177d240cf1121964d2))\n* Highlight links in Markdown ([7bf8988](https://github.com/ReVanced/revanced-manager/commit/7bf89887e420a402b30da4796ba3648147f00394)), closes [#1962](https://github.com/ReVanced/revanced-manager/issues/1962)\n* implement DI ([7fa7b9d](https://github.com/ReVanced/revanced-manager/commit/7fa7b9d53a3217c7e1e4c70a524fd68ae170c832))\n* implement more patch option types ([#2015](https://github.com/ReVanced/revanced-manager/issues/2015)) ([b18c678](https://github.com/ReVanced/revanced-manager/commit/b18c6783547e910fa2dbd3d7edcc5fe329e6d921))\n* implement navigation ([7fc6ec5](https://github.com/ReVanced/revanced-manager/commit/7fc6ec5c2cf8eb9ebfc3dda01cdfd80962be1f8f))\n* implement Submit Issue button ([#1276](https://github.com/ReVanced/revanced-manager/issues/1276)) ([a269a39](https://github.com/ReVanced/revanced-manager/commit/a269a39aa4a34b94aef4e1e85126c571e96be575))\n* improve accessibility ([#64](https://github.com/ReVanced/revanced-manager/issues/64)) ([39b08e5](https://github.com/ReVanced/revanced-manager/commit/39b08e5201d2cec6bdb67f9386120a7a40c9ccc6))\n* Improve APK file name formatting on save ([#2421](https://github.com/ReVanced/revanced-manager/issues/2421)) ([a53a8ba](https://github.com/ReVanced/revanced-manager/commit/a53a8ba62734daf9bd80ab79265241a4a22f489c))\n* improve bundle dialog UI ([409c888](https://github.com/ReVanced/revanced-manager/commit/409c888d523f398505daaaff9d2490dc5a863680))\n* Improve bundle info screen design ([#2548](https://github.com/ReVanced/revanced-manager/issues/2548)) ([55524f7](https://github.com/ReVanced/revanced-manager/commit/55524f7284a44bbf8e8c782eedd7fc06d54944cf))\n* Improve custom API URL dialog ([#2033](https://github.com/ReVanced/revanced-manager/issues/2033)) ([7dae562](https://github.com/ReVanced/revanced-manager/commit/7dae56281994942577bac7bf50c59e805672d0e1))\n* Improve device information in debugging section ([d889677](https://github.com/ReVanced/revanced-manager/commit/d889677b29aeb4a49a025da98060265e88876ddf)), closes [#1977](https://github.com/ReVanced/revanced-manager/issues/1977)\n* Improve initial update popup wording ([5901372](https://github.com/ReVanced/revanced-manager/commit/5901372523643eef5a605256662c8e1f0a9f2263)), closes [#1956](https://github.com/ReVanced/revanced-manager/issues/1956)\n* improve keystore UI and UX ([#52](https://github.com/ReVanced/revanced-manager/issues/52)) ([49b4bbb](https://github.com/ReVanced/revanced-manager/commit/49b4bbbf0ba84b006a1694ca95662cf224a84b0f))\n* Improve patch bundle screen ([#2070](https://github.com/ReVanced/revanced-manager/issues/2070)) ([a907528](https://github.com/ReVanced/revanced-manager/commit/a907528a2096d8de9778efa8f85e0cdc1d7c2b80))\n* improve patcher screen labels ([f4d6c60](https://github.com/ReVanced/revanced-manager/commit/f4d6c60b9ec4c76e8e3fa233f79e062b802860e5))\n* improve patcher UI ([#1494](https://github.com/ReVanced/revanced-manager/issues/1494)) ([429b428](https://github.com/ReVanced/revanced-manager/commit/429b428f673dd949289baaf27ed2e08970db83ae))\n* Improve Settings order ([#2060](https://github.com/ReVanced/revanced-manager/issues/2060)) ([fa86c1a](https://github.com/ReVanced/revanced-manager/commit/fa86c1a0bb039a86e0649eae30c7b33620f98dbe))\n* improve the safeguards ([#2038](https://github.com/ReVanced/revanced-manager/issues/2038)) ([e5b414e](https://github.com/ReVanced/revanced-manager/commit/e5b414e277341967c7b5a5f071ddac1fdfdb8e63))\n* Improve unsupported patch warnings ([#2066](https://github.com/ReVanced/revanced-manager/issues/2066)) ([3c23d57](https://github.com/ReVanced/revanced-manager/commit/3c23d573bf3998304cad4485016004a871cf1636)), closes [#2052](https://github.com/ReVanced/revanced-manager/issues/2052)\n* Improve update screen design ([#2487](https://github.com/ReVanced/revanced-manager/issues/2487)) ([7007010](https://github.com/ReVanced/revanced-manager/commit/7007010f14239452e565736fe7cee7666a682ffb))\n* Improve update setting tile titles ([e2623d6](https://github.com/ReVanced/revanced-manager/commit/e2623d6d79b3b87e9ba29016e42f1d645b2f9e19)), closes [#1968](https://github.com/ReVanced/revanced-manager/issues/1968)\n* improve UX for failed or missing bundles ([49f8510](https://github.com/ReVanced/revanced-manager/commit/49f851022db72b110c8597aa1c711461c1b01882))\n* improved compose stability ([8c40119](https://github.com/ReVanced/revanced-manager/commit/8c40119609c650d1f012d810a4117e84fbe2da52))\n* improved dashboard screen ([5c2f9d9](https://github.com/ReVanced/revanced-manager/commit/5c2f9d91a6e803d9b3705e2b3aa84176353ba963))\n* in-app updater ([#25](https://github.com/ReVanced/revanced-manager/issues/25)) ([d71a4bf](https://github.com/ReVanced/revanced-manager/commit/d71a4bf3c3457a02578bb8ad3c7615b074f6e3f1))\n* **installer:** adjust arrow icon size ([e997255](https://github.com/ReVanced/revanced-manager/commit/e997255cf3c3c5ba777da07752217f99e01dd789))\n* **installer:** adjust step icon size and alignment ([cfcabf6](https://github.com/ReVanced/revanced-manager/commit/cfcabf6ef1c212f2627d5d02f4d59981bdc276ca))\n* **installer:** apk signing and installation ([da32ff9](https://github.com/ReVanced/revanced-manager/commit/da32ff954a84cf8ff321bbbf71cc5b544d6e6be9))\n* **installer:** sign apk in patcher worker ([c003c3c](https://github.com/ReVanced/revanced-manager/commit/c003c3c3245f5a663a0371d4e9df71777ba728b9))\n* **Installer:** use BottomAppBar ([#1428](https://github.com/ReVanced/revanced-manager/issues/1428)) ([ceb7623](https://github.com/ReVanced/revanced-manager/commit/ceb762379461443e7e62c37511df1c84a6068bb4))\n* integrate revanced patcher ([#22](https://github.com/ReVanced/revanced-manager/issues/22)) ([caeabfc](https://github.com/ReVanced/revanced-manager/commit/caeabfc91b2aa7e3de9e6a31859049d4b2d37388))\n* keystore import/export ([#30](https://github.com/ReVanced/revanced-manager/issues/30)) ([fd0ec6c](https://github.com/ReVanced/revanced-manager/commit/fd0ec6c6a7fc8488db859056a95ebe0455e2843b))\n* **koin:** use the android logger ([f30333e](https://github.com/ReVanced/revanced-manager/commit/f30333e75338dd2c1ef891723ecb834fc1eb10f7))\n* licenses screen ([#47](https://github.com/ReVanced/revanced-manager/issues/47)) ([e3cb056](https://github.com/ReVanced/revanced-manager/commit/e3cb056858ea8917162c1a421a7a8d03ddaa08e2))\n* make bundles selectable ([#1237](https://github.com/ReVanced/revanced-manager/issues/1237)) ([a246863](https://github.com/ReVanced/revanced-manager/commit/a246863a89fe8781feaf2a45fcb7ea991d26028f))\n* Make patch bundles list scrollable ([#2322](https://github.com/ReVanced/revanced-manager/issues/2322)) ([a5c8a23](https://github.com/ReVanced/revanced-manager/commit/a5c8a23f9ffb36543d45b46bb5f01c5dea56bf90))\n* more info for the select from application screen ([#81](https://github.com/ReVanced/revanced-manager/issues/81)) ([3f446f8](https://github.com/ReVanced/revanced-manager/commit/3f446f8236101755a9d51a2aa759f70a0bd429da))\n* move plugin api to another repository ([55e7ebf](https://github.com/ReVanced/revanced-manager/commit/55e7ebf4fc5adf8800430ad4aa2579cb6210290d))\n* Move safeguards above patcher preference group ([9f7eaa2](https://github.com/ReVanced/revanced-manager/commit/9f7eaa212339f2093050087dc7ab0b8237356939))\n* move update to notification card ([#1917](https://github.com/ReVanced/revanced-manager/issues/1917)) ([b80f94b](https://github.com/ReVanced/revanced-manager/commit/b80f94b77bba89e31608cdb302dab0619bf7c5cc))\n* **NotificationCard:** rewrite & consistent usage ([#1426](https://github.com/ReVanced/revanced-manager/issues/1426)) ([f8aafa0](https://github.com/ReVanced/revanced-manager/commit/f8aafa050328423b3168a7943f566fce58100cb0))\n* Open the app-specific manage all files permission dialog ([#2148](https://github.com/ReVanced/revanced-manager/issues/2148)) ([a3f31ea](https://github.com/ReVanced/revanced-manager/commit/a3f31ea65788a43ce57d548e8240e5b1fe3005d0))\n* Order bundles by number of patches ([bb5d414](https://github.com/ReVanced/revanced-manager/commit/bb5d414abb4f294aa88d795486836a99ade2b388))\n* patch bundle sources system ([#24](https://github.com/ReVanced/revanced-manager/issues/24)) ([9675a27](https://github.com/ReVanced/revanced-manager/commit/9675a2777b364e5ede0d44b92eb7e551d4f7b3d6))\n* patch options ([#45](https://github.com/ReVanced/revanced-manager/issues/45)) ([8540d30](https://github.com/ReVanced/revanced-manager/commit/8540d301962669e3d79ca345c852f5b01df641a4))\n* patch options UI ([#80](https://github.com/ReVanced/revanced-manager/issues/80)) ([0a1acd2](https://github.com/ReVanced/revanced-manager/commit/0a1acd24e3f0d06fde412b8eeecd923d92ee64a9))\n* **patch-selector:** default patches selection ([#1272](https://github.com/ReVanced/revanced-manager/issues/1272)) ([a17c2de](https://github.com/ReVanced/revanced-manager/commit/a17c2de228cccb4a0bb0ca7497720011bec131fc))\n* **patch-selector:** remove TODO about an unplanned feature ([4924eae](https://github.com/ReVanced/revanced-manager/commit/4924eaef800c429f2a59b8a15fd48fae0292810c))\n* **patcher:** Improve installation ([#2185](https://github.com/ReVanced/revanced-manager/issues/2185)) ([3bd4f0d](https://github.com/ReVanced/revanced-manager/commit/3bd4f0d8f3f60d079d4647d42592b10a15f0dae8))\n* patches selector screen ([55e871a](https://github.com/ReVanced/revanced-manager/commit/55e871aa7d27885e44ef33faab1bb4ae33e7a460))\n* Progressive AlertDialog for adding bundles ([9a01273](https://github.com/ReVanced/revanced-manager/commit/9a01273c43bd6bcdb0cdfd26c5a467cd3193e5d7)), closes [#1992](https://github.com/ReVanced/revanced-manager/issues/1992)\n* ProGuard ([d84e6a3](https://github.com/ReVanced/revanced-manager/commit/d84e6a3ffc20d018b2edeb505de20a920785ba5c))\n* Purple default theme ([#1601](https://github.com/ReVanced/revanced-manager/issues/1601)) ([0616666](https://github.com/ReVanced/revanced-manager/commit/0616666d5ef9b53bef5fd630b1b1a47088097d37))\n* Redesign the patches screen ([#2381](https://github.com/ReVanced/revanced-manager/issues/2381)) ([8dc4e5b](https://github.com/ReVanced/revanced-manager/commit/8dc4e5b89ee4d36263c8b4187650691b68484688))\n* remember patch options ([#1449](https://github.com/ReVanced/revanced-manager/issues/1449)) ([90db765](https://github.com/ReVanced/revanced-manager/commit/90db765c9aa014495775a34927904dedf5fef1e3))\n* remove dead help icons ([3bb071d](https://github.com/ReVanced/revanced-manager/commit/3bb071d80d319d4943b0d4c3048f232f3eb9f5cf))\n* Remove tag from changelog ([d2119d3](https://github.com/ReVanced/revanced-manager/commit/d2119d36430198151140b469192f76f781df6dd3))\n* Rename \"Patch bundle\" to \"Patches\" ([#2541](https://github.com/ReVanced/revanced-manager/issues/2541)) ([2cdd6d1](https://github.com/ReVanced/revanced-manager/commit/2cdd6d1843f1e49c7c720f8859e11d6a30c0eea6))\n* rename debug build to `ReVanced Manager (dev)` ([d3417ad](https://github.com/ReVanced/revanced-manager/commit/d3417adbeba0a8e06d3494a2fd108f735f73632c))\n* rename main bundle to `Default` ([e44d3fd](https://github.com/ReVanced/revanced-manager/commit/e44d3fdee444d915e3e8b8143e55f1353980aad2))\n* rename package to `app.revanced.manager` ([5ec97f4](https://github.com/ReVanced/revanced-manager/commit/5ec97f4a852a07d0e554bbe1eacc379179ac089e))\n* Rename strings ([e127845](https://github.com/ReVanced/revanced-manager/commit/e1278452b9c73479cdfb0eb0703db1552b158633))\n* rename ViewModels for consistency ([064a54e](https://github.com/ReVanced/revanced-manager/commit/064a54eaf0675a1cc9d21f3e1071160deb25c201))\n* Reorder Import & Export settings ([#2403](https://github.com/ReVanced/revanced-manager/issues/2403)) ([2697077](https://github.com/ReVanced/revanced-manager/commit/2697077fc88bb795027303558c9d52448a4daded))\n* ReVanced theme colors ([59b894d](https://github.com/ReVanced/revanced-manager/commit/59b894dce4b99c51151a4cccd03a998ceec31778))\n* revert to blue theme colors ([5f4c958](https://github.com/ReVanced/revanced-manager/commit/5f4c9584a94a1edd1eeaa0b9ecfcd9b281b7cccc))\n* root installation ([#1243](https://github.com/ReVanced/revanced-manager/issues/1243)) ([62e934c](https://github.com/ReVanced/revanced-manager/commit/62e934c4032096bed36201510fc55304ba48de68))\n* save patch options and selected patches in bundle ([#50](https://github.com/ReVanced/revanced-manager/issues/50)) ([23162f6](https://github.com/ReVanced/revanced-manager/commit/23162f6233fa6a176514b35feff731f8f28b4d4b))\n* save patch selection using room db ([#38](https://github.com/ReVanced/revanced-manager/issues/38)) ([1efccda](https://github.com/ReVanced/revanced-manager/commit/1efccda3f55d964fae3bee9ee1f0bd260bb1cc74))\n* Screen slide transition ([#2396](https://github.com/ReVanced/revanced-manager/issues/2396)) ([2de16e1](https://github.com/ReVanced/revanced-manager/commit/2de16e18e8ba5e84149b377f225693ea35fa2385))\n* Scrollbars ([#1479](https://github.com/ReVanced/revanced-manager/issues/1479)) ([b5558ea](https://github.com/ReVanced/revanced-manager/commit/b5558ea3ffef40f96b271f8dfe3a5cf95328781e))\n* Select bundle type before adding bundle ([#1490](https://github.com/ReVanced/revanced-manager/issues/1490)) ([88e860c](https://github.com/ReVanced/revanced-manager/commit/88e860cf0132aed23a3cfd3d9d12e472aa895718))\n* selected app info page ([#1395](https://github.com/ReVanced/revanced-manager/issues/1395)) ([b69a369](https://github.com/ReVanced/revanced-manager/commit/b69a369d4e304c8a4c8a8db052309b485171e353))\n* Set app ownership when installing apps ([#2558](https://github.com/ReVanced/revanced-manager/issues/2558)) ([7c410fe](https://github.com/ReVanced/revanced-manager/commit/7c410fef4512087657e3978d5be049c422b25456))\n* settings migration (compose) ([#1309](https://github.com/ReVanced/revanced-manager/issues/1309)) ([bf1d628](https://github.com/ReVanced/revanced-manager/commit/bf1d628944cb5a439d0bda7c49d820a5fa7576b3))\n* settings screen ([b7d53cf](https://github.com/ReVanced/revanced-manager/commit/b7d53cfca84d7239bed9189e265a03fd44dc2e45))\n* **settings screen:** add battery optimization notification ([5754864](https://github.com/ReVanced/revanced-manager/commit/57548641e7ecd06decfc926cb860674ce7443d7a))\n* **settings screen:** match typography from figma ([948a6d1](https://github.com/ReVanced/revanced-manager/commit/948a6d14404e067907c9e84576cfeba76134aaf6))\n* **settings:** move experimental patches option to advanced ([805d440](https://github.com/ReVanced/revanced-manager/commit/805d440450d821a26d3ef90a4f97cd796635057d))\n* **Settings:** use SettingsListItem consistently and overall improvements ([#1427](https://github.com/ReVanced/revanced-manager/issues/1427)) ([5e35893](https://github.com/ReVanced/revanced-manager/commit/5e35893883fa109d74b028478e60b51f97a2e12d))\n* show installed app in version selector ([1ab1e46](https://github.com/ReVanced/revanced-manager/commit/1ab1e4682ffbfe16c02c438ad833adbfdec58b33))\n* Show manager update dialog ([#2069](https://github.com/ReVanced/revanced-manager/issues/2069)) ([113a74d](https://github.com/ReVanced/revanced-manager/commit/113a74d270c1c222d4d06049b4edda8f27724a20)), closes [#1963](https://github.com/ReVanced/revanced-manager/issues/1963) [#1958](https://github.com/ReVanced/revanced-manager/issues/1958)\n* show stacktrace in installer ui ([#36](https://github.com/ReVanced/revanced-manager/issues/36)) ([8d53180](https://github.com/ReVanced/revanced-manager/commit/8d53180d86e6e9d9c8a4056a5fde0603f17e3157))\n* show toast when no patches are selected ([8aa70d3](https://github.com/ReVanced/revanced-manager/commit/8aa70d350e07aae8b4a22b6bc6fb90c0f6227acd))\n* splash screen ([60a5a11](https://github.com/ReVanced/revanced-manager/commit/60a5a11c71634aeda414c2ed85f7706ba3deefe1))\n* store patched apps ([#79](https://github.com/ReVanced/revanced-manager/issues/79)) ([b14285b](https://github.com/ReVanced/revanced-manager/commit/b14285b2c83e60376ad42fa6ea508257cd04d47d))\n* switch to androidx.navigation ([#2362](https://github.com/ReVanced/revanced-manager/issues/2362)) ([7438f45](https://github.com/ReVanced/revanced-manager/commit/7438f45903ec6ed3436a895d4c32d34d41b00010))\n* switch to Preferences DataStore ([#60](https://github.com/ReVanced/revanced-manager/issues/60)) ([1852799](https://github.com/ReVanced/revanced-manager/commit/18527999b5f8752faf36c145276d51e2e095c8ee))\n* switch to revanced api v4 ([7e858a2](https://github.com/ReVanced/revanced-manager/commit/7e858a244cc4038bdb029c4418278700f6a6490f))\n* switch to the new api ([#75](https://github.com/ReVanced/revanced-manager/issues/75)) ([a55160e](https://github.com/ReVanced/revanced-manager/commit/a55160e7c619ec5541de72fa80f079c9bc94d2d5))\n* TopAppBar scroll behavior ([#2397](https://github.com/ReVanced/revanced-manager/issues/2397)) ([dc51d61](https://github.com/ReVanced/revanced-manager/commit/dc51d6134dae0fdc415f66e2716c6bffa35dfdb5))\n* **Update Screen:** changelogs & handle states ([#1464](https://github.com/ReVanced/revanced-manager/issues/1464)) ([3af26e7](https://github.com/ReVanced/revanced-manager/commit/3af26e706571339a3c69688098a51616549c58a8))\n* **update screen:** complete main update screen ([553af83](https://github.com/ReVanced/revanced-manager/commit/553af831393d7276088ceb0b0a854ec654f72def))\n* updater changelogs ([#48](https://github.com/ReVanced/revanced-manager/issues/48)) ([6dbcd62](https://github.com/ReVanced/revanced-manager/commit/6dbcd6293e94d8d20cccc401b0edeb1d7047553e))\n* updater UI and code improvements ([#1597](https://github.com/ReVanced/revanced-manager/issues/1597)) ([a12cae7](https://github.com/ReVanced/revanced-manager/commit/a12cae72998d85138dcf29c0e5d430359e338d5e))\n* Use \"Debug\" and \"Debug signed\" for build names respectively ([5133f02](https://github.com/ReVanced/revanced-manager/commit/5133f02ad61b85af28608c7180b7a2accb4811ab))\n* Use correct casing in module description ([59b4c0b](https://github.com/ReVanced/revanced-manager/commit/59b4c0b2d2e426dfe66b5a01d219b57bb0df5b8b))\n* use revanced api for changelogs ([686eb40](https://github.com/ReVanced/revanced-manager/commit/686eb40cb0f8b8d785732dd2bc82d17b5a4fd042))\n* Use simpler strings ([83d33e8](https://github.com/ReVanced/revanced-manager/commit/83d33e87e3f89cb3efce63dcabcde6478f69b8e7))\n* View bundle patches ([#2065](https://github.com/ReVanced/revanced-manager/issues/2065)) ([089f200](https://github.com/ReVanced/revanced-manager/commit/089f200fe6ff59020a87883a47ef20a0c4c08565))\n\n\n### Reverts\n\n* downgrade Kotlin to 1.8.21 ([fc90bbc](https://github.com/ReVanced/revanced-manager/commit/fc90bbc27ce765e0b55bb5ac9132e58f46aee9aa))\n"
  },
  {
    "path": "app/build.gradle.kts",
    "content": "import com.mikepenz.aboutlibraries.plugin.DuplicateMode\nimport com.mikepenz.aboutlibraries.plugin.DuplicateRule\nimport io.github.z4kn4fein.semver.toVersion\nimport org.jetbrains.kotlin.gradle.dsl.JvmTarget\nimport kotlin.random.Random\n\nplugins {\n    alias(libs.plugins.android.application)\n    alias(libs.plugins.kotlin.android)\n    alias(libs.plugins.kotlin.serialization)\n    alias(libs.plugins.kotlin.parcelize)\n    alias(libs.plugins.compose.compiler)\n    alias(libs.plugins.devtools)\n    alias(libs.plugins.about.libraries)\n    alias(libs.plugins.about.libraries.android)\n    signing\n}\n\nval outputApkFileName = \"${rootProject.name}-$version.apk\"\n\ndependencies {\n    // AndroidX Core\n    implementation(libs.androidx.ktx)\n    implementation(libs.runtime.ktx)\n    implementation(libs.runtime.compose)\n    implementation(libs.splash.screen)\n    implementation(libs.activity.compose)\n    implementation(libs.work.runtime.ktx)\n    implementation(libs.preferences.datastore)\n    implementation(libs.appcompat)\n\n    // Compose\n    implementation(platform(libs.compose.bom))\n    implementation(libs.compose.ui)\n    implementation(libs.compose.ui.preview)\n    implementation(libs.compose.ui.tooling)\n    implementation(libs.compose.livedata)\n    implementation(libs.compose.material.icons.extended)\n    implementation(libs.compose.material3)\n    implementation(libs.navigation.compose)\n\n    // Accompanist\n    implementation(libs.accompanist.drawablepainter)\n\n    // Placeholder\n    implementation(libs.placeholder.material3)\n\n    // Coil (async image loading, network image)\n    implementation(libs.coil.compose)\n    implementation(libs.coil.appiconloader)\n\n    // KotlinX\n    implementation(libs.kotlinx.serialization.json)\n    implementation(libs.kotlinx.collection.immutable)\n    implementation(libs.kotlinx.datetime)\n\n    // Room\n    implementation(libs.room.runtime)\n    implementation(libs.room.ktx)\n    implementation(libs.androidx.foundation.layout)\n    annotationProcessor(libs.room.compiler)\n    ksp(libs.room.compiler)\n\n    // ReVanced\n    implementation(libs.revanced.patcher)\n    implementation(libs.revanced.library)\n\n    // Downloaders\n    implementation(project(\":api\"))\n\n    // Native processes\n    implementation(libs.kotlin.process)\n\n    // HiddenAPI\n    compileOnly(libs.hidden.api.stub)\n\n    // LibSU\n    implementation(libs.libsu.core)\n    implementation(libs.libsu.service)\n    implementation(libs.libsu.nio)\n\n    // Koin\n    implementation(libs.koin.android)\n    implementation(libs.koin.compose)\n    implementation(libs.koin.compose.navigation)\n    implementation(libs.koin.workmanager)\n\n    // Licenses\n    implementation(libs.about.libraries.core)\n    implementation(libs.about.libraries.m3)\n\n    // Ktor\n    implementation(libs.ktor.core)\n    implementation(libs.ktor.logging)\n    implementation(libs.ktor.okhttp)\n    implementation(libs.ktor.content.negotiation)\n    implementation(libs.ktor.serialization)\n\n    // Markdown\n    implementation(libs.markdown.renderer)\n\n    // Fading Edges\n    implementation(libs.fading.edges)\n\n    // Scrollbars\n    implementation(libs.scrollbars)\n\n    // EnumUtil\n    implementation(libs.enumutil)\n    ksp(libs.enumutil.ksp)\n\n    // Reorderable lists\n    implementation(libs.reorderable)\n\n    // Compose Icons\n    implementation(libs.compose.icons.fontawesome)\n\n    // Ackpine\n    implementation(libs.ackpine.core)\n    implementation(libs.ackpine.ktx)\n}\n\nbuildscript {\n    repositories {\n        mavenCentral()\n    }\n    dependencies {\n        // Semantic versioning string parser\n        classpath(libs.semver.parser)\n    }\n}\n\nandroid {\n    namespace = \"app.revanced.manager\"\n    compileSdk {\n        version = release(36) {\n            minorApiLevel = 1\n        }\n    }\n\n    defaultConfig {\n        applicationId = \"app.revanced.manager.flutter\"\n\n        minSdk {\n            version = release(26)\n        }\n        targetSdk {\n            version = release(36)\n        }\n\n        val versionStr = if (version == \"unspecified\") \"1.0.0\" else version.toString()\n        versionName = versionStr\n        versionCode = with(versionStr.toVersion()) {\n            major * 100_000_000 +\n                    minor * 100_000 +\n                    patch * 100 +\n                    (preRelease?.substringAfterLast('.')?.toInt() ?: 99)\n        }\n        vectorDrawables.useSupportLibrary = true\n\n        val resDir = file(\"src/main/res\")\n        val locales = resDir.listFiles()\n            .orEmpty()\n            //noinspection WrongGradleMethod\n            .filter { it.isDirectory && it.name.matches(Regex(\"values-[a-z]{2}(-r[A-Z]{2})?\")) }\n            //noinspection WrongGradleMethod\n            .map { it.name.removePrefix(\"values-\").replace(\"-r\", \"-\") }\n            .sorted()\n            //noinspection WrongGradleMethod\n            .joinToString(prefix = \"{\", separator = \",\", postfix = \"}\") { \"\\\"$it\\\"\" }\n\n        buildConfigField(\"String[]\", \"SUPPORTED_LOCALES\", locales)\n\n        val deepLinkScheme = \"revanced-manager\"\n        manifestPlaceholders[\"deepLinkScheme\"] = deepLinkScheme\n\n        buildConfigField(\"String\", \"DEEP_LINK_SCHEME\", \"\\\"$deepLinkScheme\\\"\")\n    }\n\n    buildTypes {\n        debug {\n            resValue(\"string\", \"app_name\", \"ReVanced Manager (Debug)\")\n        }\n\n        release {\n            // Causes patching to not work properly, if enabled.\n            isMinifyEnabled = false\n            isShrinkResources = false\n\n            val keystoreFile = file(\"keystore.jks\")\n\n            if (project.hasProperty(\"signAsDebug\") || !keystoreFile.exists()) {\n                resValue(\"string\", \"app_name\", \"ReVanced Manager (Debug signed)\")\n                signingConfig = signingConfigs.getByName(\"debug\")\n\n                isPseudoLocalesEnabled = true\n            } else {\n                signingConfig = signingConfigs.create(\"release\") {\n                    storeFile = keystoreFile\n                    storePassword = System.getenv(\"KEYSTORE_PASSWORD\")\n                    keyAlias = System.getenv(\"KEYSTORE_ENTRY_ALIAS\")\n                    keyPassword = System.getenv(\"KEYSTORE_ENTRY_PASSWORD\")\n                }\n            }\n        }\n    }\n\n    applicationVariants.all {\n        outputs.all {\n            this as com.android.build.gradle.internal.api.ApkVariantOutputImpl\n\n            outputFileName = outputApkFileName\n        }\n    }\n\n    compileOptions {\n        sourceCompatibility = JavaVersion.VERSION_17\n        targetCompatibility = JavaVersion.VERSION_17\n    }\n\n    dependenciesInfo {\n        includeInApk = false\n        includeInBundle = false\n    }\n\n    ksp {\n        arg(\"room.schemaLocation\", \"$projectDir/schemas\")\n    }\n\n    buildFeatures {\n        compose = true\n        aidl = true\n        buildConfig = true\n    }\n\n    androidResources {\n        generateLocaleConfig = true\n    }\n\n    externalNativeBuild {\n        cmake {\n            path = file(\"src/main/cpp/CMakeLists.txt\")\n            version = \"3.22.1\"\n        }\n    }\n\n    packaging {\n        resources {\n            // Useless files\n            excludes += \"/XPP3_*_VERSION\"\n            excludes += \"/font-awesome-license.txt\"\n            excludes += \"/smali.properties\"\n            excludes += \"/baksmali.properties\"\n            excludes += \"/properties/apktool.properties\"\n            excludes += \"/org/antlr/**\"\n            excludes += \"/org/mockito/**\"\n            excludes += \"/org/bouncycastle/pqc/**.properties\"\n            excludes += \"/org/bouncycastle/x509/**.properties\"\n            excludes += \"/META-INF/INDEX.LIST\"\n            excludes += \"/META-INF/**/*.txt\"\n            excludes += \"/META-INF/**/*.properties\"\n            excludes += \"/META-INF/DEPENDENCIES\"\n\n            // AAPT\n            excludes += \"/prebuilt/**/*\"\n        }\n        jniLibs {\n            // 32-bit x86 is dead\n            excludes += \"/lib/x86/*.so\"\n\n            // Equivalent of AndroidManifest's extractNativeLibs=true to ensure libs are compressed\n            useLegacyPackaging = true\n        }\n    }\n}\n\nandroidComponents {\n    onVariants(selector().withBuildType(\"release\")) {\n        it.packaging.resources.excludes.apply {\n            // Debug metadata\n            add(\"/META-INF/*.version\")\n            add(\"/META-INF/*.kotlin_module\")\n            add(\"/kotlin-tooling-metadata.json\")\n\n            // Kotlin debugging (https://github.com/Kotlin/kotlinx.coroutines/issues/2274)\n            add(\"/DebugProbesKt.bin\")\n        }\n    }\n}\n\nkotlin {\n    jvmToolchain(17)\n    compilerOptions {\n        jvmTarget = JvmTarget.JVM_17\n        freeCompilerArgs.addAll(\n            \"-Xexplicit-backing-fields\",\n            \"-Xcontext-parameters\",\n        )\n    }\n}\n\nconfigurations {\n    all {\n        // ReVanced Library has a dependency which conflicts with whatever this is. We don't use protobuf, so it should be fine.\n        exclude(group = \"com.google.api.grpc\", module = \"proto-google-common-protos\")\n    }\n}\n\naboutLibraries {\n    library {\n        // Enable the duplication mode, allows to merge, or link dependencies which relate\n        duplicationMode = DuplicateMode.MERGE\n        // Configure the duplication rule, to match \"duplicates\" with\n        duplicationRule = DuplicateRule.EXACT\n    }\n}\n\ntasks {\n    // Needed by gradle-semantic-release-plugin.\n    // Tracking: https://github.com/KengoTODA/gradle-semantic-release-plugin/issues/435.\n    val publish by registering {\n        group = \"publishing\"\n        description = \"Build the release APK\"\n\n        dependsOn(\"assembleRelease\")\n\n        val apk = project.layout.buildDirectory.file(\"outputs/apk/release/${outputApkFileName}\")\n        val ascFile = apk.map { it.asFile.resolveSibling(\"${it.asFile.name}.asc\") }\n\n        inputs.file(apk).withPropertyName(\"inputApk\")\n        outputs.file(ascFile).withPropertyName(\"outputAsc\")\n\n        doLast {\n            signing {\n                useGpgCmd()\n                sign(apk.get().asFile)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/gradle.properties",
    "content": "version = 2.2.3\n"
  },
  {
    "path": "app/package.json",
    "content": "{\n  \"name\": \"app\",\n  \"private\": false,\n  \"devDependencies\": {\n    \"@anolilab/multi-semantic-release\": \"^1.1.10\",\n    \"@saithodev/semantic-release-backmerge\": \"^4.0.1\",\n    \"@semantic-release/changelog\": \"^6.0.3\",\n    \"@semantic-release/git\": \"^10.0.1\",\n    \"gradle-semantic-release-plugin\": \"^1.10.1\"\n  }\n}\n"
  },
  {
    "path": "app/schemas/app.revanced.manager.data.room.AppDatabase/1.json",
    "content": "{\n  \"formatVersion\": 1,\n  \"database\": {\n    \"version\": 1,\n    \"identityHash\": \"c0060d66d8afa086f2632c4eb145ffc4\",\n    \"entities\": [\n      {\n        \"tableName\": \"patch_bundles\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER NOT NULL, `name` TEXT NOT NULL, `version` TEXT, `source` TEXT NOT NULL, `auto_update` INTEGER NOT NULL, PRIMARY KEY(`uid`))\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"uid\",\n            \"columnName\": \"uid\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"name\",\n            \"columnName\": \"name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"versionHash\",\n            \"columnName\": \"version\",\n            \"affinity\": \"TEXT\"\n          },\n          {\n            \"fieldPath\": \"source\",\n            \"columnName\": \"source\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"autoUpdate\",\n            \"columnName\": \"auto_update\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"uid\"\n          ]\n        }\n      },\n      {\n        \"tableName\": \"patch_selections\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER NOT NULL, `patch_bundle` INTEGER NOT NULL, `package_name` TEXT NOT NULL, PRIMARY KEY(`uid`), FOREIGN KEY(`patch_bundle`) REFERENCES `patch_bundles`(`uid`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"uid\",\n            \"columnName\": \"uid\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"patchBundle\",\n            \"columnName\": \"patch_bundle\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"packageName\",\n            \"columnName\": \"package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"uid\"\n          ]\n        },\n        \"indices\": [\n          {\n            \"name\": \"index_patch_selections_patch_bundle_package_name\",\n            \"unique\": true,\n            \"columnNames\": [\n              \"patch_bundle\",\n              \"package_name\"\n            ],\n            \"orders\": [],\n            \"createSql\": \"CREATE UNIQUE INDEX IF NOT EXISTS `index_patch_selections_patch_bundle_package_name` ON `${TABLE_NAME}` (`patch_bundle`, `package_name`)\"\n          }\n        ],\n        \"foreignKeys\": [\n          {\n            \"table\": \"patch_bundles\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"patch_bundle\"\n            ],\n            \"referencedColumns\": [\n              \"uid\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"selected_patches\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`selection` INTEGER NOT NULL, `patch_name` TEXT NOT NULL, PRIMARY KEY(`selection`, `patch_name`), FOREIGN KEY(`selection`) REFERENCES `patch_selections`(`uid`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"selection\",\n            \"columnName\": \"selection\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"patchName\",\n            \"columnName\": \"patch_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"selection\",\n            \"patch_name\"\n          ]\n        },\n        \"foreignKeys\": [\n          {\n            \"table\": \"patch_selections\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"selection\"\n            ],\n            \"referencedColumns\": [\n              \"uid\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"downloaded_app\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`package_name` TEXT NOT NULL, `version` TEXT NOT NULL, `directory` TEXT NOT NULL, `last_used` INTEGER NOT NULL, PRIMARY KEY(`package_name`, `version`))\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"packageName\",\n            \"columnName\": \"package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"version\",\n            \"columnName\": \"version\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"directory\",\n            \"columnName\": \"directory\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"lastUsed\",\n            \"columnName\": \"last_used\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"package_name\",\n            \"version\"\n          ]\n        }\n      },\n      {\n        \"tableName\": \"installed_app\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`current_package_name` TEXT NOT NULL, `original_package_name` TEXT NOT NULL, `version` TEXT NOT NULL, `install_type` TEXT NOT NULL, PRIMARY KEY(`current_package_name`))\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"currentPackageName\",\n            \"columnName\": \"current_package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"originalPackageName\",\n            \"columnName\": \"original_package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"version\",\n            \"columnName\": \"version\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"installType\",\n            \"columnName\": \"install_type\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"current_package_name\"\n          ]\n        }\n      },\n      {\n        \"tableName\": \"applied_patch\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`package_name` TEXT NOT NULL, `bundle` INTEGER NOT NULL, `patch_name` TEXT NOT NULL, PRIMARY KEY(`package_name`, `bundle`, `patch_name`), FOREIGN KEY(`package_name`) REFERENCES `installed_app`(`current_package_name`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`bundle`) REFERENCES `patch_bundles`(`uid`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"packageName\",\n            \"columnName\": \"package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"bundle\",\n            \"columnName\": \"bundle\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"patchName\",\n            \"columnName\": \"patch_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"package_name\",\n            \"bundle\",\n            \"patch_name\"\n          ]\n        },\n        \"indices\": [\n          {\n            \"name\": \"index_applied_patch_bundle\",\n            \"unique\": false,\n            \"columnNames\": [\n              \"bundle\"\n            ],\n            \"orders\": [],\n            \"createSql\": \"CREATE INDEX IF NOT EXISTS `index_applied_patch_bundle` ON `${TABLE_NAME}` (`bundle`)\"\n          }\n        ],\n        \"foreignKeys\": [\n          {\n            \"table\": \"installed_app\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"package_name\"\n            ],\n            \"referencedColumns\": [\n              \"current_package_name\"\n            ]\n          },\n          {\n            \"table\": \"patch_bundles\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"bundle\"\n            ],\n            \"referencedColumns\": [\n              \"uid\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"option_groups\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER NOT NULL, `patch_bundle` INTEGER NOT NULL, `package_name` TEXT NOT NULL, PRIMARY KEY(`uid`), FOREIGN KEY(`patch_bundle`) REFERENCES `patch_bundles`(`uid`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"uid\",\n            \"columnName\": \"uid\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"patchBundle\",\n            \"columnName\": \"patch_bundle\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"packageName\",\n            \"columnName\": \"package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"uid\"\n          ]\n        },\n        \"indices\": [\n          {\n            \"name\": \"index_option_groups_patch_bundle_package_name\",\n            \"unique\": true,\n            \"columnNames\": [\n              \"patch_bundle\",\n              \"package_name\"\n            ],\n            \"orders\": [],\n            \"createSql\": \"CREATE UNIQUE INDEX IF NOT EXISTS `index_option_groups_patch_bundle_package_name` ON `${TABLE_NAME}` (`patch_bundle`, `package_name`)\"\n          }\n        ],\n        \"foreignKeys\": [\n          {\n            \"table\": \"patch_bundles\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"patch_bundle\"\n            ],\n            \"referencedColumns\": [\n              \"uid\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"options\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`group` INTEGER NOT NULL, `patch_name` TEXT NOT NULL, `key` TEXT NOT NULL, `value` TEXT NOT NULL, PRIMARY KEY(`group`, `patch_name`, `key`), FOREIGN KEY(`group`) REFERENCES `option_groups`(`uid`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"group\",\n            \"columnName\": \"group\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"patchName\",\n            \"columnName\": \"patch_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"key\",\n            \"columnName\": \"key\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"value\",\n            \"columnName\": \"value\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"group\",\n            \"patch_name\",\n            \"key\"\n          ]\n        },\n        \"foreignKeys\": [\n          {\n            \"table\": \"option_groups\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"group\"\n            ],\n            \"referencedColumns\": [\n              \"uid\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"trusted_downloaders\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`package_name` TEXT NOT NULL, `signature` BLOB NOT NULL, PRIMARY KEY(`package_name`))\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"packageName\",\n            \"columnName\": \"package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"signature\",\n            \"columnName\": \"signature\",\n            \"affinity\": \"BLOB\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"package_name\"\n          ]\n        }\n      }\n    ],\n    \"setupQueries\": [\n      \"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)\",\n      \"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'c0060d66d8afa086f2632c4eb145ffc4')\"\n    ]\n  }\n}"
  },
  {
    "path": "app/schemas/app.revanced.manager.data.room.AppDatabase/2.json",
    "content": "{\n  \"formatVersion\": 1,\n  \"database\": {\n    \"version\": 2,\n    \"identityHash\": \"d9350f0e779a1bde46227a29884a7865\",\n    \"entities\": [\n      {\n        \"tableName\": \"patch_bundles\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER NOT NULL, `name` TEXT NOT NULL, `version` TEXT, `source` TEXT NOT NULL, `auto_update` INTEGER NOT NULL, PRIMARY KEY(`uid`))\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"uid\",\n            \"columnName\": \"uid\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"name\",\n            \"columnName\": \"name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"versionHash\",\n            \"columnName\": \"version\",\n            \"affinity\": \"TEXT\"\n          },\n          {\n            \"fieldPath\": \"source\",\n            \"columnName\": \"source\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"autoUpdate\",\n            \"columnName\": \"auto_update\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"uid\"\n          ]\n        }\n      },\n      {\n        \"tableName\": \"patch_selections\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER NOT NULL, `patch_bundle` INTEGER NOT NULL, `package_name` TEXT NOT NULL, PRIMARY KEY(`uid`), FOREIGN KEY(`patch_bundle`) REFERENCES `patch_bundles`(`uid`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"uid\",\n            \"columnName\": \"uid\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"patchBundle\",\n            \"columnName\": \"patch_bundle\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"packageName\",\n            \"columnName\": \"package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"uid\"\n          ]\n        },\n        \"indices\": [\n          {\n            \"name\": \"index_patch_selections_patch_bundle_package_name\",\n            \"unique\": true,\n            \"columnNames\": [\n              \"patch_bundle\",\n              \"package_name\"\n            ],\n            \"orders\": [],\n            \"createSql\": \"CREATE UNIQUE INDEX IF NOT EXISTS `index_patch_selections_patch_bundle_package_name` ON `${TABLE_NAME}` (`patch_bundle`, `package_name`)\"\n          }\n        ],\n        \"foreignKeys\": [\n          {\n            \"table\": \"patch_bundles\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"patch_bundle\"\n            ],\n            \"referencedColumns\": [\n              \"uid\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"selected_patches\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`selection` INTEGER NOT NULL, `patch_name` TEXT NOT NULL, PRIMARY KEY(`selection`, `patch_name`), FOREIGN KEY(`selection`) REFERENCES `patch_selections`(`uid`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"selection\",\n            \"columnName\": \"selection\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"patchName\",\n            \"columnName\": \"patch_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"selection\",\n            \"patch_name\"\n          ]\n        },\n        \"foreignKeys\": [\n          {\n            \"table\": \"patch_selections\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"selection\"\n            ],\n            \"referencedColumns\": [\n              \"uid\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"downloaded_app\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`package_name` TEXT NOT NULL, `version` TEXT NOT NULL, `directory` TEXT NOT NULL, `last_used` INTEGER NOT NULL, PRIMARY KEY(`package_name`, `version`))\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"packageName\",\n            \"columnName\": \"package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"version\",\n            \"columnName\": \"version\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"directory\",\n            \"columnName\": \"directory\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"lastUsed\",\n            \"columnName\": \"last_used\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"package_name\",\n            \"version\"\n          ]\n        }\n      },\n      {\n        \"tableName\": \"installed_app\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`current_package_name` TEXT NOT NULL, `original_package_name` TEXT NOT NULL, `version` TEXT NOT NULL, `install_type` TEXT NOT NULL, PRIMARY KEY(`current_package_name`))\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"currentPackageName\",\n            \"columnName\": \"current_package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"originalPackageName\",\n            \"columnName\": \"original_package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"version\",\n            \"columnName\": \"version\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"installType\",\n            \"columnName\": \"install_type\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"current_package_name\"\n          ]\n        }\n      },\n      {\n        \"tableName\": \"applied_patch\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`package_name` TEXT NOT NULL, `bundle` INTEGER NOT NULL, `patch_name` TEXT NOT NULL, PRIMARY KEY(`package_name`, `bundle`, `patch_name`), FOREIGN KEY(`package_name`) REFERENCES `installed_app`(`current_package_name`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`bundle`) REFERENCES `patch_bundles`(`uid`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"packageName\",\n            \"columnName\": \"package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"bundle\",\n            \"columnName\": \"bundle\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"patchName\",\n            \"columnName\": \"patch_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"package_name\",\n            \"bundle\",\n            \"patch_name\"\n          ]\n        },\n        \"indices\": [\n          {\n            \"name\": \"index_applied_patch_bundle\",\n            \"unique\": false,\n            \"columnNames\": [\n              \"bundle\"\n            ],\n            \"orders\": [],\n            \"createSql\": \"CREATE INDEX IF NOT EXISTS `index_applied_patch_bundle` ON `${TABLE_NAME}` (`bundle`)\"\n          }\n        ],\n        \"foreignKeys\": [\n          {\n            \"table\": \"installed_app\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"package_name\"\n            ],\n            \"referencedColumns\": [\n              \"current_package_name\"\n            ]\n          },\n          {\n            \"table\": \"patch_bundles\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"bundle\"\n            ],\n            \"referencedColumns\": [\n              \"uid\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"installed_patch_bundle\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`package_name` TEXT NOT NULL, `bundle_uid` INTEGER NOT NULL, `bundle_name` TEXT NOT NULL, `bundle_version` TEXT, PRIMARY KEY(`package_name`, `bundle_uid`), FOREIGN KEY(`package_name`) REFERENCES `installed_app`(`current_package_name`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"packageName\",\n            \"columnName\": \"package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"bundleUid\",\n            \"columnName\": \"bundle_uid\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"bundleName\",\n            \"columnName\": \"bundle_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"bundleVersion\",\n            \"columnName\": \"bundle_version\",\n            \"affinity\": \"TEXT\"\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"package_name\",\n            \"bundle_uid\"\n          ]\n        },\n        \"foreignKeys\": [\n          {\n            \"table\": \"installed_app\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"package_name\"\n            ],\n            \"referencedColumns\": [\n              \"current_package_name\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"option_groups\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER NOT NULL, `patch_bundle` INTEGER NOT NULL, `package_name` TEXT NOT NULL, PRIMARY KEY(`uid`), FOREIGN KEY(`patch_bundle`) REFERENCES `patch_bundles`(`uid`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"uid\",\n            \"columnName\": \"uid\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"patchBundle\",\n            \"columnName\": \"patch_bundle\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"packageName\",\n            \"columnName\": \"package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"uid\"\n          ]\n        },\n        \"indices\": [\n          {\n            \"name\": \"index_option_groups_patch_bundle_package_name\",\n            \"unique\": true,\n            \"columnNames\": [\n              \"patch_bundle\",\n              \"package_name\"\n            ],\n            \"orders\": [],\n            \"createSql\": \"CREATE UNIQUE INDEX IF NOT EXISTS `index_option_groups_patch_bundle_package_name` ON `${TABLE_NAME}` (`patch_bundle`, `package_name`)\"\n          }\n        ],\n        \"foreignKeys\": [\n          {\n            \"table\": \"patch_bundles\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"patch_bundle\"\n            ],\n            \"referencedColumns\": [\n              \"uid\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"options\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`group` INTEGER NOT NULL, `patch_name` TEXT NOT NULL, `key` TEXT NOT NULL, `value` TEXT NOT NULL, PRIMARY KEY(`group`, `patch_name`, `key`), FOREIGN KEY(`group`) REFERENCES `option_groups`(`uid`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"group\",\n            \"columnName\": \"group\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"patchName\",\n            \"columnName\": \"patch_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"key\",\n            \"columnName\": \"key\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"value\",\n            \"columnName\": \"value\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"group\",\n            \"patch_name\",\n            \"key\"\n          ]\n        },\n        \"foreignKeys\": [\n          {\n            \"table\": \"option_groups\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"group\"\n            ],\n            \"referencedColumns\": [\n              \"uid\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"trusted_downloaders\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`package_name` TEXT NOT NULL, `signature` BLOB NOT NULL, PRIMARY KEY(`package_name`))\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"packageName\",\n            \"columnName\": \"package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"signature\",\n            \"columnName\": \"signature\",\n            \"affinity\": \"BLOB\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"package_name\"\n          ]\n        }\n      }\n    ],\n    \"setupQueries\": [\n      \"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)\",\n      \"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'd9350f0e779a1bde46227a29884a7865')\"\n    ]\n  }\n}"
  },
  {
    "path": "app/schemas/app.revanced.manager.data.room.AppDatabase/3.json",
    "content": "{\n  \"formatVersion\": 1,\n  \"database\": {\n    \"version\": 3,\n    \"identityHash\": \"34c25e93a6e1506c3c62e3705a4a0e82\",\n    \"entities\": [\n      {\n        \"tableName\": \"patch_bundles\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER NOT NULL, `name` TEXT NOT NULL, `version` TEXT, `source` TEXT NOT NULL, `auto_update` INTEGER NOT NULL, PRIMARY KEY(`uid`))\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"uid\",\n            \"columnName\": \"uid\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"name\",\n            \"columnName\": \"name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"versionHash\",\n            \"columnName\": \"version\",\n            \"affinity\": \"TEXT\"\n          },\n          {\n            \"fieldPath\": \"source\",\n            \"columnName\": \"source\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"autoUpdate\",\n            \"columnName\": \"auto_update\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"uid\"\n          ]\n        }\n      },\n      {\n        \"tableName\": \"patch_selections\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER NOT NULL, `patch_bundle` INTEGER NOT NULL, `package_name` TEXT NOT NULL, PRIMARY KEY(`uid`), FOREIGN KEY(`patch_bundle`) REFERENCES `patch_bundles`(`uid`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"uid\",\n            \"columnName\": \"uid\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"patchBundle\",\n            \"columnName\": \"patch_bundle\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"packageName\",\n            \"columnName\": \"package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"uid\"\n          ]\n        },\n        \"indices\": [\n          {\n            \"name\": \"index_patch_selections_patch_bundle_package_name\",\n            \"unique\": true,\n            \"columnNames\": [\n              \"patch_bundle\",\n              \"package_name\"\n            ],\n            \"orders\": [],\n            \"createSql\": \"CREATE UNIQUE INDEX IF NOT EXISTS `index_patch_selections_patch_bundle_package_name` ON `${TABLE_NAME}` (`patch_bundle`, `package_name`)\"\n          }\n        ],\n        \"foreignKeys\": [\n          {\n            \"table\": \"patch_bundles\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"patch_bundle\"\n            ],\n            \"referencedColumns\": [\n              \"uid\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"selected_patches\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`selection` INTEGER NOT NULL, `patch_name` TEXT NOT NULL, PRIMARY KEY(`selection`, `patch_name`), FOREIGN KEY(`selection`) REFERENCES `patch_selections`(`uid`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"selection\",\n            \"columnName\": \"selection\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"patchName\",\n            \"columnName\": \"patch_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"selection\",\n            \"patch_name\"\n          ]\n        },\n        \"foreignKeys\": [\n          {\n            \"table\": \"patch_selections\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"selection\"\n            ],\n            \"referencedColumns\": [\n              \"uid\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"downloaded_app\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`package_name` TEXT NOT NULL, `version` TEXT NOT NULL, `directory` TEXT NOT NULL, `last_used` INTEGER NOT NULL, PRIMARY KEY(`package_name`, `version`))\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"packageName\",\n            \"columnName\": \"package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"version\",\n            \"columnName\": \"version\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"directory\",\n            \"columnName\": \"directory\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"lastUsed\",\n            \"columnName\": \"last_used\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"package_name\",\n            \"version\"\n          ]\n        }\n      },\n      {\n        \"tableName\": \"installed_app\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`current_package_name` TEXT NOT NULL, `original_package_name` TEXT NOT NULL, `version` TEXT NOT NULL, `install_type` TEXT NOT NULL, PRIMARY KEY(`current_package_name`))\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"currentPackageName\",\n            \"columnName\": \"current_package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"originalPackageName\",\n            \"columnName\": \"original_package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"version\",\n            \"columnName\": \"version\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"installType\",\n            \"columnName\": \"install_type\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"current_package_name\"\n          ]\n        }\n      },\n      {\n        \"tableName\": \"applied_patch\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`package_name` TEXT NOT NULL, `bundle` INTEGER NOT NULL, `patch_name` TEXT NOT NULL, PRIMARY KEY(`package_name`, `bundle`, `patch_name`), FOREIGN KEY(`package_name`) REFERENCES `installed_app`(`current_package_name`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`bundle`) REFERENCES `patch_bundles`(`uid`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"packageName\",\n            \"columnName\": \"package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"bundle\",\n            \"columnName\": \"bundle\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"patchName\",\n            \"columnName\": \"patch_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"package_name\",\n            \"bundle\",\n            \"patch_name\"\n          ]\n        },\n        \"indices\": [\n          {\n            \"name\": \"index_applied_patch_bundle\",\n            \"unique\": false,\n            \"columnNames\": [\n              \"bundle\"\n            ],\n            \"orders\": [],\n            \"createSql\": \"CREATE INDEX IF NOT EXISTS `index_applied_patch_bundle` ON `${TABLE_NAME}` (`bundle`)\"\n          }\n        ],\n        \"foreignKeys\": [\n          {\n            \"table\": \"installed_app\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"package_name\"\n            ],\n            \"referencedColumns\": [\n              \"current_package_name\"\n            ]\n          },\n          {\n            \"table\": \"patch_bundles\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"bundle\"\n            ],\n            \"referencedColumns\": [\n              \"uid\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"installed_patch_bundle\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`package_name` TEXT NOT NULL, `bundle_uid` INTEGER NOT NULL, `bundle_name` TEXT NOT NULL, `bundle_version` TEXT, PRIMARY KEY(`package_name`, `bundle_uid`), FOREIGN KEY(`package_name`) REFERENCES `installed_app`(`current_package_name`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"packageName\",\n            \"columnName\": \"package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"bundleUid\",\n            \"columnName\": \"bundle_uid\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"bundleName\",\n            \"columnName\": \"bundle_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"bundleVersion\",\n            \"columnName\": \"bundle_version\",\n            \"affinity\": \"TEXT\"\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"package_name\",\n            \"bundle_uid\"\n          ]\n        },\n        \"foreignKeys\": [\n          {\n            \"table\": \"installed_app\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"package_name\"\n            ],\n            \"referencedColumns\": [\n              \"current_package_name\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"option_groups\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER NOT NULL, `patch_bundle` INTEGER NOT NULL, `package_name` TEXT NOT NULL, PRIMARY KEY(`uid`), FOREIGN KEY(`patch_bundle`) REFERENCES `patch_bundles`(`uid`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"uid\",\n            \"columnName\": \"uid\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"patchBundle\",\n            \"columnName\": \"patch_bundle\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"packageName\",\n            \"columnName\": \"package_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"uid\"\n          ]\n        },\n        \"indices\": [\n          {\n            \"name\": \"index_option_groups_patch_bundle_package_name\",\n            \"unique\": true,\n            \"columnNames\": [\n              \"patch_bundle\",\n              \"package_name\"\n            ],\n            \"orders\": [],\n            \"createSql\": \"CREATE UNIQUE INDEX IF NOT EXISTS `index_option_groups_patch_bundle_package_name` ON `${TABLE_NAME}` (`patch_bundle`, `package_name`)\"\n          }\n        ],\n        \"foreignKeys\": [\n          {\n            \"table\": \"patch_bundles\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"patch_bundle\"\n            ],\n            \"referencedColumns\": [\n              \"uid\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"options\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`group` INTEGER NOT NULL, `patch_name` TEXT NOT NULL, `key` TEXT NOT NULL, `value` TEXT NOT NULL, PRIMARY KEY(`group`, `patch_name`, `key`), FOREIGN KEY(`group`) REFERENCES `option_groups`(`uid`) ON UPDATE NO ACTION ON DELETE CASCADE )\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"group\",\n            \"columnName\": \"group\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"patchName\",\n            \"columnName\": \"patch_name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"name\",\n            \"columnName\": \"key\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"value\",\n            \"columnName\": \"value\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"group\",\n            \"patch_name\",\n            \"key\"\n          ]\n        },\n        \"foreignKeys\": [\n          {\n            \"table\": \"option_groups\",\n            \"onDelete\": \"CASCADE\",\n            \"onUpdate\": \"NO ACTION\",\n            \"columns\": [\n              \"group\"\n            ],\n            \"referencedColumns\": [\n              \"uid\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tableName\": \"downloaders\",\n        \"createSql\": \"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER NOT NULL, `name` TEXT NOT NULL, `version` TEXT, `source` TEXT NOT NULL, `auto_update` INTEGER NOT NULL, PRIMARY KEY(`uid`))\",\n        \"fields\": [\n          {\n            \"fieldPath\": \"uid\",\n            \"columnName\": \"uid\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"name\",\n            \"columnName\": \"name\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"versionHash\",\n            \"columnName\": \"version\",\n            \"affinity\": \"TEXT\"\n          },\n          {\n            \"fieldPath\": \"source\",\n            \"columnName\": \"source\",\n            \"affinity\": \"TEXT\",\n            \"notNull\": true\n          },\n          {\n            \"fieldPath\": \"autoUpdate\",\n            \"columnName\": \"auto_update\",\n            \"affinity\": \"INTEGER\",\n            \"notNull\": true\n          }\n        ],\n        \"primaryKey\": {\n          \"autoGenerate\": false,\n          \"columnNames\": [\n            \"uid\"\n          ]\n        }\n      }\n    ],\n    \"setupQueries\": [\n      \"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)\",\n      \"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '34c25e93a6e1506c3c62e3705a4a0e82')\"\n    ]\n  }\n}"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <permission\n        android:name=\"app.revanced.manager.permission.DOWNLOADER_HOST\"\n        android:protectionLevel=\"signature\"\n        android:label=\"@string/downloader_host_permission_label\"\n        android:description=\"@string/downloader_host_permission_description\"\n        />\n\n    <uses-permission android:name=\"app.revanced.manager.permission.DOWNLOADER_HOST\" />\n    <uses-permission android:name=\"android.permission.QUERY_ALL_PACKAGES\"\n        tools:ignore=\"QueryAllPackagesPermission\" />\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\" />\n    <uses-permission android:name=\"android.permission.REQUEST_DELETE_PACKAGES\" />\n    <uses-permission android:name=\"android.permission.FOREGROUND_SERVICE\" />\n    <uses-permission android:name=\"android.permission.FOREGROUND_SERVICE_SPECIAL_USE\" />\n    <uses-permission android:name=\"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\" />\n    <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" android:maxSdkVersion=\"29\" />\n    <uses-permission android:name=\"android.permission.MANAGE_EXTERNAL_STORAGE\"\n        tools:ignore=\"ScopedStorage\" />\n    <uses-permission android:name=\"android.permission.WAKE_LOCK\" />\n    <uses-permission android:name=\"android.permission.ENFORCE_UPDATE_OWNERSHIP\" />\n\n    <application\n        android:name=\".ManagerApplication\"\n        android:allowBackup=\"true\"\n        android:dataExtractionRules=\"@xml/data_extraction_rules\"\n        android:largeHeap=\"true\"\n        android:fullBackupContent=\"@xml/backup_rules\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/Theme.ReVancedManager\"\n        android:enableOnBackInvokedCallback=\"true\"\n        tools:targetApi=\"34\">\n\n        <activity\n            android:name=\".MainActivity\"\n            android:exported=\"true\"\n            android:configChanges=\"layoutDirection|locale\"\n            android:theme=\"@style/Theme.ReVancedManager\">\n\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n\n            <intent-filter>\n                <action android:name=\"android.intent.action.VIEW\" />\n                <category android:name=\"android.intent.category.DEFAULT\" />\n                <category android:name=\"android.intent.category.BROWSABLE\" />\n\n                <data android:scheme=\"${deepLinkScheme}\" />\n            </intent-filter>\n        </activity>\n\n        <activity android:name=\".DownloaderActivity\" android:exported=\"false\" android:theme=\"@style/Theme.DownloaderActivity\" />\n\n        <service\n            android:name=\"androidx.work.impl.foreground.SystemForegroundService\"\n            android:foregroundServiceType=\"specialUse\"\n            android:exported=\"false\"\n            tools:node=\"merge\">\n            <property\n                android:name=\"android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE\"\n                android:value=\"patching\"\n                />\n        </service>\n\n        <provider\n                android:name=\"androidx.startup.InitializationProvider\"\n                android:authorities=\"${applicationId}.androidx-startup\"\n                android:exported=\"false\"\n                tools:node=\"merge\">\n            <meta-data\n                    android:name=\"androidx.work.WorkManagerInitializer\"\n                    android:value=\"androidx.startup\"\n                    tools:node=\"remove\" />\n        </provider>\n\n\n        <provider\n            android:name=\".ManagerFileProvider\"\n            android:authorities=\"${applicationId}.fileprovider\"\n            android:exported=\"false\"\n            android:grantUriPermissions=\"true\">\n            <meta-data\n                android:name=\"android.support.FILE_PROVIDER_PATHS\"\n                android:resource=\"@xml/file_provider_paths\" />\n        </provider>\n    </application>\n</manifest>"
  },
  {
    "path": "app/src/main/aidl/app/revanced/manager/IRootSystemService.aidl",
    "content": "// IRootService.aidl\npackage app.revanced.manager;\n\n// Declare any non-default types here with import statements\n\ninterface IRootSystemService {\n    IBinder getFileSystemService();\n}"
  },
  {
    "path": "app/src/main/aidl/app/revanced/manager/patcher/ProgressEventParcel.aidl",
    "content": "// ProgressEventParcel.aidl\npackage app.revanced.manager.patcher;\n\nparcelable ProgressEventParcel;"
  },
  {
    "path": "app/src/main/aidl/app/revanced/manager/patcher/runtime/process/IPatcherEvents.aidl",
    "content": "// IPatcherEvents.aidl\npackage app.revanced.manager.patcher.runtime.process;\n\nimport app.revanced.manager.patcher.ProgressEventParcel;\n\n// Interface for sending events back to the main app process.\noneway interface IPatcherEvents {\n    void log(String level, String msg);\n    void event(in ProgressEventParcel event);\n    // The patching process has ended. The exceptionStackTrace is null if it finished successfully.\n    void finished(String exceptionStackTrace);\n}"
  },
  {
    "path": "app/src/main/aidl/app/revanced/manager/patcher/runtime/process/IPatcherProcess.aidl",
    "content": "// IPatcherProcess.aidl\npackage app.revanced.manager.patcher.runtime.process;\n\nimport app.revanced.manager.patcher.runtime.process.Parameters;\nimport app.revanced.manager.patcher.runtime.process.IPatcherEvents;\n\ninterface IPatcherProcess {\n    // Makes the patcher process exit with code 0\n    oneway void exit();\n    // Starts patching.\n    oneway void start(in Parameters parameters, IPatcherEvents events);\n}"
  },
  {
    "path": "app/src/main/aidl/app/revanced/manager/patcher/runtime/process/Parameters.aidl",
    "content": "// Parameters.aidl\npackage app.revanced.manager.patcher.runtime.process;\n\nparcelable Parameters;"
  },
  {
    "path": "app/src/main/assets/root/module.prop",
    "content": "id=__PKG_NAME__-ReVanced\nname=__LABEL__ ReVanced\nversion=__VERSION__\nversionCode=0\nauthor=ReVanced\ndescription=Mounts the patched APK on top of the original one"
  },
  {
    "path": "app/src/main/assets/root/service.sh",
    "content": "#!/system/bin/sh\nDIR=${0%/*}\n\npackage_name=\"__PKG_NAME__\"\nversion=\"__VERSION__\"\n\nrm \"$DIR/log\"\n\n{\n\nuntil [ \"$(getprop sys.boot_completed)\" = 1 ]; do sleep 5; done\nsleep 5\n\nbase_path=\"$DIR/$package_name.apk\"\nstock_path=\"$(pm path \"$package_name\" | grep base | sed 's/package://g')\"\nstock_version=\"$(dumpsys package \"$package_name\" | grep versionName | cut -d \"=\" -f2)\"\n\necho \"base_path: $base_path\"\necho \"stock_path: $stock_path\"\necho \"base_version: $version\"\necho \"stock_version: $stock_version\"\n\nif mount | grep -q \"$stock_path\" ; then\n  echo \"Not mounting as stock path is already mounted\"\n  exit 1\nfi\n\nif [ \"$version\" != \"$stock_version\" ]; then\n  echo \"Not mounting as versions don't match\"\n  exit 1\nfi\n\nif [ -z \"$stock_path\" ]; then\n  echo \"Not mounting as app info could not be loaded\"\n  exit 1\nfi\n\nmount -o bind \"$base_path\" \"$stock_path\"\n\n} >> \"$DIR/log\"\n"
  },
  {
    "path": "app/src/main/cpp/CMakeLists.txt",
    "content": "\n# For more information about using CMake with Android Studio, read the\n# documentation: https://d.android.com/studio/projects/add-native-code.html.\n# For more examples on how to use CMake, see https://github.com/android/ndk-samples.\n\n# Sets the minimum CMake version required for this project.\ncmake_minimum_required(VERSION 3.22.1)\n\n# Declares the project name. The project name can be accessed via ${ PROJECT_NAME},\n# Since this is the top level CMakeLists.txt, the project name is also accessible\n# with ${CMAKE_PROJECT_NAME} (both CMake variables are in-sync within the top level\n# build script scope).\nproject(\"prop_override\")\n\n# Creates and names a library, sets it as either STATIC\n# or SHARED, and provides the relative paths to its source code.\n# You can define multiple libraries, and CMake builds them for you.\n# Gradle automatically packages shared libraries with your APK.\n#\n# In this top level CMakeLists.txt, ${CMAKE_PROJECT_NAME} is used to define\n# the target library name; in the sub-module's CMakeLists.txt, ${PROJECT_NAME}\n# is preferred for the same purpose.\n#\n# In order to load a library into your app from Java/Kotlin, you must call\n# System.loadLibrary() and pass the name of the library defined here;\n# for GameActivity/NativeActivity derived applications, the same library name must be\n# used in the AndroidManifest.xml file.\nadd_library(${CMAKE_PROJECT_NAME} SHARED\n    # List C/C++ source files with relative paths to this CMakeLists.txt.\n        prop_override.cpp)\n\n# Specifies libraries CMake should link to your target library. You\n# can link libraries from various origins, such as libraries defined in this\n# build script, prebuilt third-party libraries, or Android system libraries.\ntarget_link_libraries(${CMAKE_PROJECT_NAME}\n    # List libraries link to the target library\n    android\n    log)\n"
  },
  {
    "path": "app/src/main/cpp/prop_override.cpp",
    "content": "// Library for overriding Android system properties via environment variables.\n//\n// Usage: LD_PRELOAD=prop_override.so PROP_dalvik.vm.heapsize=123M getprop dalvik.vm.heapsize\n// Output: 123M\n#include <string>\n#include <cstring>\n#include <cstdlib>\n#include <dlfcn.h>\n\n// Source: https://android.googlesource.com/platform/system/core/+/100b08a848d018eeb1caa5d5e7c7c2aaac65da15/libcutils/include/cutils/properties.h\n#define PROP_VALUE_MAX 92\n// This is the mangled name of \"android::base::GetProperty\".\n#define GET_PROPERTY_MANGLED_NAME \"_ZN7android4base11GetPropertyERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES9_\"\n\nextern \"C\" typedef int (*property_get_ptr)(const char *, char *, const char *);\ntypedef std::string (*GetProperty_ptr)(const std::string &, const std::string &);\n\nchar *GetPropOverride(const std::string &key) {\n    auto envKey = \"PROP_\" + key;\n\n    return getenv(envKey.c_str());\n}\n\n// See: https://android.googlesource.com/platform/system/core/+/100b08a848d018eeb1caa5d5e7c7c2aaac65da15/libcutils/properties.cpp\nextern \"C\" int property_get(const char *key, char *value, const char *default_value) {\n    auto replacement = GetPropOverride(std::string(key));\n    if (replacement) {\n        int len = strnlen(replacement, PROP_VALUE_MAX);\n\n        strncpy(value, replacement, len);\n        return len;\n    }\n\n    static property_get_ptr original = NULL;\n    if (!original) {\n        // Get the address of the original function.\n        original = reinterpret_cast<property_get_ptr>(dlsym(RTLD_NEXT, \"property_get\"));\n    }\n\n    return original(key, value, default_value);\n}\n\n// Defining android::base::GetProperty ourselves won't work because std::string has a slightly different \"path\" in the NDK version of the C++ standard library.\n// We can get around this by forcing the function to adopt a specific name using the asm keyword.\nstd::string GetProperty(const std::string &, const std::string &) asm(GET_PROPERTY_MANGLED_NAME);\n\n\n// See: https://android.googlesource.com/platform/system/libbase/+/1a34bb67c4f3ba0a1ea6f4f20ac9fe117ba4fe64/properties.cpp\n// This isn't used for the properties we want to override, but property_get is deprecated so that could change in the future.\nstd::string GetProperty(const std::string &key, const std::string &default_value) {\n    auto replacement = GetPropOverride(key);\n    if (replacement) {\n        return std::string(replacement);\n    }\n\n    static GetProperty_ptr original = NULL;\n    if (!original) {\n        original = reinterpret_cast<GetProperty_ptr>(dlsym(RTLD_NEXT, GET_PROPERTY_MANGLED_NAME));\n    }\n\n    return original(key, default_value);\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/DownloaderActivity.kt",
    "content": "package app.revanced.manager\n\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.ViewGroup\nimport android.view.ViewGroup.LayoutParams.MATCH_PARENT\nimport androidx.fragment.app.Fragment\nimport androidx.fragment.app.FragmentActivity\nimport androidx.fragment.app.FragmentContainerView\nimport androidx.fragment.app.commit\nimport app.revanced.manager.domain.repository.DownloaderRepository\nimport org.koin.android.ext.android.inject\n\nclass DownloaderActivity : FragmentActivity() {\n    private val downloaderRepository: DownloaderRepository by inject()\n    private var downloaderPackageName = \"\"\n\n    private val downloaderPkgState\n        get() = downloaderRepository.findPackageByName(downloaderPackageName)\n\n    private var res: Resources? = null\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        val view = FragmentContainerView(this).apply {\n            // The fragment manager requires an ID to work.\n            id = R.id.fragment_container\n        }\n        setContentView(\n            view,\n            ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)\n        )\n\n        downloaderPackageName = intent.getStringExtra(\"DOWNLOADER_NAME\").orEmpty()\n        val fragmentClassName = intent.getStringExtra(\"FRAGMENT_CLASS_NAME\")!!\n        val args = intent.getBundleExtra(\"FRAGMENT_ARGS\")\n\n        res =\n            downloaderPkgState?.context?.createConfigurationContext(super.resources.configuration)?.resources\n\n\n        if (savedInstanceState == null) {\n            @Suppress(\"UNCHECKED_CAST\")\n            val fragmentClass = classLoader!!.loadClass(fragmentClassName) as Class<Fragment>\n\n            supportFragmentManager.commit {\n                setReorderingAllowed(true)\n                add(R.id.fragment_container, fragmentClass, args)\n            }\n        }\n    }\n\n    override fun getClassLoader(): ClassLoader? =\n        downloaderPkgState?.classLoader ?: super.classLoader\n\n    override fun getResources(): Resources? = res ?: super.resources\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/MainActivity.kt",
    "content": "package app.revanced.manager\n\nimport android.os.Bundle\nimport android.os.Parcelable\nimport androidx.activity.compose.setContent\nimport androidx.activity.enableEdgeToEdge\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.compose.animation.ExperimentalAnimationApi\nimport androidx.compose.animation.core.EaseInOutQuad\nimport androidx.compose.animation.core.EaseInOutQuart\nimport androidx.compose.animation.core.EaseOut\nimport androidx.compose.animation.core.tween\nimport androidx.compose.animation.slideInHorizontally\nimport androidx.compose.animation.slideOutHorizontally\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen\nimport androidx.core.view.WindowCompat\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.lifecycleScope\nimport androidx.navigation.NavBackStackEntry\nimport androidx.navigation.NavController\nimport androidx.navigation.compose.NavHost\nimport androidx.navigation.compose.composable\nimport androidx.navigation.compose.navigation\nimport androidx.navigation.compose.rememberNavController\nimport androidx.navigation.toRoute\nimport app.revanced.manager.ui.model.navigation.Announcement\nimport app.revanced.manager.ui.model.navigation.Announcements\nimport app.revanced.manager.ui.model.navigation.AppSelector\nimport app.revanced.manager.ui.model.navigation.BundleInformation\nimport app.revanced.manager.ui.model.navigation.ComplexParameter\nimport app.revanced.manager.ui.model.navigation.Dashboard\nimport app.revanced.manager.ui.model.navigation.InstalledApplicationInfo\nimport app.revanced.manager.ui.model.navigation.Onboarding\nimport app.revanced.manager.ui.model.navigation.Patcher\nimport app.revanced.manager.ui.model.navigation.SelectedApplicationInfo\nimport app.revanced.manager.ui.model.navigation.Settings\nimport app.revanced.manager.ui.model.navigation.Update\nimport app.revanced.manager.ui.screen.AnnouncementScreen\nimport app.revanced.manager.ui.screen.AnnouncementsScreen\nimport app.revanced.manager.ui.screen.AppSelectorScreen\nimport app.revanced.manager.ui.screen.BundleInformationScreen\nimport app.revanced.manager.ui.screen.DashboardScreen\nimport app.revanced.manager.ui.screen.InstalledAppInfoScreen\nimport app.revanced.manager.ui.screen.OnboardingScreen\nimport app.revanced.manager.ui.screen.PatcherScreen\nimport app.revanced.manager.ui.screen.PatchesSelectorScreen\nimport app.revanced.manager.ui.screen.RequiredOptionsScreen\nimport app.revanced.manager.ui.screen.SelectedAppInfoScreen\nimport app.revanced.manager.ui.screen.SettingsScreen\nimport app.revanced.manager.ui.screen.UpdateScreen\nimport app.revanced.manager.ui.screen.settings.AboutSettingsScreen\nimport app.revanced.manager.ui.screen.settings.AdvancedSettingsScreen\nimport app.revanced.manager.ui.screen.settings.ContributorSettingsScreen\nimport app.revanced.manager.ui.screen.settings.DeveloperSettingsScreen\nimport app.revanced.manager.ui.screen.settings.DownloaderInfoScreen\nimport app.revanced.manager.ui.screen.settings.DownloadsSettingsScreen\nimport app.revanced.manager.ui.screen.settings.GeneralSettingsScreen\nimport app.revanced.manager.ui.screen.settings.ImportExportSettingsScreen\nimport app.revanced.manager.ui.screen.settings.LicensesSettingsScreen\nimport app.revanced.manager.ui.screen.settings.update.ChangelogsSettingsScreen\nimport app.revanced.manager.ui.screen.settings.update.UpdatesSettingsScreen\nimport app.revanced.manager.ui.theme.ReVancedManagerTheme\nimport app.revanced.manager.ui.theme.Theme\nimport app.revanced.manager.ui.viewmodel.MainViewModel\nimport app.revanced.manager.ui.viewmodel.SelectedAppInfoViewModel\nimport app.revanced.manager.util.EventEffect\nimport app.revanced.manager.util.deepLinkedComposable\nimport app.revanced.manager.util.navigateSafe\nimport app.revanced.manager.util.popBackStackSafe\nimport app.revanced.manager.util.resetListItemColorsCached\nimport kotlinx.coroutines.launch\nimport org.koin.androidx.compose.koinViewModel\nimport org.koin.core.parameter.parametersOf\nimport org.koin.androidx.viewmodel.ext.android.getViewModel as getActivityViewModel\n\n\nclass MainActivity : AppCompatActivity() {\n    @ExperimentalAnimationApi\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        WindowCompat.setDecorFitsSystemWindows(window, false)\n        enableEdgeToEdge()\n        installSplashScreen()\n\n        val vm: MainViewModel = getActivityViewModel()\n\n        setContent {\n            val theme by vm.prefs.theme.getAsState()\n            val dynamicColor by vm.prefs.dynamicColor.getAsState()\n            val pureBlackTheme by vm.prefs.pureBlackTheme.getAsState()\n\n            LaunchedEffect(theme, dynamicColor, pureBlackTheme) {\n                resetListItemColorsCached()\n            }\n\n            ReVancedManagerTheme(\n                darkTheme = theme == Theme.SYSTEM && isSystemInDarkTheme() || theme == Theme.DARK,\n                dynamicColor = dynamicColor,\n                pureBlackTheme = pureBlackTheme\n            ) {\n                ReVancedManager(vm)\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ReVancedManager(vm: MainViewModel) {\n    val navController = rememberNavController()\n    val completedOnboarding by vm.prefs.completedOnboarding.getAsState()\n    // please dont unmemoize this bahahahah\n    val startDestination = remember {\n        if (completedOnboarding) Dashboard else Onboarding\n    }\n\n    EventEffect(vm.appSelectFlow) { app ->\n        navController.navigateComplex(\n            SelectedApplicationInfo,\n            SelectedApplicationInfo.ViewModelParams(app)\n        )\n    }\n\n    NavHost(\n        navController = navController,\n        startDestination = startDestination,\n        enterTransition = { slideInHorizontally(animationSpec = tween(300, easing = EaseInOutQuad), initialOffsetX = { it }) },\n        exitTransition = { slideOutHorizontally(animationSpec = tween(300, easing = EaseOut), targetOffsetX = { -it / 3 }) },\n        popEnterTransition = { slideInHorizontally(animationSpec = tween(300, easing = EaseInOutQuad), initialOffsetX = { -it / 3 }) },\n        popExitTransition = { slideOutHorizontally(animationSpec = tween(300, easing = EaseOut), targetOffsetX = { it }) }\n    ) {\n        composable<Onboarding> {\n            OnboardingScreen(\n                onFinish = {\n                    navController.navigateSafe(route = Dashboard) {\n                        popUpTo<Onboarding> { inclusive = true }\n                    }\n                },\n                onAppClick = vm::selectApp,\n            )\n        }\n\n        composable<Dashboard> {\n            DashboardScreen(\n                onSettingsClick = { navController.navigateSafe(Settings) },\n                onAppSelectorClick = {\n                    navController.navigateSafe(AppSelector)\n                },\n                onUpdateClick = {\n                    navController.navigateSafe(Update())\n                },\n                onAppClick = { packageName ->\n                    navController.navigateSafe(InstalledApplicationInfo(packageName))\n                },\n                onBundleClick = { uid ->\n                    navController.navigateSafe(BundleInformation(uid))\n                },\n                onPatchableAppClick = vm::selectApp,\n                onStorageSelect = { selectedApp ->\n                    vm.selectApp(selectedApp)\n                },\n                onAnnouncementsClick = {\n                    navController.navigate(Announcements)\n                },\n                onAnnouncementClick = { announcement ->\n                    navController.navigateComplex(Announcement, announcement)\n                }\n            )\n        }\n\n        composable<BundleInformation> {\n            val data = it.toRoute<BundleInformation>()\n\n            BundleInformationScreen(\n                onBackClick = navController::popBackStackSafe,\n                viewModel = koinViewModel { parametersOf(data.uid) }\n            )\n        }\n\n        composable<InstalledApplicationInfo> {\n            val data = it.toRoute<InstalledApplicationInfo>()\n\n            InstalledAppInfoScreen(\n                onPatchClick = vm::selectApp,\n                onBackClick = navController::popBackStackSafe,\n                viewModel = koinViewModel { parametersOf(data.packageName) }\n            )\n        }\n\n        composable<AppSelector> {\n            AppSelectorScreen(\n                onSelect = vm::selectApp,\n                onStorageSelect = vm::selectApp,\n                onBackClick = navController::popBackStackSafe\n            )\n        }\n\n        composable<Patcher> {\n            PatcherScreen(\n                onBackClick = {\n                    navController.navigateSafe(route = Dashboard) {\n                        launchSingleTop = true\n                        popUpTo<Dashboard> {\n                            inclusive = false\n                        }\n                    }\n                },\n                viewModel = koinViewModel { parametersOf(it.getComplexArg<Patcher.ViewModelParams>()) }\n            )\n        }\n\n        composable<Update> {\n            val data = it.toRoute<Update>()\n\n            UpdateScreen(\n                onBackClick = navController::popBackStackSafe,\n                vm = koinViewModel { parametersOf(data.downloadOnScreenEntry) }\n            )\n        }\n\n        composable<Announcements> {\n            AnnouncementsScreen(\n                onBackClick = navController::popBackStack,\n                onAnnouncementClick = { announcement ->\n                    navController.navigateComplex(Announcement, announcement)\n                }\n            )\n        }\n\n        composable<Announcement> {\n            AnnouncementScreen(\n                onBackClick = navController::popBackStack,\n                announcement = it.getComplexArg()\n            )\n        }\n\n        navigation<SelectedApplicationInfo>(startDestination = SelectedApplicationInfo.Main) {\n            composable<SelectedApplicationInfo.Main> {\n                val parentBackStackEntry = navController.navGraphEntry(it)\n                val data =\n                    parentBackStackEntry.getComplexArg<SelectedApplicationInfo.ViewModelParams>()\n                val viewModel =\n                    koinViewModel<SelectedAppInfoViewModel>(viewModelStoreOwner = parentBackStackEntry) {\n                        parametersOf(data)\n                    }\n\n                SelectedAppInfoScreen(\n                    onBackClick = navController::popBackStackSafe,\n                    onPatchClick = {\n                        it.lifecycleScope.launch {\n                            navController.navigateComplex(\n                                Patcher,\n                                viewModel.getPatcherParams()\n                            )\n                        }\n                    },\n                    onPatchSelectorClick = { app, patches, options ->\n                        navController.navigateComplex(\n                            SelectedApplicationInfo.PatchesSelector,\n                            SelectedApplicationInfo.PatchesSelector.ViewModelParams(\n                                app,\n                                patches,\n                                options\n                            )\n                        )\n                    },\n                    onRequiredOptions = { app, patches, options ->\n                        navController.navigateComplex(\n                            SelectedApplicationInfo.RequiredOptions,\n                            SelectedApplicationInfo.PatchesSelector.ViewModelParams(\n                                app,\n                                patches,\n                                options\n                            )\n                        )\n                    },\n                    vm = viewModel\n                )\n            }\n\n            composable<SelectedApplicationInfo.PatchesSelector> {\n                val data =\n                    it.getComplexArg<SelectedApplicationInfo.PatchesSelector.ViewModelParams>()\n                val selectedAppInfoVm = koinViewModel<SelectedAppInfoViewModel>(\n                    viewModelStoreOwner = navController.navGraphEntry(it)\n                )\n\n                PatchesSelectorScreen(\n                    onBackClick = navController::popBackStackSafe,\n                    onSave = { patches, options ->\n                        selectedAppInfoVm.updateConfiguration(patches, options)\n                        navController.popBackStackSafe()\n                    },\n                    onBundleInfoClick = { uid ->\n                        navController.navigateSafe(BundleInformation(uid))\n                    },\n                    viewModel = koinViewModel { parametersOf(data) }\n                )\n            }\n\n            composable<SelectedApplicationInfo.RequiredOptions> {\n                val data =\n                    it.getComplexArg<SelectedApplicationInfo.PatchesSelector.ViewModelParams>()\n                val selectedAppInfoVm = koinViewModel<SelectedAppInfoViewModel>(\n                    viewModelStoreOwner = navController.navGraphEntry(it)\n                )\n\n                RequiredOptionsScreen(\n                    onBackClick = navController::popBackStackSafe,\n                    onContinue = { patches, options ->\n                        selectedAppInfoVm.updateConfiguration(patches, options)\n                        it.lifecycleScope.launch {\n                            navController.navigateComplex(\n                                Patcher,\n                                selectedAppInfoVm.getPatcherParams()\n                            )\n                        }\n                    },\n                    vm = koinViewModel { parametersOf(data) }\n                )\n            }\n        }\n\n        navigation<Settings>(startDestination = Settings.Main) {\n            deepLinkedComposable<Settings.Main>(\"settings\") {\n                SettingsScreen(\n                    onBackClick = navController::popBackStackSafe,\n                    navigate = navController::navigateSafe\n                )\n            }\n\n            deepLinkedComposable<Settings.General>(\"settings/general\") {\n                GeneralSettingsScreen(onBackClick = navController::popBackStackSafe)\n            }\n\n            deepLinkedComposable<Settings.Advanced>(\"settings/advanced\") {\n                AdvancedSettingsScreen(onBackClick = navController::popBackStackSafe)\n            }\n\n            deepLinkedComposable<Settings.Developer>(\"settings/developer\") {\n                DeveloperSettingsScreen(onBackClick = navController::popBackStackSafe)\n            }\n\n            deepLinkedComposable<Settings.Updates>(\"settings/updates\") {\n                UpdatesSettingsScreen(\n                    onBackClick = navController::popBackStackSafe,\n                    onChangelogClick = { navController.navigateSafe(Settings.Changelogs) },\n                    onUpdateClick = { navController.navigateSafe(Update()) }\n                )\n            }\n\n            deepLinkedComposable<Settings.Downloads>(\"settings/downloads\") {\n                DownloadsSettingsScreen(\n                    onBackClick = navController::popBackStackSafe,\n                    onDownloaderClick = { uid ->\n                        navController.navigateSafe(Settings.DownloadersInfo(uid))\n                    }\n                )\n            }\n\n            composable<Settings.DownloadersInfo> {\n                val route = it.toRoute<Settings.DownloadersInfo>()\n                DownloaderInfoScreen(\n                    uid = route.uid,\n                    onBackClick = navController::popBackStackSafe\n                )\n            }\n\n            deepLinkedComposable<Settings.ImportExport>(\"settings/import-export\") {\n                ImportExportSettingsScreen(onBackClick = navController::popBackStackSafe)\n            }\n\n            deepLinkedComposable<Settings.About>(\"about\") {\n                AboutSettingsScreen(\n                    onBackClick = navController::popBackStackSafe,\n                    navigate = navController::navigateSafe\n                )\n            }\n\n            composable<Settings.Changelogs> {\n                ChangelogsSettingsScreen(onBackClick = navController::popBackStackSafe)\n            }\n\n            composable<Settings.Contributors> {\n                ContributorSettingsScreen(onBackClick = navController::popBackStackSafe)\n            }\n\n            composable<Settings.Licenses> {\n                LicensesSettingsScreen(onBackClick = navController::popBackStackSafe)\n            }\n\n        }\n    }\n}\n\n@Composable\nprivate fun NavController.navGraphEntry(entry: NavBackStackEntry) =\n    remember(entry) { getBackStackEntry(entry.destination.parent!!.id) }\n\n// Androidx Navigation does not support storing complex types in route objects, so we have to store them inside the saved state handle of the back stack entry instead.\nprivate fun <T : Parcelable, R : ComplexParameter<T>> NavController.navigateComplex(\n    route: R,\n    data: T\n) {\n    if (currentBackStackEntry?.lifecycle?.currentState == Lifecycle.State.RESUMED) {\n        navigate(route)\n        getBackStackEntry(route).savedStateHandle[\"args\"] = data\n    }\n}\n\nprivate fun <T : Parcelable> NavBackStackEntry.getComplexArg() = savedStateHandle.get<T>(\"args\")!!"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ManagerApplication.kt",
    "content": "package app.revanced.manager\n\nimport android.app.Activity\nimport android.app.Application\nimport android.os.Bundle\nimport android.util.Log\nimport app.revanced.manager.data.platform.Filesystem\nimport app.revanced.manager.di.*\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.repository.DownloadedAppRepository\nimport app.revanced.manager.domain.repository.DownloaderRepository\nimport app.revanced.manager.domain.repository.PatchBundleRepository\nimport app.revanced.manager.util.tag\nimport kotlinx.coroutines.Dispatchers\nimport coil.Coil\nimport coil.ImageLoader\nimport com.topjohnwu.superuser.Shell\nimport com.topjohnwu.superuser.internal.BuilderImpl\nimport kotlinx.coroutines.MainScope\nimport kotlinx.coroutines.launch\nimport me.zhanghai.android.appiconloader.coil.AppIconFetcher\nimport me.zhanghai.android.appiconloader.coil.AppIconKeyer\nimport org.koin.android.ext.android.inject\nimport org.koin.android.ext.koin.androidContext\nimport org.koin.android.ext.koin.androidLogger\nimport org.koin.androidx.workmanager.koin.workManagerFactory\nimport org.koin.core.context.startKoin\n\nclass ManagerApplication : Application() {\n    private val scope = MainScope()\n    private val prefs: PreferencesManager by inject()\n    private val patchBundleRepository: PatchBundleRepository by inject()\n    private val downloaderRepository: DownloaderRepository by inject()\n    private val downloadedAppsRepository: DownloadedAppRepository by inject()\n    private val fs: Filesystem by inject()\n\n    override fun onCreate() {\n        super.onCreate()\n\n        startKoin {\n            androidContext(this@ManagerApplication)\n            androidLogger()\n            workManagerFactory()\n            modules(\n                httpModule,\n                preferencesModule,\n                repositoryModule,\n                serviceModule,\n                managerModule,\n                workerModule,\n                viewModelModule,\n                databaseModule,\n                rootModule,\n                ackpineModule\n            )\n        }\n\n        val pixels = 512\n        Coil.setImageLoader(\n            ImageLoader.Builder(this)\n                .components {\n                    add(AppIconKeyer())\n                    add(AppIconFetcher.Factory(pixels, true, this@ManagerApplication))\n                }\n                .build()\n        )\n\n        val shellBuilder = BuilderImpl.create().setFlags(Shell.FLAG_MOUNT_MASTER)\n        Shell.setDefaultBuilder(shellBuilder)\n\n        scope.launch {\n            prefs.preload()\n        }\n        scope.launch(Dispatchers.Default) {\n            downloaderRepository.reload()\n        }\n        scope.launch(Dispatchers.Default) {\n            arrayOf(patchBundleRepository, downloaderRepository).forEach {\n                with(it) {\n                    reload()\n                    updateCheck()\n                }\n            }\n        }\n        scope.launch(Dispatchers.Default) {\n            downloadedAppsRepository.cleanUp()\n        }\n        registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {\n            private var firstActivityCreated = false\n\n            override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {\n                if (firstActivityCreated) return\n                firstActivityCreated = true\n\n                // We do not want to call onFreshProcessStart() if there is state to restore.\n                // This can happen on system-initiated process death.\n                if (savedInstanceState == null) {\n                    Log.d(tag, \"Fresh process created\")\n                    onFreshProcessStart()\n                } else Log.d(tag, \"System-initiated process death detected\")\n            }\n\n            override fun onActivityStarted(activity: Activity) {}\n            override fun onActivityResumed(activity: Activity) {}\n            override fun onActivityPaused(activity: Activity) {}\n            override fun onActivityStopped(activity: Activity) {}\n            override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}\n            override fun onActivityDestroyed(activity: Activity) {}\n        })\n    }\n\n    private fun onFreshProcessStart() {\n        fs.uiTempDir.apply {\n            deleteRecursively()\n            mkdirs()\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ManagerFileProvider.kt",
    "content": "package app.revanced.manager\n\nimport androidx.core.content.FileProvider\n\nclass ManagerFileProvider : FileProvider()"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/platform/Filesystem.kt",
    "content": "package app.revanced.manager.data.platform\n\nimport android.Manifest\nimport android.app.Application\nimport android.content.Context\nimport android.content.pm.PackageManager\nimport android.os.Build\nimport android.os.Environment\nimport androidx.activity.result.contract.ActivityResultContract\nimport androidx.activity.result.contract.ActivityResultContracts\nimport app.revanced.manager.util.RequestManageStorageContract\nimport java.io.File\nimport java.nio.file.Path\n\nclass Filesystem(private val app: Application) {\n    val contentResolver = app.contentResolver // TODO: move Content Resolver operations to here.\n\n    /**\n     * A directory that gets cleared when the app restarts.\n     * Do not store paths to this directory in a parcel.\n     */\n    val tempDir: File = app.getDir(\"ephemeral\", Context.MODE_PRIVATE).apply {\n        deleteRecursively()\n        mkdirs()\n    }\n\n    /**\n     * A directory for storing temporary files related to UI.\n     * This is the same as [tempDir], but does not get cleared on system-initiated process death.\n     * Paths to this directory can be safely stored in parcels.\n     */\n    val uiTempDir: File = File(app.filesDir, \"ui_ephemeral\").apply { mkdirs() }\n\n    fun externalFilesDir(): Path = Environment.getExternalStorageDirectory().toPath()\n\n    private fun usesManagePermission() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.R\n\n    private val storagePermissionName =\n        if (usesManagePermission()) Manifest.permission.MANAGE_EXTERNAL_STORAGE else Manifest.permission.READ_EXTERNAL_STORAGE\n\n    fun permissionContract(): Pair<ActivityResultContract<String, Boolean>, String> {\n        val contract =\n            if (usesManagePermission()) RequestManageStorageContract() else ActivityResultContracts.RequestPermission()\n        return contract to storagePermissionName\n    }\n\n    fun hasStoragePermission() =\n        if (usesManagePermission()) Environment.isExternalStorageManager() else app.checkSelfPermission(\n            storagePermissionName\n        ) == PackageManager.PERMISSION_GRANTED\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/platform/NetworkInfo.kt",
    "content": "package app.revanced.manager.data.platform\n\nimport android.app.Application\nimport android.net.ConnectivityManager\nimport android.net.NetworkCapabilities\nimport androidx.core.content.getSystemService\n\nclass NetworkInfo(app: Application) {\n    private val connectivityManager = app.getSystemService<ConnectivityManager>()!!\n\n    private fun getCapabilities() = connectivityManager.activeNetwork?.let { connectivityManager.getNetworkCapabilities(it) }\n    fun isConnected() = connectivityManager.activeNetwork != null\n    fun isUnmetered() = getCapabilities()?.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) ?: true\n\n    /**\n     * Returns true if it is safe to download large files.\n     */\n    fun isSafe(ignoreMetered: Boolean) = isConnected() && (ignoreMetered || isUnmetered())\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/redux/Redux.kt",
    "content": "package app.revanced.manager.data.redux\n\nimport android.util.Log\nimport app.revanced.manager.util.tag\nimport kotlinx.coroutines.CancellationException\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.ExperimentalCoroutinesApi\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.sync.Mutex\nimport kotlinx.coroutines.sync.withLock\nimport kotlinx.coroutines.withTimeoutOrNull\n\n// This file implements React Redux-like state management.\n\nclass Store<S>(private val coroutineScope: CoroutineScope, initialState: S) : ActionContext {\n    private val _state = MutableStateFlow(initialState)\n    val state = _state.asStateFlow()\n\n    // Do not touch these without the lock.\n    private var isRunningActions = false\n    private val queueChannel = Channel<Action<S>>(capacity = 10)\n    private val lock = Mutex()\n\n    suspend fun dispatch(action: Action<S>) = lock.withLock {\n        Log.d(tag, \"Dispatching $action\")\n        queueChannel.send(action)\n\n        if (isRunningActions) return@withLock\n        isRunningActions = true\n        coroutineScope.launch {\n            runActions()\n        }\n    }\n\n    @OptIn(ExperimentalCoroutinesApi::class)\n    private suspend fun runActions() {\n        while (true) {\n            val action = withTimeoutOrNull(200L) { queueChannel.receive() }\n            if (action == null) {\n                Log.d(tag, \"Stopping action runner\")\n                lock.withLock {\n                    // New actions may be dispatched during the timeout.\n                    isRunningActions = !queueChannel.isEmpty\n                    if (!isRunningActions) return\n                }\n                continue\n            }\n\n            Log.d(tag, \"Running $action\")\n            _state.value = try {\n                with(action) { this@Store.execute(_state.value) }\n            } catch (c: CancellationException) {\n                // This is done without the lock, but cancellation usually means the store is no longer needed.\n                isRunningActions = false\n                throw c\n            } catch (e: Exception) {\n                action.catch(e)\n                continue\n            }\n        }\n    }\n}\n\ninterface ActionContext\n\ninterface Action<S> {\n    suspend fun ActionContext.execute(current: S): S\n    suspend fun catch(exception: Exception) {\n        Log.e(tag, \"Got exception while executing $this\", exception)\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/AppDatabase.kt",
    "content": "package app.revanced.manager.data.room\n\nimport androidx.room.AutoMigration\nimport androidx.room.Database\nimport androidx.room.DeleteTable\nimport androidx.room.RoomDatabase\nimport androidx.room.TypeConverters\nimport androidx.room.migration.AutoMigrationSpec\nimport app.revanced.manager.data.room.apps.downloaded.DownloadedApp\nimport app.revanced.manager.data.room.apps.downloaded.DownloadedAppDao\nimport app.revanced.manager.data.room.apps.installed.AppliedPatch\nimport app.revanced.manager.data.room.apps.installed.InstalledApp\nimport app.revanced.manager.data.room.apps.installed.InstalledAppDao\nimport app.revanced.manager.data.room.apps.installed.InstalledPatchBundle\nimport app.revanced.manager.data.room.selection.PatchSelection\nimport app.revanced.manager.data.room.selection.SelectedPatch\nimport app.revanced.manager.data.room.selection.SelectionDao\nimport app.revanced.manager.data.room.bundles.PatchBundleDao\nimport app.revanced.manager.data.room.bundles.PatchBundleEntity\nimport app.revanced.manager.data.room.downloader.DownloaderDao\nimport app.revanced.manager.data.room.downloader.DownloaderEntity\nimport app.revanced.manager.data.room.options.Option\nimport app.revanced.manager.data.room.options.OptionDao\nimport app.revanced.manager.data.room.options.OptionGroup\nimport kotlin.random.Random\n\n@Database(\n    entities = [PatchBundleEntity::class, PatchSelection::class, SelectedPatch::class, DownloadedApp::class, InstalledApp::class, AppliedPatch::class, InstalledPatchBundle::class, OptionGroup::class, Option::class, DownloaderEntity::class],\n    version = 3,\n    autoMigrations = [\n        AutoMigration(from = 1, to = 2),\n        AutoMigration(\n            from = 2,\n            to = 3,\n            spec = AppDatabase.DeleteTrustedDownloaders::class\n        )\n    ]\n)\n@TypeConverters(Converters::class)\nabstract class AppDatabase : RoomDatabase() {\n    abstract fun patchBundleDao(): PatchBundleDao\n    abstract fun selectionDao(): SelectionDao\n    abstract fun downloadedAppDao(): DownloadedAppDao\n    abstract fun installedAppDao(): InstalledAppDao\n    abstract fun optionDao(): OptionDao\n    abstract fun downloaderDao(): DownloaderDao\n\n    @DeleteTable(tableName = \"trusted_downloaders\")\n    class DeleteTrustedDownloaders : AutoMigrationSpec\n\n    companion object {\n        fun generateUid() = Random.Default.nextInt()\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/Converters.kt",
    "content": "package app.revanced.manager.data.room\n\nimport androidx.room.TypeConverter\nimport app.revanced.manager.data.room.options.Option.SerializedValue\nimport app.revanced.manager.data.room.sources.Source\nimport java.io.File\n\nclass Converters {\n    @TypeConverter\n    fun sourceFromString(value: String) = Source.from(value)\n\n    @TypeConverter\n    fun sourceToString(value: Source) = value.toString()\n\n    @TypeConverter\n    fun fileFromString(value: String) = File(value)\n\n    @TypeConverter\n    fun fileToString(file: File): String = file.path\n\n    @TypeConverter\n    fun serializedOptionFromString(value: String) = SerializedValue.fromJsonString(value)\n\n    @TypeConverter\n    fun serializedOptionToString(value: SerializedValue) = value.toJsonString()\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/apps/downloaded/DownloadedApp.kt",
    "content": "package app.revanced.manager.data.room.apps.downloaded\n\nimport androidx.room.ColumnInfo\nimport androidx.room.Entity\nimport java.io.File\n\n@Entity(\n    tableName = \"downloaded_app\",\n    primaryKeys = [\"package_name\", \"version\"]\n)\ndata class DownloadedApp(\n    @ColumnInfo(name = \"package_name\") val packageName: String,\n    @ColumnInfo(name = \"version\") val version: String,\n    @ColumnInfo(name = \"directory\") val directory: File,\n    @ColumnInfo(name = \"last_used\") val lastUsed: Long = System.currentTimeMillis()\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/apps/downloaded/DownloadedAppDao.kt",
    "content": "package app.revanced.manager.data.room.apps.downloaded\n\nimport androidx.room.Dao\nimport androidx.room.Delete\nimport androidx.room.Insert\nimport androidx.room.Query\nimport androidx.room.Upsert\nimport kotlinx.coroutines.flow.Flow\n\n@Dao\ninterface DownloadedAppDao {\n    @Query(\"SELECT * FROM downloaded_app\")\n    fun getAllApps(): Flow<List<DownloadedApp>>\n\n    @Query(\"SELECT * FROM downloaded_app WHERE package_name = :packageName AND version = :version\")\n    suspend fun get(packageName: String, version: String): DownloadedApp?\n\n    @Query(\"SELECT * FROM downloaded_app WHERE package_name = :packageName ORDER BY last_used DESC\")\n    suspend fun getAllByPackage(packageName: String): List<DownloadedApp>\n\n    @Query(\"SELECT * FROM downloaded_app WHERE package_name = :packageName ORDER BY last_used DESC LIMIT 1\")\n    suspend fun getLatestByPackage(packageName: String): DownloadedApp?\n\n    @Upsert\n    suspend fun upsert(downloadedApp: DownloadedApp)\n\n    @Query(\"UPDATE downloaded_app SET last_used = :newValue WHERE package_name = :packageName AND version = :version\")\n    suspend fun markUsed(packageName: String, version: String, newValue: Long = System.currentTimeMillis())\n\n    @Delete\n    suspend fun delete(downloadedApps: Collection<DownloadedApp>)\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/apps/installed/AppliedPatch.kt",
    "content": "package app.revanced.manager.data.room.apps.installed\n\nimport android.os.Parcelable\nimport androidx.room.ColumnInfo\nimport androidx.room.Entity\nimport androidx.room.ForeignKey\nimport androidx.room.Index\nimport app.revanced.manager.data.room.bundles.PatchBundleEntity\nimport kotlinx.parcelize.Parcelize\n\n@Parcelize\n@Entity(\n    tableName = \"applied_patch\",\n    primaryKeys = [\"package_name\", \"bundle\", \"patch_name\"],\n    foreignKeys = [\n        ForeignKey(\n            InstalledApp::class,\n            parentColumns = [\"current_package_name\"],\n            childColumns = [\"package_name\"],\n            onDelete = ForeignKey.CASCADE\n        ),\n        ForeignKey(\n            PatchBundleEntity::class,\n            parentColumns = [\"uid\"],\n            childColumns = [\"bundle\"],\n            onDelete = ForeignKey.CASCADE\n        )\n    ],\n    indices = [Index(value = [\"bundle\"], unique = false)]\n)\ndata class AppliedPatch(\n    @ColumnInfo(name = \"package_name\") val packageName: String,\n    @ColumnInfo(name = \"bundle\") val bundle: Int,\n    @ColumnInfo(name = \"patch_name\") val patchName: String\n) : Parcelable"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/apps/installed/InstalledApp.kt",
    "content": "package app.revanced.manager.data.room.apps.installed\n\nimport androidx.room.ColumnInfo\nimport androidx.room.Entity\nimport androidx.room.PrimaryKey\nimport app.revanced.manager.R\n\nenum class InstallType(val stringResource: Int) {\n    DEFAULT(R.string.default_install),\n    MOUNT(R.string.mount_install)\n}\n\n@Entity(tableName = \"installed_app\")\ndata class InstalledApp(\n    @PrimaryKey\n    @ColumnInfo(name = \"current_package_name\") val currentPackageName: String,\n    @ColumnInfo(name = \"original_package_name\") val originalPackageName: String,\n    @ColumnInfo(name = \"version\") val version: String,\n    @ColumnInfo(name = \"install_type\") val installType: InstallType\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/apps/installed/InstalledAppDao.kt",
    "content": "package app.revanced.manager.data.room.apps.installed\n\nimport androidx.room.Dao\nimport androidx.room.Delete\nimport androidx.room.Insert\nimport androidx.room.MapColumn\nimport androidx.room.Query\nimport androidx.room.Transaction\nimport androidx.room.Upsert\nimport kotlinx.coroutines.flow.Flow\n\n@Dao\ninterface InstalledAppDao {\n    @Query(\"SELECT * FROM installed_app\")\n    fun getAll(): Flow<List<InstalledApp>>\n\n    @Query(\"SELECT * FROM installed_app WHERE current_package_name = :packageName\")\n    suspend fun get(packageName: String): InstalledApp?\n\n    @Query(\n        \"SELECT bundle, patch_name FROM applied_patch\" +\n                \" WHERE package_name = :packageName\"\n    )\n    suspend fun getPatchesSelection(packageName: String): Map<@MapColumn(\"bundle\") Int, List<@MapColumn(\n        \"patch_name\"\n    ) String>>\n\n    @Query(\"SELECT * FROM installed_patch_bundle WHERE package_name = :packageName\")\n    suspend fun getInstalledPatchBundles(packageName: String): List<InstalledPatchBundle>\n\n    @Transaction\n    suspend fun upsertApp(\n        installedApp: InstalledApp,\n        appliedPatches: List<AppliedPatch>,\n        patchBundles: List<InstalledPatchBundle>\n    ) {\n        upsertApp(installedApp)\n        deleteAppliedPatches(installedApp.currentPackageName)\n        deleteInstalledPatchBundles(installedApp.currentPackageName)\n        insertAppliedPatches(appliedPatches)\n        insertInstalledPatchBundles(patchBundles)\n    }\n\n    @Upsert\n    suspend fun upsertApp(installedApp: InstalledApp)\n\n    @Insert\n    suspend fun insertAppliedPatches(appliedPatches: List<AppliedPatch>)\n\n    @Insert\n    suspend fun insertInstalledPatchBundles(patchBundles: List<InstalledPatchBundle>)\n\n    @Query(\"DELETE FROM applied_patch WHERE package_name = :packageName\")\n    suspend fun deleteAppliedPatches(packageName: String)\n\n    @Query(\"DELETE FROM installed_patch_bundle WHERE package_name = :packageName\")\n    suspend fun deleteInstalledPatchBundles(packageName: String)\n\n    @Delete\n    suspend fun delete(installedApp: InstalledApp)\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/apps/installed/InstalledPatchBundle.kt",
    "content": "package app.revanced.manager.data.room.apps.installed\n\nimport androidx.room.ColumnInfo\nimport androidx.room.Entity\nimport androidx.room.ForeignKey\n\n@Entity(\n    tableName = \"installed_patch_bundle\",\n    primaryKeys = [\"package_name\", \"bundle_uid\"],\n    foreignKeys = [\n        ForeignKey(\n            InstalledApp::class,\n            parentColumns = [\"current_package_name\"],\n            childColumns = [\"package_name\"],\n            onDelete = ForeignKey.CASCADE\n        )\n    ]\n)\ndata class InstalledPatchBundle(\n    @ColumnInfo(name = \"package_name\") val packageName: String,\n    @ColumnInfo(name = \"bundle_uid\") val bundleUid: Int,\n    @ColumnInfo(name = \"bundle_name\") val bundleName: String,\n    @ColumnInfo(name = \"bundle_version\") val bundleVersion: String?\n)\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/bundles/PatchBundleDao.kt",
    "content": "package app.revanced.manager.data.room.bundles\n\nimport androidx.room.*\nimport app.revanced.manager.data.room.sources.SourceProperties\n\n@Dao\ninterface PatchBundleDao {\n    @Query(\"SELECT * FROM patch_bundles\")\n    suspend fun all(): List<PatchBundleEntity>\n\n    @Query(\"UPDATE patch_bundles SET version = :patches WHERE uid = :uid\")\n    suspend fun updateVersionHash(uid: Int, patches: String?)\n\n    @Query(\"DELETE FROM patch_bundles WHERE uid != 0\")\n    suspend fun purgeCustomBundles()\n\n    @Transaction\n    suspend fun reset() {\n        purgeCustomBundles()\n        updateVersionHash(0, null) // Reset the main source\n    }\n\n    @Query(\"DELETE FROM patch_bundles WHERE uid = :uid\")\n    suspend fun remove(uid: Int)\n\n    @Query(\"SELECT name, version, auto_update, source FROM patch_bundles WHERE uid = :uid\")\n    suspend fun getProps(uid: Int): SourceProperties?\n\n    @Upsert\n    suspend fun upsert(source: PatchBundleEntity)\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/bundles/PatchBundleEntity.kt",
    "content": "package app.revanced.manager.data.room.bundles\n\nimport androidx.room.*\nimport app.revanced.manager.data.room.sources.Source\n\n@Entity(tableName = \"patch_bundles\")\ndata class PatchBundleEntity(\n    @PrimaryKey val uid: Int,\n    @ColumnInfo(name = \"name\") val name: String,\n    @ColumnInfo(name = \"version\") val versionHash: String? = null,\n    @ColumnInfo(name = \"source\") val source: Source,\n    @ColumnInfo(name = \"auto_update\") val autoUpdate: Boolean\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/downloader/DownloaderDao.kt",
    "content": "package app.revanced.manager.data.room.downloader\n\nimport androidx.room.Dao\nimport androidx.room.Query\nimport androidx.room.Transaction\nimport androidx.room.Upsert\nimport app.revanced.manager.data.room.sources.SourceProperties\n\n@Dao\ninterface DownloaderDao {\n    @Query(\"SELECT * FROM downloaders\")\n    suspend fun all(): List<DownloaderEntity>\n\n    @Query(\"UPDATE downloaders SET version = :patches WHERE uid = :uid\")\n    suspend fun updateVersionHash(uid: Int, patches: String?)\n\n    @Query(\"DELETE FROM downloaders WHERE uid != 0\")\n    suspend fun purgeCustomDownloaders()\n\n    @Transaction\n    suspend fun reset() {\n        purgeCustomDownloaders()\n        updateVersionHash(0, null) // Reset the main source\n    }\n\n    @Query(\"DELETE FROM downloaders WHERE uid = :uid\")\n    suspend fun remove(uid: Int)\n\n    @Query(\"SELECT name, version, auto_update, source FROM downloaders WHERE uid = :uid\")\n    suspend fun getProps(uid: Int): SourceProperties?\n\n    @Upsert\n    suspend fun upsert(source: DownloaderEntity)\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/downloader/DownloaderEntity.kt",
    "content": "package app.revanced.manager.data.room.downloader\n\nimport androidx.room.*\nimport app.revanced.manager.data.room.sources.Source\n\n@Entity(tableName = \"downloaders\")\ndata class DownloaderEntity(\n    @PrimaryKey val uid: Int,\n    @ColumnInfo(name = \"name\") val name: String,\n    @ColumnInfo(name = \"version\") val versionHash: String? = null,\n    @ColumnInfo(name = \"source\") val source: Source,\n    @ColumnInfo(name = \"auto_update\") val autoUpdate: Boolean\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/options/Option.kt",
    "content": "package app.revanced.manager.data.room.options\n\nimport androidx.room.ColumnInfo\nimport androidx.room.Entity\nimport androidx.room.ForeignKey\nimport app.revanced.manager.patcher.patch.Option\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.json.Json\nimport kotlinx.serialization.json.JsonElement\nimport kotlinx.serialization.json.JsonNull\nimport kotlinx.serialization.json.JsonPrimitive\nimport kotlinx.serialization.json.add\nimport kotlinx.serialization.json.boolean\nimport kotlinx.serialization.json.buildJsonArray\nimport kotlinx.serialization.json.float\nimport kotlinx.serialization.json.int\nimport kotlinx.serialization.json.jsonArray\nimport kotlinx.serialization.json.jsonPrimitive\nimport kotlinx.serialization.json.long\nimport kotlin.reflect.KClass\nimport kotlin.reflect.KType\nimport kotlin.reflect.typeOf\n\n@Entity(\n    tableName = \"options\",\n    primaryKeys = [\"group\", \"patch_name\", \"key\"],\n    foreignKeys = [ForeignKey(\n        OptionGroup::class,\n        parentColumns = [\"uid\"],\n        childColumns = [\"group\"],\n        onDelete = ForeignKey.CASCADE\n    )]\n)\ndata class Option(\n    @ColumnInfo(name = \"group\") val group: Int,\n    @ColumnInfo(name = \"patch_name\") val patchName: String,\n    @ColumnInfo(name = \"key\") val name: String,\n    // Encoded as Json.\n    @ColumnInfo(name = \"value\") val value: SerializedValue,\n) {\n    @Serializable\n    data class SerializedValue(val raw: JsonElement) {\n        fun toJsonString() = json.encodeToString(raw)\n        fun deserializeFor(option: Option<*>): Any? {\n            if (raw is JsonNull) return null\n\n            val errorMessage = \"Cannot deserialize value as ${option.type}\"\n            try {\n                if (option.type.classifier == List::class) {\n                    val elementType = option.type.arguments.first().type!!\n                    return raw.jsonArray.map { deserializeBasicType(elementType, it.jsonPrimitive) }\n                }\n\n                return deserializeBasicType(option.type, raw.jsonPrimitive)\n            } catch (e: IllegalArgumentException) {\n                throw SerializationException(errorMessage, e)\n            } catch (e: IllegalStateException) {\n                throw SerializationException(errorMessage, e)\n            } catch (e: kotlinx.serialization.SerializationException) {\n                throw SerializationException(errorMessage, e)\n            }\n        }\n\n        companion object {\n            private val json = Json {\n                // Patcher does not forbid the use of these values, so we should support them.\n                allowSpecialFloatingPointValues = true\n            }\n\n            private fun deserializeBasicType(type: KType, value: JsonPrimitive) = when (type) {\n                typeOf<Boolean>() -> value.boolean\n                typeOf<Int>() -> value.int\n                typeOf<Long>() -> value.long\n                typeOf<Float>() -> value.float\n                typeOf<String>() -> value.content.also {\n                    if (!value.isString) throw SerializationException(\n                        \"Expected value to be a string: $value\"\n                    )\n                }\n\n                else -> throw SerializationException(\"Unknown type: $type\")\n            }\n\n            fun fromJsonString(value: String) = SerializedValue(json.decodeFromString(value))\n            fun fromValue(value: Any?) = SerializedValue(when (value) {\n                null -> JsonNull\n                is Number -> JsonPrimitive(value)\n                is Boolean -> JsonPrimitive(value)\n                is String -> JsonPrimitive(value)\n                is List<*> -> buildJsonArray {\n                    var elementClass: KClass<out Any>? = null\n\n                    value.forEach {\n                        when (it) {\n                            null -> throw SerializationException(\"List elements must not be null\")\n                            is Number -> add(it)\n                            is Boolean -> add(it)\n                            is String -> add(it)\n                            else -> throw SerializationException(\"Unknown element type: ${it::class.simpleName}\")\n                        }\n\n                        if (elementClass == null) elementClass = it::class\n                        else if (elementClass != it::class) throw SerializationException(\"List elements must have the same type\")\n                    }\n                }\n\n                else -> throw SerializationException(\"Unknown type: ${value::class.simpleName}\")\n            })\n        }\n    }\n\n    class SerializationException(message: String, cause: Throwable? = null) :\n        Exception(message, cause)\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/options/OptionDao.kt",
    "content": "package app.revanced.manager.data.room.options\n\nimport androidx.room.Dao\nimport androidx.room.Insert\nimport androidx.room.MapColumn\nimport androidx.room.Query\nimport androidx.room.Transaction\nimport kotlinx.coroutines.flow.Flow\n\n@Dao\nabstract class OptionDao {\n    @Transaction\n    @Query(\n        \"SELECT patch_bundle, `group`, patch_name, `key`, value FROM option_groups\" +\n                \" LEFT JOIN options ON uid = options.`group`\" +\n                \" WHERE package_name = :packageName\"\n    )\n    abstract suspend fun getOptions(packageName: String): Map<@MapColumn(\"patch_bundle\") Int, List<Option>>\n\n    @Query(\"SELECT uid FROM option_groups WHERE patch_bundle = :bundleUid AND package_name = :packageName\")\n    abstract suspend fun getGroupId(bundleUid: Int, packageName: String): Int?\n\n    @Query(\"SELECT package_name FROM option_groups\")\n    abstract fun getPackagesWithOptions(): Flow<List<String>>\n\n    @Insert\n    abstract suspend fun createOptionGroup(group: OptionGroup)\n\n    @Query(\"DELETE FROM option_groups WHERE patch_bundle = :uid\")\n    abstract suspend fun resetOptionsForPatchBundle(uid: Int)\n\n    @Query(\"DELETE FROM option_groups WHERE package_name = :packageName\")\n    abstract suspend fun resetOptionsForPackage(packageName: String)\n\n    @Query(\"DELETE FROM option_groups\")\n    abstract suspend fun reset()\n\n    @Insert\n    protected abstract suspend fun insertOptions(patches: List<Option>)\n\n    @Query(\"DELETE FROM options WHERE `group` = :groupId\")\n    protected abstract suspend fun clearGroup(groupId: Int)\n\n    @Transaction\n    open suspend fun updateOptions(options: Map<Int, List<Option>>) =\n        options.forEach { (groupId, options) ->\n            clearGroup(groupId)\n            insertOptions(options)\n        }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/options/OptionGroup.kt",
    "content": "package app.revanced.manager.data.room.options\n\nimport androidx.room.ColumnInfo\nimport androidx.room.Entity\nimport androidx.room.ForeignKey\nimport androidx.room.Index\nimport androidx.room.PrimaryKey\nimport app.revanced.manager.data.room.bundles.PatchBundleEntity\n\n@Entity(\n    tableName = \"option_groups\",\n    foreignKeys = [ForeignKey(\n        PatchBundleEntity::class,\n        parentColumns = [\"uid\"],\n        childColumns = [\"patch_bundle\"],\n        onDelete = ForeignKey.CASCADE\n    )],\n    indices = [Index(value = [\"patch_bundle\", \"package_name\"], unique = true)]\n)\ndata class OptionGroup(\n    @PrimaryKey val uid: Int,\n    @ColumnInfo(name = \"patch_bundle\") val patchBundle: Int,\n    @ColumnInfo(name = \"package_name\") val packageName: String\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/selection/PatchSelection.kt",
    "content": "package app.revanced.manager.data.room.selection\n\nimport androidx.room.ColumnInfo\nimport androidx.room.Entity\nimport androidx.room.ForeignKey\nimport androidx.room.Index\nimport androidx.room.PrimaryKey\nimport app.revanced.manager.data.room.bundles.PatchBundleEntity\n\n@Entity(\n    tableName = \"patch_selections\",\n    foreignKeys = [ForeignKey(\n        PatchBundleEntity::class,\n        parentColumns = [\"uid\"],\n        childColumns = [\"patch_bundle\"],\n        onDelete = ForeignKey.CASCADE\n    )],\n    indices = [Index(value = [\"patch_bundle\", \"package_name\"], unique = true)]\n)\ndata class PatchSelection(\n    @PrimaryKey val uid: Int,\n    @ColumnInfo(name = \"patch_bundle\") val patchBundle: Int,\n    @ColumnInfo(name = \"package_name\") val packageName: String\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/selection/SelectedPatch.kt",
    "content": "package app.revanced.manager.data.room.selection\n\nimport androidx.room.ColumnInfo\nimport androidx.room.Entity\nimport androidx.room.ForeignKey\n\n@Entity(\n    tableName = \"selected_patches\",\n    primaryKeys = [\"selection\", \"patch_name\"],\n    foreignKeys = [ForeignKey(\n        PatchSelection::class,\n        parentColumns = [\"uid\"],\n        childColumns = [\"selection\"],\n        onDelete = ForeignKey.CASCADE\n    )]\n)\ndata class SelectedPatch(\n    @ColumnInfo(name = \"selection\") val selection: Int,\n    @ColumnInfo(name = \"patch_name\") val patchName: String\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/selection/SelectionDao.kt",
    "content": "package app.revanced.manager.data.room.selection\n\nimport androidx.room.Dao\nimport androidx.room.Insert\nimport androidx.room.MapColumn\nimport androidx.room.Query\nimport androidx.room.Transaction\nimport kotlinx.coroutines.flow.Flow\n\n@Dao\nabstract class SelectionDao {\n    @Transaction\n    @Query(\n        \"SELECT patch_bundle, patch_name FROM patch_selections\" +\n                \" LEFT JOIN selected_patches ON uid = selected_patches.selection\" +\n                \" WHERE package_name = :packageName\"\n    )\n    abstract suspend fun getSelectedPatches(packageName: String): Map<@MapColumn(\"patch_bundle\") Int, List<@MapColumn(\n        \"patch_name\"\n    ) String>>\n\n    @Transaction\n    @Query(\n        \"SELECT package_name, patch_name FROM patch_selections\" +\n                \" LEFT JOIN selected_patches ON uid = selected_patches.selection\" +\n                \" WHERE patch_bundle = :bundleUid\"\n    )\n    abstract suspend fun exportSelection(bundleUid: Int): Map<@MapColumn(\"package_name\") String, List<@MapColumn(\n        \"patch_name\"\n    ) String>>\n\n    @Query(\"SELECT uid FROM patch_selections WHERE patch_bundle = :bundleUid AND package_name = :packageName\")\n    abstract suspend fun getSelectionId(bundleUid: Int, packageName: String): Int?\n\n    @Insert\n    abstract suspend fun createSelection(selection: PatchSelection)\n\n    @Query(\"SELECT package_name FROM patch_selections\")\n    abstract fun getPackagesWithSelection(): Flow<List<String>>\n\n    @Query(\"SELECT COUNT(DISTINCT package_name) FROM patch_selections\")\n    abstract fun getSelectionPackageCount(): Flow<Int>\n\n    @Query(\"SELECT COUNT(*) FROM selected_patches\")\n    abstract fun getSelectedPatchCount(): Flow<Int>\n\n    @Query(\"DELETE FROM patch_selections WHERE patch_bundle = :uid\")\n    abstract suspend fun resetForPatchBundle(uid: Int)\n\n    @Query(\"DELETE FROM patch_selections WHERE package_name = :packageName\")\n    abstract suspend fun resetForPackage(packageName: String)\n\n    @Query(\"DELETE FROM patch_selections\")\n    abstract suspend fun reset()\n\n    @Insert\n    protected abstract suspend fun selectPatches(patches: List<SelectedPatch>)\n\n    @Query(\"DELETE FROM selected_patches WHERE selection = :selectionId\")\n    protected abstract suspend fun clearSelection(selectionId: Int)\n\n    @Transaction\n    open suspend fun updateSelections(selections: Map<Int, Set<String>>) =\n        selections.forEach { (selectionUid, patches) ->\n            clearSelection(selectionUid)\n            selectPatches(patches.map { SelectedPatch(selectionUid, it) })\n        }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/data/room/sources/Source.kt",
    "content": "package app.revanced.manager.data.room.sources\n\nimport androidx.room.ColumnInfo\nimport io.ktor.http.Url\n\n\nsealed class Source {\n    object Local : Source() {\n        const val SENTINEL = \"local\"\n\n        override fun toString() = SENTINEL\n    }\n\n    object API : Source() {\n        const val SENTINEL = \"api\"\n\n        override fun toString() = SENTINEL\n    }\n\n    data class Remote(val url: Url) : Source() {\n        override fun toString() = url.toString()\n    }\n\n    companion object {\n        fun from(value: String) = when (value) {\n            Local.SENTINEL -> Local\n            API.SENTINEL -> API\n            else -> Remote(Url(value))\n        }\n    }\n}\n\ndata class SourceProperties(\n    @ColumnInfo(name = \"name\") val name: String,\n    @ColumnInfo(name = \"version\") val versionHash: String? = null,\n    @ColumnInfo(name = \"source\") val source: Source,\n    @ColumnInfo(name = \"auto_update\") val autoUpdate: Boolean\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/di/AckpineModule.kt",
    "content": "package app.revanced.manager.di\n\nimport android.content.Context\nimport org.koin.android.ext.koin.androidContext\nimport org.koin.dsl.module\nimport ru.solrudev.ackpine.installer.PackageInstaller\nimport ru.solrudev.ackpine.uninstaller.PackageUninstaller\n\nval ackpineModule = module {\n    fun provideInstaller(context: Context) = PackageInstaller.getInstance(context)\n    fun provideUninstaller(context: Context) = PackageUninstaller.getInstance(context)\n\n    single {\n        provideInstaller(androidContext())\n    }\n    single {\n        provideUninstaller(androidContext())\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/di/DatabaseModule.kt",
    "content": "package app.revanced.manager.di\n\nimport android.content.Context\nimport androidx.room.Room\nimport app.revanced.manager.data.room.AppDatabase\nimport org.koin.android.ext.koin.androidContext\nimport org.koin.dsl.module\n\nval databaseModule = module {\n    fun provideAppDatabase(context: Context) = Room.databaseBuilder(context, AppDatabase::class.java, \"manager\").build()\n\n    single {\n        provideAppDatabase(androidContext())\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/di/HttpModule.kt",
    "content": "package app.revanced.manager.di\n\nimport android.content.Context\nimport app.revanced.manager.BuildConfig\nimport io.ktor.client.*\nimport io.ktor.client.engine.okhttp.*\nimport io.ktor.client.plugins.HttpTimeout\nimport io.ktor.client.plugins.UserAgent\nimport io.ktor.client.plugins.contentnegotiation.*\nimport io.ktor.serialization.kotlinx.json.*\nimport kotlinx.serialization.json.Json\nimport okhttp3.Cache\nimport okhttp3.Dns\nimport org.koin.android.ext.koin.androidContext\nimport org.koin.core.module.dsl.singleOf\nimport org.koin.dsl.module\nimport java.net.Inet4Address\nimport java.net.InetAddress\n\nval httpModule = module {\n    fun provideHttpClient(context: Context, json: Json) = HttpClient(OkHttp) {\n        engine {\n            config {\n                dns(object : Dns {\n                    override fun lookup(hostname: String): List<InetAddress> {\n                        val addresses = Dns.SYSTEM.lookup(hostname)\n                        return if (hostname == \"raw.githubusercontent.com\") {\n                            addresses.filterIsInstance<Inet4Address>()\n                        } else {\n                            addresses\n                        }\n                    }\n                })\n                cache(Cache(context.cacheDir.resolve(\"cache\").also { it.mkdirs() }, 1024 * 1024 * 100))\n                followRedirects(true)\n                followSslRedirects(true)\n            }\n        }\n        install(ContentNegotiation) {\n            json(json)\n        }\n        install(HttpTimeout) {\n            socketTimeoutMillis = 10000\n        }\n        install(UserAgent) {\n            agent = \"ReVanced-Manager/${BuildConfig.VERSION_CODE}\"\n        }\n    }\n\n    fun provideJson() = Json {\n        encodeDefaults = true\n        isLenient = true\n        ignoreUnknownKeys = true\n    }\n\n    single {\n        provideHttpClient(androidContext(), get())\n    }\n    singleOf(::provideJson)\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/di/ManagerModule.kt",
    "content": "package app.revanced.manager.di\n\nimport app.revanced.manager.domain.manager.KeystoreManager\nimport app.revanced.manager.util.PM\nimport org.koin.core.module.dsl.singleOf\nimport org.koin.dsl.module\n\nval managerModule = module {\n    singleOf(::KeystoreManager)\n    singleOf(::PM)\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/di/PreferencesModule.kt",
    "content": "package app.revanced.manager.di\n\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport org.koin.core.module.dsl.singleOf\nimport org.koin.dsl.module\n\nval preferencesModule = module {\n    singleOf(::PreferencesManager)\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/di/RepositoryModule.kt",
    "content": "package app.revanced.manager.di\n\nimport app.revanced.manager.data.platform.Filesystem\nimport app.revanced.manager.data.platform.NetworkInfo\nimport app.revanced.manager.domain.repository.*\nimport app.revanced.manager.domain.worker.WorkerRepository\nimport app.revanced.manager.network.api.ReVancedAPI\nimport org.koin.core.module.dsl.createdAtStart\nimport org.koin.core.module.dsl.singleOf\nimport org.koin.dsl.module\n\nval repositoryModule = module {\n    singleOf(::ReVancedAPI)\n    singleOf(::ManagerUpdateRepository)\n    singleOf(::AnnouncementRepository)\n    singleOf(::Filesystem) {\n        createdAtStart()\n    }\n    singleOf(::NetworkInfo)\n    singleOf(::PatchSelectionRepository)\n    singleOf(::PatchOptionsRepository)\n    singleOf(::PatchBundleRepository) {\n        // It is best to load patch bundles ASAP\n        createdAtStart()\n    }\n    singleOf(::DownloaderRepository)\n    singleOf(::WorkerRepository)\n    singleOf(::DownloadedAppRepository)\n    singleOf(::InstalledAppRepository)\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/di/RootModule.kt",
    "content": "package app.revanced.manager.di\n\nimport app.revanced.manager.domain.installer.RootInstaller\nimport org.koin.core.module.dsl.singleOf\nimport org.koin.dsl.module\n\nval rootModule = module {\n    singleOf(::RootInstaller)\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/di/ServiceModule.kt",
    "content": "package app.revanced.manager.di\n\nimport app.revanced.manager.network.service.HttpService\nimport org.koin.core.module.dsl.singleOf\nimport org.koin.dsl.module\n\nval serviceModule = module {\n    singleOf(::HttpService)\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/di/ViewModelModule.kt",
    "content": "package app.revanced.manager.di\n\nimport app.revanced.manager.ui.viewmodel.*\nimport org.koin.core.module.dsl.*\nimport org.koin.dsl.module\n\nval viewModelModule = module {\n    viewModelOf(::MainViewModel)\n    viewModelOf(::OnboardingViewModel)\n    viewModelOf(::DashboardViewModel)\n    viewModelOf(::SelectedAppInfoViewModel)\n    viewModelOf(::PatchesSelectorViewModel)\n    viewModelOf(::GeneralSettingsViewModel)\n    viewModelOf(::AdvancedSettingsViewModel)\n    viewModelOf(::AppSelectorViewModel)\n    viewModelOf(::PatcherViewModel)\n    viewModelOf(::UpdateViewModel)\n    viewModelOf(::AnnouncementsViewModel)\n    viewModelOf(::ChangelogsViewModel)\n    viewModelOf(::ImportExportViewModel)\n    viewModelOf(::AboutViewModel)\n    viewModelOf(::DeveloperOptionsViewModel)\n    viewModelOf(::ContributorViewModel)\n    viewModelOf(::DownloadsViewModel)\n    viewModelOf(::InstalledAppsViewModel)\n    viewModelOf(::InstalledAppInfoViewModel)\n    viewModelOf(::UpdatesSettingsViewModel)\n    viewModelOf(::BundleListViewModel)\n    viewModelOf(::BundleInformationViewModel)\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/di/WorkerModule.kt",
    "content": "package app.revanced.manager.di\n\nimport app.revanced.manager.patcher.worker.PatcherWorker\nimport org.koin.androidx.workmanager.dsl.workerOf\nimport org.koin.dsl.module\n\nval workerModule = module {\n    workerOf(::PatcherWorker)\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/installer/RootInstaller.kt",
    "content": "package app.revanced.manager.domain.installer\n\nimport android.app.Application\nimport android.content.ComponentName\nimport android.content.Intent\nimport android.content.ServiceConnection\nimport android.os.IBinder\nimport app.revanced.manager.IRootSystemService\nimport app.revanced.manager.service.ManagerRootService\nimport app.revanced.manager.util.PM\nimport com.topjohnwu.superuser.Shell\nimport com.topjohnwu.superuser.ipc.RootService\nimport com.topjohnwu.superuser.nio.FileSystemManager\nimport kotlinx.coroutines.CompletableDeferred\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.time.withTimeoutOrNull\nimport kotlinx.coroutines.withContext\nimport java.io.File\nimport java.time.Duration\n\nclass RootInstaller(\n    private val app: Application,\n    private val pm: PM\n) : ServiceConnection {\n    private var remoteFS = CompletableDeferred<FileSystemManager>()\n\n    override fun onServiceConnected(name: ComponentName?, service: IBinder?) {\n        val ipc = IRootSystemService.Stub.asInterface(service)\n        val binder = ipc.fileSystemService\n\n        remoteFS.complete(FileSystemManager.getRemote(binder))\n    }\n\n    override fun onServiceDisconnected(name: ComponentName?) {\n        remoteFS = CompletableDeferred()\n    }\n\n    private suspend fun awaitRemoteFS(): FileSystemManager {\n        if (remoteFS.isActive) {\n            withContext(Dispatchers.Main) {\n                val intent = Intent(app, ManagerRootService::class.java)\n                RootService.bind(intent, this@RootInstaller)\n            }\n        }\n\n        return withTimeoutOrNull(Duration.ofSeconds(20L)) {\n            remoteFS.await()\n        } ?: throw RootServiceException()\n    }\n\n    private suspend fun getShell() = with(CompletableDeferred<Shell>()) {\n        Shell.getShell(::complete)\n\n        await()\n    }\n\n    suspend fun execute(vararg commands: String): Shell.Result {\n        val stdout = mutableListOf<String>()\n        val stderr = mutableListOf<String>()\n        return getShell().newJob().add(*commands).to(stdout, stderr).exec()\n    }\n\n    fun hasRootAccess() = Shell.isAppGrantedRoot() ?: false\n\n    fun isDeviceRooted() = System.getenv(\"PATH\")?.split(\":\")?.any { path ->\n        File(path, \"su\").canExecute()\n    } ?: false\n\n    suspend fun isAppInstalled(packageName: String) =\n        awaitRemoteFS().getFile(\"$modulesPath/$packageName-revanced\").exists()\n\n    suspend fun isAppMounted(packageName: String) = withContext(Dispatchers.IO) {\n        pm.getPackageInfo(packageName)?.applicationInfo?.sourceDir?.let {\n            execute(\"mount | grep \\\"$it\\\"\").isSuccess\n        } ?: false\n    }\n\n    suspend fun mount(packageName: String) {\n        if (isAppMounted(packageName)) return\n\n        withContext(Dispatchers.IO) {\n            val stockAPK = pm.getPackageInfo(packageName)?.applicationInfo?.sourceDir\n                ?: throw Exception(\"Failed to load application info\")\n            val patchedAPK = \"$modulesPath/$packageName-revanced/$packageName.apk\"\n\n            execute(\"mount -o bind \\\"$patchedAPK\\\" \\\"$stockAPK\\\"\").assertSuccess(\"Failed to mount APK\")\n        }\n    }\n\n    suspend fun unmount(packageName: String) {\n        if (!isAppMounted(packageName)) return\n\n        withContext(Dispatchers.IO) {\n            val stockAPK = pm.getPackageInfo(packageName)?.applicationInfo?.sourceDir\n                ?: throw Exception(\"Failed to load application info\")\n\n            execute(\"umount -l \\\"$stockAPK\\\"\").assertSuccess(\"Failed to unmount APK\")\n        }\n    }\n\n    suspend fun install(\n        patchedAPK: File,\n        stockAPK: File?,\n        packageName: String,\n        version: String,\n        label: String\n    ) = withContext(Dispatchers.IO) {\n        val remoteFS = awaitRemoteFS()\n        val assets = app.assets\n        val modulePath = \"$modulesPath/$packageName-revanced\"\n\n        unmount(packageName)\n\n        stockAPK?.let { stockApp ->\n            // TODO: get user id programmatically\n            execute(\"pm uninstall -k --user 0 $packageName\")\n\n            execute(\"pm install -r -d --user 0 \\\"${stockApp.absolutePath}\\\"\")\n                .assertSuccess(\"Failed to install stock app\")\n        }\n\n        remoteFS.getFile(modulePath).apply {\n            if (!mkdirs() && !exists()) {\n                throw Exception(\"Failed to create module directory\")\n            }\n        }\n\n        listOf(\n            \"service.sh\",\n            \"module.prop\",\n        ).forEach { file ->\n            assets.open(\"root/$file\").use { inputStream ->\n                remoteFS.getFile(\"$modulePath/$file\").newOutputStream()\n                    .use { outputStream ->\n                        val content = String(inputStream.readBytes())\n                            .replace(\"__PKG_NAME__\", packageName)\n                            .replace(\"__VERSION__\", version)\n                            .replace(\"__LABEL__\", label)\n                            .toByteArray()\n\n                        outputStream.write(content)\n                    }\n            }\n        }\n\n        \"$modulePath/$packageName.apk\".let { apkPath ->\n            remoteFS.getFile(patchedAPK.absolutePath)\n                .also { if (!it.exists()) throw Exception(\"File doesn't exist\") }\n                .newInputStream().use { inputStream ->\n                    remoteFS.getFile(apkPath).newOutputStream().use { outputStream ->\n                        inputStream.copyTo(outputStream)\n                    }\n                }\n\n            execute(\n                \"chmod 644 $apkPath\",\n                \"chown system:system $apkPath\",\n                \"chcon u:object_r:apk_data_file:s0 $apkPath\",\n                \"chmod +x $modulePath/service.sh\"\n            ).assertSuccess(\"Failed to set file permissions\")\n        }\n    }\n\n    suspend fun uninstall(packageName: String) {\n        val remoteFS = awaitRemoteFS()\n        if (isAppMounted(packageName))\n            unmount(packageName)\n\n        remoteFS.getFile(\"$modulesPath/$packageName-revanced\").deleteRecursively()\n            .also { if (!it) throw Exception(\"Failed to delete files\") }\n    }\n\n    companion object {\n        const val modulesPath = \"/data/adb/modules\"\n\n        private fun Shell.Result.assertSuccess(errorMessage: String) {\n            if (!isSuccess) {\n                throw ShellCommandException(\n                    errorMessage,\n                    code,\n                    out,\n                    err\n                )\n            }\n        }\n    }\n}\n\nclass ShellCommandException(\n    val userMessage: String,\n    val exitCode: Int,\n    val stdout: List<String>,\n    val stderr: List<String>\n) : Exception(format(userMessage, exitCode, stdout, stderr)) {\n    companion object {\n        private fun format(\n            message: String,\n            exitCode: Int,\n            stdout: List<String>,\n            stderr: List<String>\n        ): String =\n            buildString {\n                appendLine(message)\n                appendLine(\"Exit code: $exitCode\")\n\n                val output = stdout.filter { it.isNotBlank() }\n                val errors = stderr.filter { it.isNotBlank() }\n\n                if (output.isNotEmpty()) {\n                    appendLine(\"stdout:\")\n                    output.forEach(::appendLine)\n                }\n                if (errors.isNotEmpty()) {\n                    appendLine(\"stderr:\")\n                    errors.forEach(::appendLine)\n                }\n            }\n    }\n}\n\nclass RootServiceException : Exception(\"Root not available\")"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/manager/KeystoreManager.kt",
    "content": "package app.revanced.manager.domain.manager\n\nimport android.app.Application\nimport android.content.Context\nimport app.revanced.library.ApkSigner\nimport app.revanced.library.ApkUtils\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.withContext\nimport java.io.ByteArrayInputStream\nimport java.io.File\nimport java.io.InputStream\nimport java.io.OutputStream\nimport java.nio.file.Files\nimport java.security.UnrecoverableKeyException\nimport java.util.Date\nimport kotlin.time.Duration.Companion.days\n\nclass KeystoreManager(app: Application, private val prefs: PreferencesManager) {\n    companion object Constants {\n        /**\n         * Default alias and password for the keystore.\n         */\n        const val DEFAULT = \"ReVanced\"\n        private val eightYearsFromNow get() = Date(System.currentTimeMillis() + (365.days * 8).inWholeMilliseconds * 24)\n    }\n\n    private val keystorePath =\n        app.getDir(\"signing\", Context.MODE_PRIVATE).resolve(\"manager.keystore\")\n\n    private suspend fun updatePrefs(alias: String, pass: String) = prefs.edit {\n        prefs.keystoreAlias.value = alias\n        prefs.keystorePass.value = pass\n    }\n\n    private suspend fun signingDetails(path: File = keystorePath) = ApkUtils.KeyStoreDetails(\n        keyStore = path,\n        keyStorePassword = null,\n        alias = prefs.keystoreAlias.get(),\n        password = prefs.keystorePass.get()\n    )\n\n    suspend fun sign(input: File, output: File) = withContext(Dispatchers.Default) {\n        ApkUtils.signApk(input, output, prefs.keystoreAlias.get(), signingDetails())\n    }\n\n    suspend fun regenerate() = withContext(Dispatchers.Default) {\n        val keyCertPair = ApkSigner.newPrivateKeyCertificatePair(\n            prefs.keystoreAlias.get(),\n            eightYearsFromNow\n        )\n        val ks = ApkSigner.newKeyStore(\n            setOf(\n                ApkSigner.KeyStoreEntry(\n                    DEFAULT, DEFAULT, keyCertPair\n                )\n            )\n        )\n        withContext(Dispatchers.IO) {\n            keystorePath.outputStream().use {\n                ks.store(it, null)\n            }\n        }\n\n        updatePrefs(DEFAULT, DEFAULT)\n    }\n\n    suspend fun import(alias: String, pass: String, keystore: InputStream): Boolean {\n        val keystoreData = withContext(Dispatchers.IO) { keystore.readBytes() }\n\n        try {\n            val ks = ApkSigner.readKeyStore(ByteArrayInputStream(keystoreData), null)\n\n            ApkSigner.readPrivateKeyCertificatePair(ks, alias, pass)\n        } catch (_: UnrecoverableKeyException) {\n            return false\n        } catch (_: IllegalArgumentException) {\n            return false\n        }\n\n        withContext(Dispatchers.IO) {\n            Files.write(keystorePath.toPath(), keystoreData)\n        }\n\n        updatePrefs(alias, pass)\n        return true\n    }\n\n    fun hasKeystore() = keystorePath.exists()\n\n    suspend fun export(target: OutputStream) {\n        withContext(Dispatchers.IO) {\n            Files.copy(keystorePath.toPath(), target)\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt",
    "content": "package app.revanced.manager.domain.manager\n\nimport android.content.Context\nimport app.revanced.manager.domain.manager.base.BasePreferencesManager\nimport app.revanced.manager.ui.theme.Theme\nimport app.revanced.manager.util.isDebuggable\n\nclass PreferencesManager(\n    context: Context\n) : BasePreferencesManager(context, \"settings\") {\n    val dynamicColor = booleanPreference(\"dynamic_color\", true)\n    val pureBlackTheme = booleanPreference(\"pure_black_theme\", false)\n    val theme = enumPreference(\"theme\", Theme.SYSTEM)\n\n    val api = stringPreference(\"api_url\", \"https://api.revanced.app\")\n\n    val useProcessRuntime = booleanPreference(\"use_process_runtime\", false)\n    val patcherProcessMemoryLimit = intPreference(\"process_runtime_memory_limit\", 700)\n\n    val keystoreAlias = stringPreference(\"keystore_alias\", KeystoreManager.DEFAULT)\n    val keystorePass = stringPreference(\"keystore_pass\", KeystoreManager.DEFAULT)\n\n    val completedOnboarding = booleanPreference(\"completed_onboarding\", false)\n    val readAnnouncements = longSetPreference(\"read_announcements\", emptySet())\n    val selectedAnnouncementTags = stringSetPreference(\"selected_announcement_tags\", setOf(\"revanced\", \"manager\"))\n    val managerAutoUpdates = booleanPreference(\"manager_auto_updates\", false)\n    val showManagerUpdateDialogOnLaunch = booleanPreference(\"show_manager_update_dialog_on_launch\", true)\n    val useManagerPrereleases = booleanPreference(\"manager_prereleases\", false)\n    val usePatchesPrereleases = booleanPreference(\"patches_prereleases\", false)\n    val useDownloaderPrerelease = booleanPreference(\"downloader_prereleases\", false)\n\n    val disablePatchVersionCompatCheck = booleanPreference(\"disable_patch_version_compatibility_check\", false)\n    val disableSelectionWarning = booleanPreference(\"disable_selection_warning\", false)\n    val disableUniversalPatchCheck = booleanPreference(\"disable_patch_universal_check\", false)\n    val suggestedVersionSafeguard = booleanPreference(\"suggested_version_safeguard\", true)\n\n    val showDeveloperSettings = booleanPreference(\"show_developer_settings\", context.isDebuggable)\n\n    val allowMeteredNetworks = booleanPreference(\"allow_metered_networks\", false)\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/manager/SourceManager.kt",
    "content": "package app.revanced.manager.domain.manager\n\nimport android.app.Application\nimport android.util.Log\nimport androidx.annotation.StringRes\nimport app.revanced.manager.data.platform.NetworkInfo\nimport app.revanced.manager.data.redux.Action\nimport app.revanced.manager.data.redux.ActionContext\nimport app.revanced.manager.data.redux.Store\nimport app.revanced.manager.data.room.AppDatabase.Companion.generateUid\nimport app.revanced.manager.data.room.sources.Source as SourceInfo\nimport app.revanced.manager.data.room.sources.SourceProperties\nimport app.revanced.manager.domain.sources.APISource\nimport app.revanced.manager.domain.sources.LocalSource\nimport app.revanced.manager.domain.sources.RemoteSource\nimport app.revanced.manager.domain.sources.Source\nimport app.revanced.manager.util.simpleMessage\nimport app.revanced.manager.util.tag\nimport app.revanced.manager.util.toast\nimport kotlinx.collections.immutable.PersistentMap\nimport kotlinx.collections.immutable.persistentMapOf\nimport kotlinx.collections.immutable.toPersistentMap\nimport kotlinx.coroutines.CancellationException\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\nimport kotlinx.coroutines.coroutineScope\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.asStateFlow\nimport kotlinx.coroutines.withContext\nimport org.koin.core.component.KoinComponent\nimport org.koin.core.component.inject\nimport java.io.File\nimport java.io.InputStream\nimport kotlin.collections.component1\nimport kotlin.collections.component2\nimport kotlin.collections.set\n\n/**\n * Abstraction for managing a source system. Used by [app.revanced.manager.domain.repository.PatchBundleRepository] and [app.revanced.manager.domain.repository.DownloaderRepository].\n */\nabstract class SourceManager<DB, LOADED, OUTPUT>(\n    initial: OUTPUT,\n    protected val sourceDir: File\n) : KoinComponent {\n    protected val app: Application by inject()\n    protected val prefs: PreferencesManager by inject()\n    protected val networkInfo: NetworkInfo by inject()\n\n    protected abstract val defaultSource: DB\n\n    protected abstract suspend fun dbGetAll(): List<DB>\n    protected abstract suspend fun dbGetProps(uid: Int): SourceProperties?\n    protected abstract suspend fun dbUpsert(entity: DB)\n    protected abstract suspend fun dbRemove(uid: Int)\n    protected abstract suspend fun dbReset()\n\n    protected abstract fun loadEntity(entity: DB): Source<LOADED>\n    protected abstract fun entityFromProps(uid: Int, props: SourceProperties): DB\n\n    protected abstract fun uidOf(entity: DB): Int\n    protected abstract fun realNameOf(loaded: LOADED): String?\n\n    @get:StringRes\n    protected abstract val updateUnavailable: Int\n    @get:StringRes\n    protected abstract val updateSuccess: Int\n    @get:StringRes\n    protected abstract val updateFailed: Int\n    @get:StringRes\n    protected abstract val replaceFail: Int\n\n    protected abstract suspend fun loadDataFromSources(sources: MutableMap<Int, Source<LOADED>>): OUTPUT\n\n    private val _updateError = MutableStateFlow<Throwable?>(null)\n    val updateError = _updateError.asStateFlow()\n\n    private val _apiOutageError = MutableStateFlow<Throwable?>(null)\n    val apiOutageError = _apiOutageError.asStateFlow()\n\n    protected val store =\n        Store(CoroutineScope(Dispatchers.Default), State<LOADED, OUTPUT>(data = initial))\n\n    protected suspend inline fun dispatchAction(\n        name: String,\n        crossinline block: suspend ActionContext.(current: State<LOADED, OUTPUT>) -> State<LOADED, OUTPUT>\n    ) {\n        store.dispatch(object : Action<State<LOADED, OUTPUT>> {\n            override suspend fun ActionContext.execute(current: State<LOADED, OUTPUT>) =\n                block(current)\n\n            override fun toString() = name\n        })\n    }\n\n    /**\n     * Performs a reload. Do not call this outside of a store action.\n     */\n    protected suspend fun doReload(): State<LOADED, OUTPUT> {\n        val entities = loadFromDb().onEach {\n            Log.d(tag, \"Source: $it\")\n        }\n\n        val sources = entities\n            .associateTo(mutableMapOf()) { uidOf(it) to loadEntity(it) }\n        sources.forEach syncName@{ (uid, src) ->\n            val newName = src.loaded?.let(::realNameOf).takeIf { it != src.name }\n                ?: return@syncName\n\n            updateDb(uid) { it.copy(name = newName) }\n            sources[uid] = src.copy(name = newName)\n        }\n\n        val data = loadDataFromSources(sources)\n        return State(sources.toPersistentMap(), data)\n    }\n\n    suspend fun reload() = dispatchAction(\"Full reload\") {\n        doReload()\n    }\n\n    private suspend fun loadFromDb(): List<DB> {\n        val all = dbGetAll()\n        if (all.isEmpty()) {\n            dbUpsert(defaultSource)\n            return listOf(defaultSource)\n        }\n\n        return all\n    }\n\n    private suspend fun createEntity(\n        name: String,\n        source: SourceInfo,\n        autoUpdate: Boolean = false\n    ) =\n        entityFromProps(\n            uid = generateUid(),\n            SourceProperties(\n                name = name,\n                versionHash = null,\n                source = source,\n                autoUpdate = autoUpdate,\n            )\n        ).also {\n            dbUpsert(it)\n        }\n\n    /**\n     * Updates a source in the database. Do not use this outside an action.\n     */\n    private suspend fun updateDb(\n        uid: Int,\n        block: (SourceProperties) -> SourceProperties\n    ) {\n        val previous = dbGetProps(uid)!!\n        val new = block(previous)\n        dbUpsert(\n            entityFromProps(\n                uid = uid,\n                SourceProperties(\n                    name = new.name,\n                    versionHash = new.versionHash,\n                    source = new.source,\n                    autoUpdate = new.autoUpdate,\n                )\n            )\n        )\n    }\n\n    protected fun directoryOf(uid: Int) = sourceDir.resolve(uid.toString()).also { it.mkdirs() }\n\n    suspend fun reset() = dispatchAction(\"Reset\") { state ->\n        dbReset()\n        state.sources.keys.forEach { directoryOf(it).deleteRecursively() }\n        doReload()\n    }\n\n    suspend fun remove(vararg sources: Source<LOADED>) =\n        dispatchAction(\"Remove (${sources.map { it.uid }.joinToString(\",\")})\") { state ->\n            val currentSources = state.sources.toMutableMap()\n            sources.forEach {\n                if (it.isDefault) return@forEach\n\n                dbRemove(it.uid)\n                directoryOf(it.uid).deleteRecursively()\n                currentSources.remove(it.uid)\n            }\n\n            val data = loadDataFromSources(currentSources)\n            State(currentSources.toPersistentMap(), data)\n        }\n\n    suspend fun createLocal(createStream: suspend () -> InputStream) =\n        dispatchAction(\"Add local\") {\n            val entity = createEntity(\"\", SourceInfo.Local)\n            with(loadEntity(entity) as LocalSource<LOADED>) {\n                try {\n                    createStream().use { patches -> replace(patches) }\n                } catch (e: Exception) {\n                    if (e is CancellationException) throw e\n                    Log.e(tag, \"Got exception while creating local source\", e)\n                    withContext(Dispatchers.Main) {\n                        app.toast(app.getString(replaceFail, e.simpleMessage()))\n                    }\n\n                    deleteLocalFile()\n                }\n            }\n\n            doReload()\n        }\n\n    suspend fun createRemote(url: String, autoUpdate: Boolean) =\n        dispatchAction(\"Add remote ($url)\") { state ->\n            val entity = createEntity(\"\", SourceInfo.from(url), autoUpdate)\n            val src = loadEntity(entity) as RemoteSource<LOADED>\n            update(src, force = true)\n            state.copy(sources = state.sources.put(src.uid, src))\n        }\n\n    suspend fun reloadApiSources() = dispatchAction(\"Reload API sources\") {\n        this@SourceManager.store.state.value.sources.values.filterIsInstance<APISource<LOADED>>()\n            .forEach { src ->\n                with(src) { deleteLocalFile() }\n                updateDb(src.uid) { it.copy(versionHash = null) }\n            }\n\n        doReload()\n    }\n\n    suspend fun RemoteSource<LOADED>.setAutoUpdate(value: Boolean) =\n        dispatchAction(\"Set auto update ($name, $value)\") { state ->\n            updateDb(uid) { it.copy(autoUpdate = value) }\n            val newSrc = (state.sources[uid] as? RemoteSource<LOADED>)?.copy(autoUpdate = value)\n                ?: return@dispatchAction state\n\n            state.copy(sources = state.sources.put(uid, newSrc))\n        }\n\n    suspend fun update(\n        vararg sources: RemoteSource<LOADED>,\n        showToast: Boolean = false,\n        force: Boolean = false\n    ) {\n        val uids = sources.map { it.uid }.toSet()\n        store.dispatch(Update(showToast = showToast, force = force) { it.uid in uids })\n    }\n\n    suspend fun redownloadRemote() =\n        store.dispatch(Update(force = true, redownload = true))\n\n    /**\n     * Updates all sources that should be automatically updated.\n     */\n    suspend fun updateCheck() =\n        store.dispatch(Update(force = prefs.allowMeteredNetworks.get()) { it.autoUpdate })\n\n    private inner class Update(\n        private val force: Boolean = false,\n        private val redownload: Boolean = false,\n        private val showToast: Boolean = false,\n        private val predicate: (source: RemoteSource<LOADED>) -> Boolean = { true },\n    ) : Action<State<LOADED, OUTPUT>> {\n        private var attemptedMainApiUpdate = false\n\n        private suspend fun toast(@StringRes id: Int, vararg args: Any?) =\n            withContext(Dispatchers.Main) { app.toast(app.getString(id, *args)) }\n\n        override fun toString() = if (redownload) \"Redownload remote sources\" else \"Update check\"\n\n        override suspend fun ActionContext.execute(\n            current: State<LOADED, OUTPUT>\n        ) = coroutineScope {\n            // if (!networkInfo.isSafe(force)) {\n            //     Log.d(tag, \"Skipping update check because the network is down or metered.\")\n            //     return@coroutineScope current\n            // }\n\n            val updated = current.sources.values\n                .filterIsInstance<RemoteSource<LOADED>>()\n                .filter { predicate(it) }\n                .also { targets ->\n                    attemptedMainApiUpdate = targets.any { it.uid == 0 && it is APISource<*> }\n                }\n                .map {\n                    async {\n                        Log.d(tag, \"Updating: ${it.name}\")\n\n                        val newVersion = with(it) {\n                            if (redownload) downloadLatest() else update()\n                        } ?: return@async null\n\n                        it to newVersion\n                    }\n                }\n                .awaitAll()\n                .filterNotNull()\n                .toMap()\n            if (updated.isEmpty()) {\n                if (showToast) toast(updateUnavailable)\n                return@coroutineScope current\n            }\n\n            updated.forEach { (src, newVersionHash) ->\n                val name = src.loaded?.let(::realNameOf) ?: src.name\n\n                updateDb(src.uid) {\n                    it.copy(versionHash = newVersionHash, name = name)\n                }\n            }\n\n            if (showToast) toast(updateSuccess)\n            _updateError.value = null\n            if (attemptedMainApiUpdate) _apiOutageError.value = null\n            doReload()\n        }\n\n        override suspend fun catch(exception: Exception) {\n            Log.e(tag, \"Failed to update\", exception)\n            _updateError.value = exception\n            if (attemptedMainApiUpdate) _apiOutageError.value = exception\n            toast(updateFailed, exception.simpleMessage())\n        }\n    }\n\n    data class State<LOADED, OUTPUT>(\n        val sources: PersistentMap<Int, Source<LOADED>> = persistentMapOf(),\n        val data: OUTPUT\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/manager/base/BasePreferencesManager.kt",
    "content": "package app.revanced.manager.domain.manager.base\n\nimport android.content.Context\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.datastore.core.DataStore\nimport androidx.datastore.preferences.core.*\nimport androidx.datastore.preferences.preferencesDataStore\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport app.revanced.manager.domain.manager.base.BasePreferencesManager.Companion.editor\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.runBlocking\n\nabstract class BasePreferencesManager(private val context: Context, name: String) {\n    private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = name)\n    protected val dataStore get() = context.dataStore\n\n    suspend fun preload() {\n        dataStore.data.first()\n    }\n\n    suspend fun edit(block: EditorContext.() -> Unit) = dataStore.editor(block)\n\n    protected fun stringPreference(key: String, default: String) =\n        StringPreference(dataStore, key, default)\n\n    protected fun stringSetPreference(key: String, default: Set<String>) =\n        StringSetPreference(dataStore, key, default)\n\n    protected fun longSetPreference(key: String, default: Set<Long>) =\n        LongSetPreference(dataStore, key, default)\n\n    protected fun booleanPreference(key: String, default: Boolean) =\n        BooleanPreference(dataStore, key, default)\n\n    protected fun intPreference(key: String, default: Int) = IntPreference(dataStore, key, default)\n\n    protected fun floatPreference(key: String, default: Float) =\n        FloatPreference(dataStore, key, default)\n\n    protected inline fun <reified E : Enum<E>> enumPreference(\n        key: String,\n        default: E\n    ) = EnumPreference(dataStore, key, default, enumValues())\n\n    companion object {\n        suspend inline fun DataStore<Preferences>.editor(crossinline block: EditorContext.() -> Unit) {\n            edit {\n                EditorContext(it).run(block)\n            }\n        }\n    }\n}\n\nclass EditorContext(private val prefs: MutablePreferences) {\n    var <T> Preference<T>.value\n        get() = prefs.run { read() }\n        set(value) = prefs.run { write(value) }\n\n    operator fun <T> Preference<Set<T>>.plusAssign(value: T) = prefs.run {\n        write(read() + value)\n    }\n\n    operator fun <T> Preference<Set<T>>.minusAssign(value: T) = prefs.run {\n        write(read() subtract setOf(value))\n    }\n}\n\nabstract class Preference<T>(\n    private val dataStore: DataStore<Preferences>,\n    val default: T\n) {\n    internal abstract fun Preferences.read(): T\n    internal abstract fun MutablePreferences.write(value: T)\n\n    val flow = dataStore.data.map { with(it) { read() } ?: default }.distinctUntilChanged()\n\n    suspend fun get() = flow.first()\n    fun getBlocking() = runBlocking { get() }\n\n    @Composable\n    fun getAsState() = flow.collectAsStateWithLifecycle(initialValue = remember {\n        getBlocking()\n    })\n\n    suspend fun update(value: T) = dataStore.editor {\n        this@Preference.value = value\n    }\n}\n\nclass EnumPreference<E : Enum<E>>(\n    dataStore: DataStore<Preferences>,\n    key: String,\n    default: E,\n    private val enumValues: Array<E>\n) : Preference<E>(dataStore, default) {\n    private val key = stringPreferencesKey(key)\n    override fun Preferences.read() =\n        this[key]?.let { name ->\n            enumValues.find { it.name == name }\n        } ?: default\n\n    override fun MutablePreferences.write(value: E) {\n        this[key] = value.name\n    }\n}\n\nabstract class BasePreference<T>(dataStore: DataStore<Preferences>, default: T) :\n    Preference<T>(dataStore, default) {\n    protected abstract val key: Preferences.Key<T>\n    override fun Preferences.read() = this[key] ?: default\n    override fun MutablePreferences.write(value: T) {\n        this[key] = value\n    }\n}\n\nclass StringPreference(\n    dataStore: DataStore<Preferences>,\n    key: String,\n    default: String\n) : BasePreference<String>(dataStore, default) {\n    override val key = stringPreferencesKey(key)\n}\n\nclass StringSetPreference(\n    dataStore: DataStore<Preferences>,\n    key: String,\n    default: Set<String>\n) : BasePreference<Set<String>>(dataStore, default) {\n    override val key = stringSetPreferencesKey(key)\n}\n\nclass LongSetPreference(\n    dataStore: DataStore<Preferences>,\n    key: String,\n    default: Set<Long>\n) : Preference<Set<Long>>(dataStore, default) {\n    private val key = stringSetPreferencesKey(key)\n\n    override fun Preferences.read() = this[key]?.mapTo(mutableSetOf()) { it.toLong() } ?: default\n    override fun MutablePreferences.write(value: Set<Long>) {\n        this[key] = value.mapTo(mutableSetOf()) { it.toString() }\n    }\n}\n\nclass BooleanPreference(\n    dataStore: DataStore<Preferences>,\n    key: String,\n    default: Boolean\n) : BasePreference<Boolean>(dataStore, default) {\n    override val key = booleanPreferencesKey(key)\n}\n\nclass IntPreference(\n    dataStore: DataStore<Preferences>,\n    key: String,\n    default: Int\n) : BasePreference<Int>(dataStore, default) {\n    override val key = intPreferencesKey(key)\n}\n\nclass FloatPreference(\n    dataStore: DataStore<Preferences>,\n    key: String,\n    default: Float\n) : BasePreference<Float>(dataStore, default) {\n    override val key = floatPreferencesKey(key)\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/repository/AnnouncementRepository.kt",
    "content": "package app.revanced.manager.domain.repository\n\nimport app.revanced.manager.network.api.ReVancedAPI\nimport app.revanced.manager.network.dto.ReVancedAnnouncement\nimport app.revanced.manager.network.utils.getOrNull\nimport kotlinx.coroutines.sync.Mutex\nimport kotlinx.coroutines.sync.withLock\n\nclass AnnouncementRepository(\n    private val api: ReVancedAPI\n) {\n    private val mutex = Mutex()\n    private var cachedAnnouncements: List<ReVancedAnnouncement>? = null\n\n    suspend fun getAnnouncements(forceRefresh: Boolean = false): List<ReVancedAnnouncement>? {\n        mutex.withLock {\n            if (cachedAnnouncements == null || forceRefresh) {\n                cachedAnnouncements = api.getAnnouncements().getOrNull()\n            }\n            return cachedAnnouncements\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/repository/DownloadedAppRepository.kt",
    "content": "package app.revanced.manager.domain.repository\n\nimport android.app.Application\nimport android.content.Context\nimport android.os.Parcelable\nimport app.revanced.manager.data.room.AppDatabase\nimport app.revanced.manager.data.room.AppDatabase.Companion.generateUid\nimport app.revanced.manager.data.room.apps.downloaded.DownloadedApp\nimport app.revanced.manager.downloader.DownloaderHostApi\nimport app.revanced.manager.network.downloader.LoadedDownloader\nimport app.revanced.manager.downloader.OutputDownloadScope\nimport app.revanced.manager.downloader.Scope\nimport app.revanced.manager.util.PM\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.channelFlow\nimport kotlinx.coroutines.flow.conflate\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.flowOn\nimport java.io.File\nimport java.io.FilterOutputStream\nimport java.nio.file.StandardOpenOption\nimport java.util.concurrent.atomic.AtomicLong\nimport kotlin.io.path.outputStream\n\nclass DownloadedAppRepository(\n    app: Application,\n    db: AppDatabase,\n    private val pm: PM\n) {\n    private val dir = app.getDir(\"downloaded-apps\", Context.MODE_PRIVATE)\n    private val dao = db.downloadedAppDao()\n\n    fun getAll() = dao.getAllApps().distinctUntilChanged()\n\n    fun getApkFileForApp(app: DownloadedApp): File =\n        getApkFileForDir(dir.resolve(app.directory))\n\n    private fun getApkFileForDir(directory: File) = directory.listFiles()!!.first()\n\n    suspend fun cleanUp() {\n        val threshold = 1000 * 60 * 60 * 6\n        val now = System.currentTimeMillis()\n\n        val targets = getAll().first().filter {\n            (now - it.lastUsed) > threshold\n        }\n        delete(targets)\n    }\n\n    suspend fun deleteFor(packageName: String) {\n        delete(getAll().first().filter { it.packageName == packageName })\n    }\n\n    @OptIn(DownloaderHostApi::class)\n    suspend fun download(\n        downloader: LoadedDownloader,\n        data: Parcelable,\n        expectedPackageName: String,\n        expectedVersion: String?,\n        appCompatibilityCheck: Boolean,\n        patchesCompatibilityCheck: Boolean,\n        onDownload: suspend (downloadProgress: Pair<Long, Long?>) -> Unit,\n    ): File {\n        // Converted integers cannot contain / or .. unlike the package name or version, so they are safer to use here.\n        val relativePath = File(generateUid().toString())\n        val saveDir = dir.resolve(relativePath).also { it.mkdirs() }\n        val targetFile = saveDir.resolve(\"base.apk\").toPath()\n\n        try {\n            val downloadSize = AtomicLong(0)\n            val downloadedBytes = AtomicLong(0)\n\n            channelFlow {\n                val scope = object : OutputDownloadScope, Scope by downloader.scopeImpl {\n                    override suspend fun reportSize(size: Long) {\n                        require(size > 0) { \"Size must be greater than zero\" }\n                        require(\n                            downloadSize.compareAndSet(\n                                0,\n                                size\n                            )\n                        ) { \"Download size has already been set\" }\n                        send(downloadedBytes.get() to size)\n                    }\n                }\n\n                fun emitProgress(bytes: Long) {\n                    val newValue = downloadedBytes.addAndGet(bytes)\n                    val totalSize = downloadSize.get()\n                    if (totalSize < 1) return\n                    trySend(newValue to totalSize).getOrThrow()\n                }\n\n                targetFile.outputStream(StandardOpenOption.CREATE_NEW).buffered().use {\n                    val stream = object : FilterOutputStream(it) {\n                        override fun write(b: Int) = out.write(b).also { emitProgress(1) }\n\n                        override fun write(b: ByteArray?, off: Int, len: Int) =\n                            out.write(b, off, len).also {\n                                emitProgress(\n                                    (len - off).toLong()\n                                )\n                            }\n                    }\n                    downloader.impl.download(scope, data, stream)\n                }\n            }\n                .conflate()\n                .flowOn(Dispatchers.IO)\n                .collect { (downloaded, size) -> onDownload(downloaded to size) }\n\n            if (downloadedBytes.get() < 1) error(\"Downloader did not download anything.\")\n            val pkgInfo =\n                pm.getPackageInfo(targetFile.toFile()) ?: error(\"Downloaded APK file is invalid\")\n            if (pkgInfo.packageName != expectedPackageName) error(\"Downloaded APK has the wrong package name. Expected: $expectedPackageName, Actual: ${pkgInfo.packageName}\")\n            expectedVersion?.let {\n                if (\n                    pkgInfo.versionName != expectedVersion &&\n                    (appCompatibilityCheck || patchesCompatibilityCheck)\n                ) error(\"The selected app version ($pkgInfo.versionName) doesn't match the suggested version. Please use the suggested version ($expectedVersion), or adjust your settings by disabling \\\"Require suggested app version\\\" and enabling \\\"Disable version compatibility check\\\".\")\n            }\n\n            // Delete the previous copy (if present).\n            dao.get(pkgInfo.packageName, pkgInfo.versionName!!)?.directory?.let {\n                if (!dir.resolve(it)\n                        .deleteRecursively()\n                ) throw Exception(\"Failed to delete existing directory\")\n            }\n            dao.upsert(\n                DownloadedApp(\n                    packageName = pkgInfo.packageName,\n                    version = pkgInfo.versionName!!,\n                    directory = relativePath,\n                )\n            )\n        } catch (e: Exception) {\n            saveDir.deleteRecursively()\n            throw e\n        }\n\n        // Return the Apk file.\n        return getApkFileForDir(saveDir)\n    }\n\n    suspend fun get(packageName: String, version: String, markUsed: Boolean = false) =\n        dao.get(packageName, version)?.also {\n            if (markUsed) dao.markUsed(packageName, version)\n        }\n\n    suspend fun getAllByPackage(packageName: String) = dao.getAllByPackage(packageName)\n\n    suspend fun getLatestByPackage(packageName: String, markUsed: Boolean = false) =\n        dao.getLatestByPackage(packageName)?.also {\n            if (markUsed) dao.markUsed(it.packageName, it.version)\n        }\n\n    suspend fun delete(downloadedApps: Collection<DownloadedApp>) {\n        downloadedApps.forEach {\n            dir.resolve(it.directory).deleteRecursively()\n        }\n\n        dao.delete(downloadedApps)\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/repository/DownloaderRepository.kt",
    "content": "package app.revanced.manager.domain.repository\n\nimport android.annotation.SuppressLint\nimport android.app.Application\nimport android.content.Context\nimport android.content.pm.ApplicationInfo\nimport android.content.pm.PackageInfo\nimport android.os.Parcelable\nimport app.revanced.manager.R\nimport app.revanced.manager.data.room.AppDatabase\nimport app.revanced.manager.data.room.downloader.DownloaderEntity\nimport app.revanced.manager.data.room.sources.SourceProperties\nimport app.revanced.manager.domain.manager.SourceManager\nimport app.revanced.manager.domain.sources.APISource\nimport app.revanced.manager.domain.sources.JsonSource\nimport app.revanced.manager.domain.sources.Loader\nimport app.revanced.manager.domain.sources.LocalSource\nimport app.revanced.manager.domain.sources.Source\nimport app.revanced.manager.network.downloader.LoadedDownloader\nimport app.revanced.manager.network.downloader.ParceledDownloaderData\nimport app.revanced.manager.downloader.DownloaderBuilder\nimport app.revanced.manager.downloader.DownloaderHostApi\nimport app.revanced.manager.downloader.Scope\nimport app.revanced.manager.network.downloader.DownloaderPackage\nimport app.revanced.manager.util.PM\nimport dalvik.system.PathClassLoader\nimport kotlinx.coroutines.flow.map\nimport java.io.File\nimport java.lang.reflect.Modifier\nimport app.revanced.manager.data.room.sources.Source as SourceInfo\n\n@OptIn(DownloaderHostApi::class)\nclass DownloaderRepository(\n    private val pm: PM,\n    app: Application,\n    db: AppDatabase\n) : SourceManager<DownloaderEntity, DownloaderPackage, List<LoadedDownloader>>(\n    emptyList(),\n    app.getDir(\"downloaders\", Context.MODE_PRIVATE)\n) {\n    private val dao = db.downloaderDao()\n\n    override val defaultSource = DownloaderEntity(\n        uid = 0,\n        name = \"\",\n        versionHash = null,\n        source = SourceInfo.API,\n        autoUpdate = false\n    )\n\n    override suspend fun dbGetAll() = dao.all()\n    override suspend fun dbGetProps(uid: Int) = dao.getProps(uid)\n    override suspend fun dbUpsert(entity: DownloaderEntity) = dao.upsert(entity)\n    override suspend fun dbRemove(uid: Int) = dao.remove(uid)\n    override suspend fun dbReset() = dao.reset()\n\n    private val loader = Loader { file ->\n        val pkgInfo = pm.getPackageInfo(file) ?: error(\"Failed to get package info for $file\")\n        loadPackage(pkgInfo)\n    }\n\n    override fun loadEntity(entity: DownloaderEntity): Source<DownloaderPackage> = with(entity) {\n        val file = directoryOf(uid).resolve(\"downloader.jar\")\n\n        return when (source) {\n            is SourceInfo.Local -> LocalSource(name, uid, null, file, loader)\n            is SourceInfo.API -> APISource(\n                name,\n                uid,\n                versionHash,\n                null,\n                file,\n                SourceInfo.API.SENTINEL,\n                autoUpdate,\n                loader\n            ) { getDownloaderUpdate() }\n\n            is SourceInfo.Remote -> JsonSource(\n                name,\n                uid,\n                versionHash,\n                null,\n                file,\n                source.url.toString(),\n                autoUpdate,\n                loader\n            )\n        }\n    }\n\n    override fun entityFromProps(\n        uid: Int,\n        props: SourceProperties\n    ) = DownloaderEntity(\n        uid,\n        name = props.name,\n        versionHash = props.versionHash,\n        source = props.source,\n        autoUpdate = props.autoUpdate\n    )\n\n    override fun uidOf(entity: DownloaderEntity) = entity.uid\n    override fun realNameOf(loaded: DownloaderPackage) = loaded.name\n\n    override val updateFailed = R.string.downloader_update_failed\n    override val updateSuccess = R.string.patches_update_success\n    override val updateUnavailable = R.string.patches_update_unavailable\n    override val replaceFail = R.string.downloader_replace_fail\n\n    override suspend fun loadDataFromSources(sources: MutableMap<Int, Source<DownloaderPackage>>) =\n        sources.values.flatMap { src -> src.loaded?.downloaders.orEmpty() }\n\n    val downloaderSources = store.state.map { it.sources }\n    val loadedDownloadersFlow = store.state.map { it.data }\n\n    // TODO: clear data for removed downloaders.\n    private val dataDir = app.getDir(\"downloaders_data\", Context.MODE_PRIVATE)\n\n    fun findPackageByName(packageName: String) =\n        store.state.value.sources.values.asSequence().mapNotNull { it.loaded }\n            .find { it.context.packageName == packageName }\n\n    fun unwrapParceledData(data: ParceledDownloaderData): Pair<LoadedDownloader, Parcelable> {\n        val pkg = findPackageByName(data.downloaderPackageName) ?: throw Exception(\"Downloader package ${data.downloaderPackageName} is not available\")\n        val downloader = pkg.downloaders.firstOrNull { it.className == data.downloaderClassName }\n            ?: throw Exception(\"No downloader with name ${data.downloaderClassName} found in ${data.downloaderPackageName}\")\n\n        return downloader to data.unwrapWith(pkg.classLoader)\n    }\n\n    private val createApplicationContext by lazy {\n        val clazz = Context::class.java\n        clazz.getMethod(\"createApplicationContext\", ApplicationInfo::class.java, Int::class.java)\n    }\n\n    private fun loadPackage(packageInfo: PackageInfo): DownloaderPackage {\n        val packageName = packageInfo.packageName\n\n        // The context is technically only necessary for resources. On API levels 30 and above, it would be better to use the proper APIs for dynamic resource loading.\n        val downloaderContext = createApplicationContext(\n            app,\n            packageInfo.applicationInfo,\n            0\n        ) as Context\n\n        val classNamesResId =\n            @SuppressLint(\"DiscouragedApi\") downloaderContext.resources.getIdentifier(\n                CLASSES_RESOURCE_NAME,\n                \"array\",\n                downloaderContext.packageName\n            )\n        if (classNamesResId == 0) throw Exception(\"Class names resource not found (array/$CLASSES_RESOURCE_NAME)\")\n        val classNames = downloaderContext.resources.getStringArray(classNamesResId)\n\n        val classLoader =\n            PathClassLoader(packageInfo.applicationInfo!!.sourceDir, app.classLoader)\n\n        val scopeImpl = object : Scope {\n            override val hostPackageName = app.packageName\n            override val downloaderPackageName = downloaderContext.packageName\n            override val dataDir =\n                this@DownloaderRepository.dataDir.resolve(downloaderPackageName).also(File::mkdirs)\n        }\n\n        return DownloaderPackage(\n            classNames.map { className ->\n                val downloader = classLoader\n                    .loadClass(className)\n                    .getDownloaderBuilder()\n                    .build(\n                        scopeImpl = scopeImpl,\n                        context = downloaderContext\n                    )\n\n                LoadedDownloader(\n                    packageName,\n                    className,\n                    downloaderContext.getString(downloader.name),\n                    scopeImpl,\n                    downloader\n                )\n            },\n            classLoader,\n            downloaderContext,\n            with(pm) { packageInfo.label() },\n            packageInfo.versionName.orEmpty()\n        )\n    }\n\n    private companion object {\n        const val CLASSES_RESOURCE_NAME = \"app.revanced.manager.downloader.classes\"\n\n        const val PUBLIC_STATIC = Modifier.PUBLIC or Modifier.STATIC\n        val Int.isPublicStatic get() = (this and PUBLIC_STATIC) == PUBLIC_STATIC\n        val Class<*>.isDownloaderBuilder get() = DownloaderBuilder::class.java.isAssignableFrom(this)\n\n        @Suppress(\"UNCHECKED_CAST\")\n        fun Class<*>.getDownloaderBuilder() =\n            declaredMethods\n                .firstOrNull { it.modifiers.isPublicStatic && it.returnType.isDownloaderBuilder && it.parameterTypes.isEmpty() }\n                ?.let { it(null) as DownloaderBuilder<Parcelable> }\n                ?: throw Exception(\"Could not find a valid downloader implementation in class $canonicalName\")\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/repository/InstalledAppRepository.kt",
    "content": "package app.revanced.manager.domain.repository\n\nimport app.revanced.manager.data.room.AppDatabase\nimport app.revanced.manager.data.room.apps.installed.AppliedPatch\nimport app.revanced.manager.data.room.apps.installed.InstallType\nimport app.revanced.manager.data.room.apps.installed.InstalledApp\nimport app.revanced.manager.data.room.apps.installed.InstalledPatchBundle\nimport app.revanced.manager.patcher.patch.PatchBundleInfo\nimport app.revanced.manager.util.PatchSelection\nimport kotlinx.coroutines.flow.distinctUntilChanged\n\nclass InstalledAppRepository(\n    db: AppDatabase\n) {\n    private val dao = db.installedAppDao()\n\n    fun getAll() = dao.getAll().distinctUntilChanged()\n\n    suspend fun get(packageName: String) = dao.get(packageName)\n\n    suspend fun getAppliedPatches(packageName: String): PatchSelection =\n        dao.getPatchesSelection(packageName).mapValues { (_, patches) -> patches.toSet() }\n\n    suspend fun getInstalledPatchBundles(packageName: String) =\n        dao.getInstalledPatchBundles(packageName)\n\n    suspend fun addOrUpdate(\n        currentPackageName: String,\n        originalPackageName: String,\n        version: String,\n        installType: InstallType,\n        patchSelection: PatchSelection,\n        bundleInfo: Map<Int, PatchBundleInfo.Global> = emptyMap()\n    ) {\n        dao.upsertApp(\n            InstalledApp(\n                currentPackageName = currentPackageName,\n                originalPackageName = originalPackageName,\n                version = version,\n                installType = installType\n            ),\n            patchSelection.flatMap { (uid, patches) ->\n                patches.map { patch ->\n                    AppliedPatch(\n                        packageName = currentPackageName,\n                        bundle = uid,\n                        patchName = patch\n                    )\n                }\n            },\n            patchSelection.keys.mapNotNull { uid ->\n                val info = bundleInfo[uid] ?: return@mapNotNull null\n                InstalledPatchBundle(\n                    packageName = currentPackageName,\n                    bundleUid = uid,\n                    bundleName = info.name,\n                    bundleVersion = info.version\n                )\n            }\n        )\n    }\n\n    suspend fun delete(installedApp: InstalledApp) {\n        dao.delete(installedApp)\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/repository/ManagerUpdateRepository.kt",
    "content": "package app.revanced.manager.domain.repository\n\nimport app.revanced.manager.network.api.ReVancedAPI\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.asStateFlow\n\nclass ManagerUpdateRepository(\n    private val reVancedAPI: ReVancedAPI\n) {\n    private val _availableVersion = MutableStateFlow<String?>(null)\n    val availableVersion = _availableVersion.asStateFlow()\n\n    suspend fun refreshAvailableVersion(): String? {\n        val version = reVancedAPI.getAppUpdate()?.version\n        _availableVersion.value = version\n        return version\n    }\n\n    fun clearAvailableVersion() {\n        _availableVersion.value = null\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/repository/PatchBundleRepository.kt",
    "content": "package app.revanced.manager.domain.repository\n\nimport android.app.Application\nimport android.content.Context\nimport android.util.Log\nimport app.revanced.library.mostCommonCompatibleVersions\nimport app.revanced.manager.R\nimport app.revanced.manager.data.room.AppDatabase\nimport app.revanced.manager.data.room.bundles.PatchBundleEntity\nimport app.revanced.manager.data.room.sources.SourceProperties\nimport app.revanced.manager.data.room.sources.Source as SourceInfo\nimport app.revanced.manager.domain.sources.APIPatchBundle\nimport app.revanced.manager.domain.sources.JsonPatchBundle\nimport app.revanced.manager.domain.sources.LocalPatchBundle\nimport app.revanced.manager.domain.sources.PatchBundleSource\nimport app.revanced.manager.domain.manager.SourceManager\nimport app.revanced.manager.domain.sources.Loader\nimport app.revanced.manager.domain.sources.Source\nimport app.revanced.manager.patcher.patch.PatchInfo\nimport app.revanced.manager.patcher.patch.PatchBundle\nimport app.revanced.manager.patcher.patch.PatchBundleInfo\nimport app.revanced.manager.util.tag\nimport kotlinx.collections.immutable.*\nimport kotlinx.coroutines.CancellationException\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.runInterruptible\nimport kotlinx.coroutines.withContext\nimport java.io.File\nimport kotlin.collections.map\nimport kotlin.text.ifEmpty\n\nprivate typealias Info = PersistentMap<Int, PatchBundleInfo.Global>\n\nclass PatchBundleRepository(\n    app: Application,\n    db: AppDatabase,\n) : SourceManager<PatchBundleEntity, PatchBundle, Info>(\n    persistentMapOf(),\n    app.getDir(\"patch_bundles\", Context.MODE_PRIVATE)\n) {\n    private val dao = db.patchBundleDao()\n\n    override val defaultSource = PatchBundleEntity(\n        uid = 0,\n        name = \"\",\n        versionHash = null,\n        source = SourceInfo.API,\n        autoUpdate = false\n    )\n\n    override val updateFailed = R.string.patches_download_fail\n    override val updateSuccess = R.string.patches_update_success\n    override val updateUnavailable = R.string.patches_update_unavailable\n    override val replaceFail = R.string.patches_replace_fail\n\n    override suspend fun dbGetAll() = dao.all()\n    override suspend fun dbGetProps(uid: Int) = dao.getProps(uid)\n    override suspend fun dbUpsert(entity: PatchBundleEntity) = dao.upsert(entity)\n    override suspend fun dbRemove(uid: Int) = dao.remove(uid)\n    override suspend fun dbReset() = dao.reset()\n\n    override fun loadEntity(entity: PatchBundleEntity): PatchBundleSource = with(entity) {\n        val file = directoryOf(uid).resolve(\"patches.jar\")\n        val actualName =\n            entity.name.ifEmpty { app.getString(if (uid == 0) R.string.patches_name_default else R.string.patches_name_fallback) }\n\n        return when (source) {\n            is SourceInfo.Local -> LocalPatchBundle(actualName, uid, null, file, PatchBundleLoader)\n            is SourceInfo.API -> APIPatchBundle(\n                actualName,\n                uid,\n                versionHash,\n                null,\n                file,\n                SourceInfo.API.SENTINEL,\n                autoUpdate,\n                PatchBundleLoader\n            ) { getPatchesUpdate() }\n\n            is SourceInfo.Remote -> JsonPatchBundle(\n                actualName,\n                uid,\n                versionHash,\n                null,\n                file,\n                source.url.toString(),\n                autoUpdate,\n                PatchBundleLoader\n            )\n        }\n    }\n\n    override fun entityFromProps(\n        uid: Int,\n        props: SourceProperties\n    ) = PatchBundleEntity(\n        uid,\n        name = props.name,\n        versionHash = props.versionHash,\n        source = props.source,\n        autoUpdate = props.autoUpdate\n    )\n\n    override fun uidOf(entity: PatchBundleEntity) = entity.uid\n    override fun realNameOf(loaded: PatchBundle) = loaded.manifestAttributes?.name\n    override suspend fun loadDataFromSources(sources: MutableMap<Int, Source<PatchBundle>>) = loadMetadata(sources).toPersistentMap()\n\n    val sources = store.state.map { it.sources.values.toList() }\n    val bundles = store.state.map {\n        it.sources.mapNotNull { (uid, src) ->\n            uid to (src.loaded ?: return@mapNotNull null)\n        }.toMap()\n    }\n    val bundleInfoFlow = store.state.map { it.data }\n\n    fun scopedBundleInfoFlow(packageName: String, version: String?) = bundleInfoFlow.map {\n        it.map { (_, bundleInfo) ->\n            bundleInfo.forPackage(\n                packageName,\n                version\n            )\n        }\n    }\n\n    val patchCountsFlow = bundleInfoFlow.map { it.mapValues { (_, info) -> info.patches.size } }\n\n    val suggestedVersions = bundleInfoFlow.map {\n        val allPatches =\n            it.values.flatMap { bundle -> bundle.patches.map(PatchInfo::toPatcherPatch) }.toSet()\n\n        allPatches.mostCommonCompatibleVersions(countUnusedPatches = true)\n            .mapValues { (_, versions) ->\n                if (versions.keys.size < 2)\n                    return@mapValues versions.keys.firstOrNull()\n\n                // The entries are ordered from most compatible to least compatible.\n                // If there are entries with the same number of compatible patches, older versions will be first, which is undesirable.\n                // This means we have to pick the last entry we find that has the highest patch count.\n                // The order may change in future versions of ReVanced Library.\n                var currentHighestPatchCount = -1\n                versions.entries.last { (_, patchCount) ->\n                    if (patchCount >= currentHighestPatchCount) {\n                        currentHighestPatchCount = patchCount\n                        true\n                    } else false\n                }.key\n            }\n    }\n\n    private suspend fun loadMetadata(sources: MutableMap<Int, PatchBundleSource>): Map<Int, PatchBundleInfo.Global> {\n        // Map bundles -> sources\n        val map = sources.mapNotNull { (_, src) ->\n            (src.loaded ?: return@mapNotNull null) to src\n        }.toMap()\n\n        val metadata = try {\n            runInterruptible(Dispatchers.Default) {\n                PatchBundle.Loader.metadata(map.keys)\n            }\n        } catch (e: CancellationException) {\n            throw e\n        } catch (error: Throwable) {\n            sources.entries.forEach { entry ->\n                entry.setValue(entry.value.copy(error = error))\n            }\n\n            Log.e(tag, \"Failed to load bundles\", error)\n            emptyMap()\n        }\n\n        val output = buildMap {\n            metadata.forEach { (bundle, result) ->\n                val src = map[bundle]!!\n                val error = result.exceptionOrNull()\n                if (error != null) {\n                    sources[src.uid] = src.copy(error = error)\n                    return@forEach\n                }\n\n                this[src.uid] = PatchBundleInfo.Global(\n                    src.name,\n                    bundle.manifestAttributes?.version,\n                    src.uid,\n                    result.getOrThrow().toList()\n                )\n            }\n        }\n\n        return output\n    }\n\n    suspend fun isVersionAllowed(packageName: String, version: String) =\n        withContext(Dispatchers.Default) {\n            if (!prefs.suggestedVersionSafeguard.get()) return@withContext true\n\n            val suggestedVersion = suggestedVersions.first()[packageName] ?: return@withContext true\n            suggestedVersion == version\n        }\n\n    private companion object PatchBundleLoader : Loader<PatchBundle> {\n        override fun load(file: File) = PatchBundle(file.absolutePath)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/repository/PatchOptionsRepository.kt",
    "content": "package app.revanced.manager.domain.repository\n\nimport android.util.Log\nimport app.revanced.manager.data.room.AppDatabase\nimport app.revanced.manager.data.room.options.Option\nimport app.revanced.manager.data.room.options.OptionGroup\nimport app.revanced.manager.patcher.patch.PatchInfo\nimport app.revanced.manager.util.Options\nimport app.revanced.manager.util.tag\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.map\n\nclass PatchOptionsRepository(db: AppDatabase) {\n    private val dao = db.optionDao()\n\n    private suspend fun getOrCreateGroup(bundleUid: Int, packageName: String) =\n        dao.getGroupId(bundleUid, packageName) ?: OptionGroup(\n            uid = AppDatabase.generateUid(),\n            patchBundle = bundleUid,\n            packageName = packageName\n        ).also { dao.createOptionGroup(it) }.uid\n\n    suspend fun getOptions(\n        packageName: String,\n        bundlePatches: Map<Int, Map<String, PatchInfo>>\n    ): Options {\n        val options = dao.getOptions(packageName)\n        // Bundle -> Patches\n        return buildMap<Int, MutableMap<String, MutableMap<String, Any?>>>(options.size) {\n            options.forEach { (sourceUid, bundlePatchOptionsList) ->\n                // Patches -> Patch options\n                this[sourceUid] =\n                    bundlePatchOptionsList.fold(mutableMapOf()) { bundlePatchOptions, dbOption ->\n                        val deserializedPatchOptions =\n                            bundlePatchOptions.getOrPut(dbOption.patchName, ::mutableMapOf)\n\n                        val option =\n                            bundlePatches[sourceUid]?.get(dbOption.patchName)?.options?.find { it.name == dbOption.name }\n                        if (option != null) {\n                            try {\n                                deserializedPatchOptions[option.name] =\n                                    dbOption.value.deserializeFor(option)\n                            } catch (e: Option.SerializationException) {\n                                Log.w(\n                                    tag,\n                                    \"Option ${dbOption.patchName}:${option.name} could not be deserialized\",\n                                    e\n                                )\n                            }\n                        }\n\n                        bundlePatchOptions\n                    }\n            }\n        }\n    }\n\n    suspend fun saveOptions(packageName: String, options: Options) =\n        dao.updateOptions(options.entries.associate { (sourceUid, bundlePatchOptions) ->\n            val groupId = getOrCreateGroup(sourceUid, packageName)\n\n            groupId to bundlePatchOptions.flatMap { (patchName, patchOptions) ->\n                patchOptions.mapNotNull { (key, value) ->\n                    val serialized = try {\n                        Option.SerializedValue.fromValue(value)\n                    } catch (e: Option.SerializationException) {\n                        Log.e(tag, \"Option $patchName:$key could not be serialized\", e)\n                        return@mapNotNull null\n                    }\n\n                    Option(groupId, patchName, key, serialized)\n                }\n            }\n        })\n\n    fun getPackagesWithSavedOptions() =\n        dao.getPackagesWithOptions().map(Iterable<String>::toSet).distinctUntilChanged()\n\n    suspend fun resetOptionsForPackage(packageName: String) = dao.resetOptionsForPackage(packageName)\n    suspend fun resetOptionsForPatchBundle(uid: Int) = dao.resetOptionsForPatchBundle(uid)\n    suspend fun reset() = dao.reset()\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/repository/PatchSelectionRepository.kt",
    "content": "package app.revanced.manager.domain.repository\n\nimport app.revanced.manager.data.room.AppDatabase\nimport app.revanced.manager.data.room.AppDatabase.Companion.generateUid\nimport app.revanced.manager.data.room.selection.PatchSelection\nimport kotlinx.coroutines.flow.distinctUntilChanged\nimport kotlinx.coroutines.flow.map\n\nclass PatchSelectionRepository(db: AppDatabase) {\n    private val dao = db.selectionDao()\n\n    private suspend fun getOrCreateSelection(bundleUid: Int, packageName: String) =\n        dao.getSelectionId(bundleUid, packageName) ?: PatchSelection(\n            uid = generateUid(),\n            patchBundle = bundleUid,\n            packageName = packageName\n        ).also { dao.createSelection(it) }.uid\n\n    suspend fun getSelection(packageName: String): Map<Int, Set<String>> =\n        dao.getSelectedPatches(packageName).mapValues { it.value.toSet() }\n\n    suspend fun updateSelection(packageName: String, selection: Map<Int, Set<String>>) =\n        dao.updateSelections(selection.mapKeys { (sourceUid, _) ->\n            getOrCreateSelection(\n                sourceUid,\n                packageName\n            )\n        })\n\n    fun getPackagesWithSavedSelection() =\n        dao.getPackagesWithSelection().map(Iterable<String>::toSet).distinctUntilChanged()\n\n    fun getSelectionPackageCount() = dao.getSelectionPackageCount().distinctUntilChanged()\n\n    fun getSelectedPatchCount() = dao.getSelectedPatchCount().distinctUntilChanged()\n\n    suspend fun resetSelectionForPackage(packageName: String) {\n        dao.resetForPackage(packageName)\n    }\n\n    suspend fun resetSelectionForPatchBundle(uid: Int) {\n        dao.resetForPatchBundle(uid)\n    }\n\n    suspend fun reset() = dao.reset()\n\n    suspend fun export(bundleUid: Int): SerializedSelection = dao.exportSelection(bundleUid)\n\n    suspend fun import(bundleUid: Int, selection: SerializedSelection) {\n        dao.resetForPatchBundle(bundleUid)\n        dao.updateSelections(selection.entries.associate { (packageName, patches) ->\n            getOrCreateSelection(bundleUid, packageName) to patches.toSet()\n        })\n    }\n}\n\n/**\n * A [Map] of package name -> selected patches.\n */\ntypealias SerializedSelection = Map<String, List<String>>"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/sources/LocalSource.kt",
    "content": "package app.revanced.manager.domain.sources\n\nimport app.revanced.manager.data.redux.ActionContext\nimport app.revanced.manager.patcher.patch.PatchBundle\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.withContext\nimport java.io.File\nimport java.io.InputStream\n\ntypealias LocalPatchBundle = LocalSource<PatchBundle>\n\nclass LocalSource<T>(\n    name: String,\n    uid: Int,\n    error: Throwable?,\n    file: File,\n    loader: Loader<T>\n) : Source<T>(name, uid, error, file, loader) {\n    suspend fun ActionContext.replace(patches: InputStream) {\n        withContext(Dispatchers.IO) {\n            outputStream().use { outputStream ->\n                patches.copyTo(outputStream)\n            }\n        }\n    }\n\n    override fun copy(error: Throwable?, name: String) = LocalSource(\n        name,\n        uid,\n        error,\n        file,\n        loader\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/sources/RemoteSource.kt",
    "content": "package app.revanced.manager.domain.sources\n\nimport app.revanced.manager.data.redux.ActionContext\nimport app.revanced.manager.network.api.ReVancedAPI\nimport app.revanced.manager.network.dto.ReVancedAsset\nimport app.revanced.manager.network.service.HttpService\nimport app.revanced.manager.network.utils.APIResponse\nimport app.revanced.manager.network.utils.getOrThrow\nimport app.revanced.manager.patcher.patch.PatchBundle\nimport io.ktor.client.request.url\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.withContext\nimport org.koin.core.component.KoinComponent\nimport org.koin.core.component.inject\nimport java.io.File\n\ntypealias RemotePatchBundle = RemoteSource<PatchBundle>\ntypealias JsonPatchBundle = JsonSource<PatchBundle>\ntypealias APIPatchBundle = APISource<PatchBundle>\n\nsealed class RemoteSource<T>(\n    name: String,\n    uid: Int,\n    protected val versionHash: String?,\n    error: Throwable?,\n    file: File,\n    val endpoint: String,\n    val autoUpdate: Boolean,\n    loader: Loader<T>\n) : Source<T>(name, uid, error, file, loader), KoinComponent {\n    protected val http: HttpService by inject()\n\n    protected abstract suspend fun getLatestInfo(): ReVancedAsset\n    abstract fun copy(error: Throwable? = this.error, name: String = this.name, autoUpdate: Boolean = this.autoUpdate): RemoteSource<T>\n    override fun copy(error: Throwable?, name: String): RemoteSource<T> = copy(error, name, this.autoUpdate)\n\n    private suspend fun download(info: ReVancedAsset) = withContext(Dispatchers.IO) {\n        outputStream().use {\n            http.streamTo(it) {\n                url(info.downloadUrl)\n            }\n        }\n\n        info.version\n    }\n\n    /**\n     * Downloads the latest version regardless if there is a new update available.\n     */\n    suspend fun ActionContext.downloadLatest() = download(getLatestInfo())\n\n    suspend fun ActionContext.update(): String? = withContext(Dispatchers.IO) {\n        val info = getLatestInfo()\n        if (hasInstalled() && info.version == versionHash)\n            return@withContext null\n\n        download(info)\n    }\n\n    companion object {\n        const val updateFailMsg = \"Failed to update\"\n    }\n}\n\nclass JsonSource<T>(\n    name: String,\n    uid: Int,\n    versionHash: String?,\n    error: Throwable?,\n    file: File,\n    endpoint: String,\n    autoUpdate: Boolean,\n    loader: Loader<T>\n) : RemoteSource<T>(name, uid, versionHash, error, file, endpoint, autoUpdate, loader) {\n    override suspend fun getLatestInfo() = withContext(Dispatchers.IO) {\n        http.request<ReVancedAsset> {\n            url(endpoint)\n        }.getOrThrow()\n    }\n\n    override fun copy(error: Throwable?, name: String, autoUpdate: Boolean) = JsonSource(\n        name,\n        uid,\n        versionHash,\n        error,\n        file,\n        endpoint,\n        autoUpdate,\n        loader\n    )\n}\n\nclass APISource<T>(\n    name: String,\n    uid: Int,\n    versionHash: String?,\n    error: Throwable?,\n    file: File,\n    endpoint: String,\n    autoUpdate: Boolean,\n    loader: Loader<T>,\n    private val getUpdate: suspend ReVancedAPI.() -> APIResponse<ReVancedAsset>\n) : RemoteSource<T>(name, uid, versionHash, error, file, endpoint, autoUpdate, loader) {\n    private val api: ReVancedAPI by inject()\n\n    override suspend fun getLatestInfo() = api.getUpdate().getOrThrow()\n    override fun copy(error: Throwable?, name: String, autoUpdate: Boolean) = APISource(\n        name,\n        uid,\n        versionHash,\n        error,\n        file,\n        endpoint,\n        autoUpdate,\n        loader,\n        getUpdate\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/sources/Source.kt",
    "content": "package app.revanced.manager.domain.sources\n\nimport androidx.compose.runtime.Stable\nimport app.revanced.manager.data.redux.ActionContext\nimport app.revanced.manager.patcher.patch.PatchBundle\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.withContext\nimport java.io.File\nimport java.io.OutputStream\n\nfun interface Loader<T> {\n    fun load(file: File): T\n}\n\ntypealias PatchBundleSource = Source<PatchBundle>\n\n/**\n * A [PatchBundle] or [app.revanced.manager.downloader.Downloader] source.\n */\n@Stable\nsealed class Source<T>(\n    val name: String,\n    val uid: Int,\n    error: Throwable?,\n    protected val file: File,\n    protected val loader: Loader<T>\n) {\n    val state = when {\n        error != null -> State.Failed(error)\n        !hasInstalled() -> State.Missing\n        else -> State.Available(loader.load(file))\n    }\n\n    val isDefault inline get() = uid == 0\n    val loaded get() = @Suppress(\"UNCHECKED_CAST\") (state as? State.Available<T>)?.obj\n    val error get() = (state as? State.Failed)?.throwable\n\n    suspend fun ActionContext.deleteLocalFile() = withContext(Dispatchers.IO) {\n        file.delete()\n    }\n\n    abstract fun copy(error: Throwable? = this.error, name: String = this.name): Source<T>\n\n    protected fun hasInstalled() = file.exists()\n\n    protected fun outputStream(): OutputStream = with(file) {\n        // Android 14+ requires dex containers to be readonly.\n        try {\n            setWritable(true, true)\n            outputStream()\n        } finally {\n            setReadOnly()\n        }\n    }\n\n    sealed interface State {\n        data object Missing : State\n        data class Failed(val throwable: Throwable) : State\n        data class Available<T>(val obj: T) : State\n    }\n}\n\nobject Extensions {\n    val <T> Source<T>.asRemoteOrNull inline get() = this as? RemoteSource<T>\n    val PatchBundleSource.version get() = loaded?.manifestAttributes?.version\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/worker/Worker.kt",
    "content": "package app.revanced.manager.domain.worker\n\nimport android.content.Context\nimport androidx.work.CoroutineWorker\nimport androidx.work.WorkerParameters\n\nabstract class Worker<ARGS>(context: Context, parameters: WorkerParameters) : CoroutineWorker(context, parameters)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/domain/worker/WorkerRepository.kt",
    "content": "package app.revanced.manager.domain.worker\n\nimport android.app.Application\nimport androidx.work.ExistingWorkPolicy\nimport androidx.work.OneTimeWorkRequest\nimport androidx.work.OutOfQuotaPolicy\nimport androidx.work.WorkManager\nimport java.util.UUID\n\nclass WorkerRepository(app: Application) {\n    val workManager = WorkManager.getInstance(app)\n\n    /**\n     * The standard WorkManager communication APIs use [androidx.work.Data], which has too many limitations.\n     * We can get around those limits by passing inputs using global variables instead.\n     */\n    val workerInputs = mutableMapOf<UUID, Any>()\n\n    @Suppress(\"UNCHECKED_CAST\")\n    fun <A : Any, W : Worker<A>> claimInput(worker: W): A {\n        val data = workerInputs[worker.id] ?: throw IllegalStateException(\"Worker was not launched via WorkerRepository\")\n        workerInputs.remove(worker.id)\n\n        return data as A\n    }\n\n    inline fun <reified W : Worker<A>, A : Any> launchExpedited(name: String, input: A): UUID {\n        val request =\n            OneTimeWorkRequest.Builder(W::class.java) // create Worker\n                .setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)\n                .build()\n        workerInputs[request.id] = input\n        workManager.enqueueUniqueWork(name, ExistingWorkPolicy.REPLACE, request)\n        return request.id\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/network/api/ReVancedAPI.kt",
    "content": "package app.revanced.manager.network.api\n\nimport android.util.Log\nimport app.revanced.manager.BuildConfig\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.manager.base.Preference\nimport app.revanced.manager.network.dto.ReVancedAnnouncement\nimport app.revanced.manager.network.dto.ReVancedAsset\nimport app.revanced.manager.network.dto.ReVancedGitRepository\nimport app.revanced.manager.network.dto.ReVancedInfo\nimport app.revanced.manager.network.service.HttpService\nimport app.revanced.manager.network.utils.APIResponse\nimport app.revanced.manager.network.utils.getOrThrow\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.withContext\nimport io.ktor.client.request.url\n\nclass ReVancedAPI(\n    private val client: HttpService,\n    private val prefs: PreferencesManager\n) {\n    private suspend fun apiUrl() = prefs.api.get()\n\n    private suspend inline fun <reified T> request(api: String, route: String): APIResponse<T> =\n        withContext(Dispatchers.IO) {\n            val fullUrl = \"$api/v5/$route\"\n            try {\n                Log.d(\"API\", \"Requesting: $fullUrl\")\n\n                client.request {\n                    url(fullUrl)\n                }\n\n            } catch (e: Exception) {\n                Log.e(\"API\", \"Failed request: $fullUrl\", e)\n                throw e\n            }\n        }\n\n    private suspend inline fun <reified T> request(route: String) = request<T>(apiUrl(), route)\n\n    suspend fun getAnnouncements() = request<List<ReVancedAnnouncement>>(\"announcements\")\n\n    suspend fun getAppUpdate() =\n        getLatestAppInfo().getOrThrow().takeIf { it.version.removePrefix(\"v\") != BuildConfig.VERSION_NAME }\n\n    suspend fun getLatestAppInfo() =\n        request<ReVancedAsset>(\"manager${prefs.useManagerPrereleases.prereleaseString()}\")\n\n    suspend fun getPatchesUpdate() = request<ReVancedAsset>(\"patches${prefs.usePatchesPrereleases.prereleaseString()}\")\n\n    suspend fun getDownloaderUpdate() = request<ReVancedAsset>(\"manager/downloaders${prefs.useDownloaderPrerelease.prereleaseString()}\")\n\n    suspend fun getContributors() = request<List<ReVancedGitRepository>>(\"contributors\")\n\n    suspend fun getInfo() = request<ReVancedInfo>(\"about\")\n\n    private companion object {\n        suspend fun Preference<Boolean>.prereleaseString() = if (get()) \"/prerelease\" else \"\"\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/network/downloader/DownloaderPackage.kt",
    "content": "package app.revanced.manager.network.downloader\n\nimport android.content.Context\n\ndata class DownloaderPackage(\n    val downloaders: List<LoadedDownloader>,\n    val classLoader: ClassLoader,\n    val context: Context,\n    val name: String,\n    val version: String\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/network/downloader/LoadedDownloader.kt",
    "content": "package app.revanced.manager.network.downloader\n\nimport android.os.Parcelable\nimport app.revanced.manager.downloader.Downloader\nimport app.revanced.manager.downloader.Scope\n\nclass LoadedDownloader(\n    val packageName: String,\n    val className: String,\n    val name: String,\n    val scopeImpl: Scope,\n    val impl: Downloader<Parcelable>\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/network/downloader/ParceledDownloaderData.kt",
    "content": "package app.revanced.manager.network.downloader\n\nimport android.os.Build\nimport android.os.Bundle\nimport android.os.Parcelable\nimport kotlinx.parcelize.Parcelize\n\n@Parcelize\n/**\n * A container for [Parcelable] data returned from downloader. Instances of this class can be safely stored in a bundle without needing to set the [ClassLoader].\n */\nclass ParceledDownloaderData private constructor(\n    val downloaderPackageName: String,\n    val downloaderClassName: String,\n    private val bundle: Bundle\n) : Parcelable {\n    constructor(downloader: LoadedDownloader, data: Parcelable) : this(\n        downloader.packageName,\n        downloader.className,\n        createBundle(data)\n    )\n\n    fun unwrapWith(classLoader: ClassLoader): Parcelable {\n        bundle.classLoader = classLoader\n\n        return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n            val className = bundle.getString(CLASS_NAME_KEY)!!\n            val clazz = classLoader.loadClass(className)\n\n            bundle.getParcelable(DATA_KEY, clazz)!! as Parcelable\n        } else @Suppress(\"Deprecation\") bundle.getParcelable(DATA_KEY)!!\n    }\n\n    private companion object {\n        const val CLASS_NAME_KEY = \"class\"\n        const val DATA_KEY = \"data\"\n\n        fun createBundle(data: Parcelable) = Bundle().apply {\n            putParcelable(DATA_KEY, data)\n\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) putString(\n                CLASS_NAME_KEY,\n                data::class.java.canonicalName\n            )\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/network/dto/ReVancedAnnouncement.kt",
    "content": "package app.revanced.manager.network.dto\n\nimport android.os.Parcelable\nimport kotlin.time.Clock\nimport kotlin.time.Instant\nimport kotlinx.parcelize.Parcelize\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Parcelize\n@Serializable\ndata class ReVancedAnnouncement(\n    val id: Long,\n    val author: String,\n    val title: String,\n    val content: String,\n    val tags: List<String>,\n    @SerialName(\"created_at\")\n    val createdAt: Instant,\n    @SerialName(\"archived_at\")\n    val archivedAt: Instant?,\n    val level: Int,\n) : Parcelable {\n    val isArchived get() = archivedAt?.let { it < Clock.System.now() } ?: false\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/network/dto/ReVancedAsset.kt",
    "content": "package app.revanced.manager.network.dto\n\nimport kotlinx.datetime.LocalDateTime\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class ReVancedAsset (\n    @SerialName(\"download_url\")\n    val downloadUrl: String,\n    @SerialName(\"created_at\")\n    val createdAt: LocalDateTime,\n    @SerialName(\"signature_download_url\")\n    val signatureDownloadUrl: String? = null,\n    val description: String,\n    val version: String,\n)\n\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/network/dto/ReVancedContributors.kt",
    "content": "package app.revanced.manager.network.dto\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class ReVancedGitRepository(\n    val name: String,\n    val url: String,\n    val contributors: List<ReVancedContributor>,\n)\n\n@Serializable\ndata class ReVancedContributor(\n    @SerialName(\"name\") val username: String,\n    @SerialName(\"avatar_url\") val avatarUrl: String,\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/network/dto/ReVancedInfo.kt",
    "content": "package app.revanced.manager.network.dto\n\nimport kotlinx.serialization.SerialName\nimport kotlinx.serialization.Serializable\n\n@Serializable\ndata class ReVancedInfo(\n    val name: String,\n    val about: String,\n    val keys: String,\n    val branding: ReVancedBranding,\n    val status: String,\n    val contact: ReVancedContact,\n    val socials: List<ReVancedSocial>,\n    val donations: ReVancedDonation,\n)\n\n@Serializable\ndata class ReVancedBranding(\n    val logo: String,\n)\n\n@Serializable\ndata class ReVancedContact(\n    val email: String,\n)\n\n@Serializable\ndata class ReVancedSocial(\n    val name: String,\n    val url: String,\n    val preferred: Boolean = false,\n)\n\n@Serializable\ndata class ReVancedDonation(\n    val wallets: List<ReVancedWallet>,\n    val links: List<ReVancedDonationLink>,\n)\n\n@Serializable\ndata class ReVancedWallet(\n    val network: String,\n    @SerialName(\"currency_code\")\n    val currencyCode: String,\n    val address: String,\n    val preferred: Boolean = false\n)\n\n@Serializable\ndata class ReVancedDonationLink(\n    val name: String,\n    val url: String,\n    val preferred: Boolean = false,\n)\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/network/service/HttpService.kt",
    "content": "package app.revanced.manager.network.service\n\nimport android.util.Log\nimport app.revanced.manager.network.utils.APIError\nimport app.revanced.manager.network.utils.APIFailure\nimport app.revanced.manager.network.utils.APIResponse\nimport app.revanced.manager.util.tag\nimport io.ktor.client.HttpClient\nimport io.ktor.client.call.body\nimport io.ktor.client.request.HttpRequestBuilder\nimport io.ktor.client.request.prepareGet\nimport io.ktor.client.request.request\nimport io.ktor.client.statement.bodyAsText\nimport io.ktor.http.HttpStatusCode\nimport io.ktor.http.isSuccess\nimport io.ktor.utils.io.ByteReadChannel\nimport io.ktor.utils.io.core.isNotEmpty\nimport io.ktor.utils.io.core.readBytes\nimport io.ktor.utils.io.exhausted\nimport io.ktor.utils.io.readRemaining\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.withContext\nimport kotlinx.io.asSink\nimport kotlinx.serialization.json.Json\nimport java.io.File\nimport java.io.OutputStream\n\n/**\n * @author Aliucord Authors, DiamondMiner88\n */\nclass HttpService(\n    val json: Json,\n    val http: HttpClient,\n) {\n    suspend inline fun <reified T> request(builder: HttpRequestBuilder.() -> Unit = {}): APIResponse<T> {\n        var body: String? = null\n\n        val response = try {\n            val response = http.request(builder)\n\n            if (response.status.isSuccess()) {\n                body = response.bodyAsText()\n\n                if (T::class == String::class) {\n                    return APIResponse.Success(body as T)\n                }\n\n                APIResponse.Success(json.decodeFromString<T>(body))\n            } else {\n                body = try {\n                    response.bodyAsText()\n                } catch (t: Throwable) {\n                    null\n                }\n\n                Log.e(\n                    tag,\n                    \"Failed to fetch: API error, http status: ${response.status}, body: $body\"\n                )\n                APIResponse.Error(APIError(response.status, body))\n            }\n        } catch (t: Throwable) {\n            Log.e(tag, \"Failed to fetch: error: $t, body: $body\")\n            APIResponse.Failure(APIFailure(t, body))\n        }\n        return response\n    }\n\n    suspend fun streamTo(\n        outputStream: OutputStream,\n        builder: HttpRequestBuilder.() -> Unit\n    ) {\n        http.prepareGet(builder).execute { httpResponse ->\n            if (httpResponse.status.isSuccess()) {\n                withContext(Dispatchers.IO) {\n                    val channel: ByteReadChannel = httpResponse.body()\n                    val sink = outputStream.asSink()\n                    while (!channel.exhausted()) {\n                        val packet = channel.readRemaining(DEFAULT_BUFFER_SIZE.toLong())\n                        packet.transferTo(sink)\n                    }\n                }\n\n            } else {\n                throw HttpException(httpResponse.status)\n            }\n        }\n    }\n\n    suspend fun download(\n        saveLocation: File,\n        builder: HttpRequestBuilder.() -> Unit\n    ) = saveLocation.outputStream().use { streamTo(it, builder) }\n\n    class HttpException(status: HttpStatusCode) : Exception(\"Failed to fetch: http status: $status\")\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/network/utils/APIResponse.kt",
    "content": "@file:Suppress(\"NOTHING_TO_INLINE\")\n\npackage app.revanced.manager.network.utils\n\nimport io.ktor.http.*\n\n/**\n * @author Aliucord Authors, DiamondMiner88\n */\n\nsealed interface APIResponse<T> {\n    data class Success<T>(val data: T) : APIResponse<T>\n    data class Error<T>(val error: APIError) : APIResponse<T>\n    data class Failure<T>(val error: APIFailure) : APIResponse<T>\n}\n\nclass APIError(code: HttpStatusCode, body: String?) : Exception(\"HTTP Code $code, Body: $body\")\n\nclass APIFailure(error: Throwable, body: String?) : Exception(body ?: error.message, error)\n\ninline fun <T, R> APIResponse<T>.fold(\n    success: (T) -> R,\n    error: (APIError) -> R,\n    failure: (APIFailure) -> R\n): R {\n    return when (this) {\n        is APIResponse.Success -> success(this.data)\n        is APIResponse.Error -> error(this.error)\n        is APIResponse.Failure -> failure(this.error)\n    }\n}\n\ninline fun <T, R> APIResponse<T>.fold(\n    success: (T) -> R,\n    fail: (Exception) -> R,\n): R {\n    return when (this) {\n        is APIResponse.Success -> success(data)\n        is APIResponse.Error -> fail(error)\n        is APIResponse.Failure -> fail(error)\n    }\n}\n\n@Suppress(\"UNCHECKED_CAST\")\ninline fun <T, R> APIResponse<T>.transform(block: (T) -> R): APIResponse<R> {\n    return if (this !is APIResponse.Success) {\n        // Error and Failure do not use the generic value\n        this as APIResponse<R>\n    } else {\n        APIResponse.Success(block(data))\n    }\n}\n\ninline fun <T> APIResponse<T>.getOrThrow(): T {\n    return fold(\n        success = { it },\n        fail = { throw it }\n    )\n}\n\ninline fun <T> APIResponse<T>.getOrNull(): T? {\n    return fold(\n        success = { it },\n        fail = { null }\n    )\n}\n\n@Suppress(\"UNCHECKED_CAST\")\ninline fun <T, R> APIResponse<T>.chain(block: (T) -> APIResponse<R>): APIResponse<R> {\n    return if (this !is APIResponse.Success) {\n        // Error and Failure do not use the generic value\n        this as APIResponse<R>\n    } else {\n        block(data)\n    }\n}\n\n@Suppress(\"UNCHECKED_CAST\")\ninline fun <T, R> APIResponse<T>.chain(secondary: APIResponse<R>): APIResponse<R> {\n    return if (secondary is APIResponse.Success) {\n        secondary\n    } else {\n        // Error and Failure do not use the generic value\n        this as APIResponse<R>\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/patcher/LibraryResolver.kt",
    "content": "package app.revanced.manager.patcher\n\nimport android.content.Context\nimport java.io.File\n\nabstract class LibraryResolver {\n    protected fun findLibrary(context: Context, searchTerm: String): File? = File(context.applicationInfo.nativeLibraryDir).run {\n        list { _, f -> !File(f).isDirectory && f.contains(searchTerm) }?.firstOrNull()?.let { resolve(it) }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/patcher/PatcherProgress.kt",
    "content": "package app.revanced.manager.patcher\n\nimport android.os.Parcelable\nimport app.revanced.manager.patcher.logger.LogLevel\nimport kotlinx.parcelize.Parcelize\n\n\n@Parcelize\nsealed class ProgressEvent : Parcelable {\n    abstract val stepId: StepId?\n\n    data class Started(override val stepId: StepId) : ProgressEvent()\n\n    data class Progress(\n        override val stepId: StepId,\n        val current: Long? = null,\n        val total: Long? = null,\n        val message: String? = null,\n    ) : ProgressEvent()\n\n    data class Log(\n        override val stepId: StepId,\n        val level: LogLevel,\n        val message: String,\n    ) : ProgressEvent()\n\n    data class Completed(\n        override val stepId: StepId,\n    ) : ProgressEvent()\n\n    data class Failed(\n        override val stepId: StepId?,\n        val error: RemoteError,\n    ) : ProgressEvent()\n}\n\n/**\n * Parcelable wrapper for [ProgressEvent].\n *\n * Required because AIDL does not support sealed classes.\n */\n@Parcelize\ndata class ProgressEventParcel(val event: ProgressEvent) : Parcelable\n\nfun ProgressEventParcel.toEvent(): ProgressEvent = event\nfun ProgressEvent.toParcel(): ProgressEventParcel = ProgressEventParcel(this)\n\n@Parcelize\nsealed class StepId : Parcelable {\n    data object DownloadAPK : StepId()\n    data object LoadPatches : StepId()\n    data object ReadAPK : StepId()\n    data object ExecutePatches : StepId()\n    data class ExecutePatch(val index: Int) : StepId()\n    data object WriteAPK : StepId()\n    data object SignAPK : StepId()\n}\n\n@Parcelize\ndata class RemoteError(\n    val type: String,\n    val message: String?,\n    val stackTrace: String,\n) : Parcelable\n\nfun Exception.toRemoteError() = RemoteError(\n    type = this::class.java.name,\n    message = this.message,\n    stackTrace = this.stackTraceToString(),\n)\n\n\ninline fun <T> runStep(\n    stepId: StepId,\n    onEvent: (ProgressEvent) -> Unit,\n    block: () -> T,\n): T = try {\n    onEvent(ProgressEvent.Started(stepId))\n    val value = block()\n    onEvent(ProgressEvent.Completed(stepId))\n    value\n} catch (error: Exception) {\n    onEvent(ProgressEvent.Failed(stepId, error.toRemoteError()))\n    throw error\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/patcher/Session.kt",
    "content": "package app.revanced.manager.patcher\n\nimport app.revanced.library.ApkUtils.applyTo\nimport app.revanced.manager.patcher.Session.Companion.component1\nimport app.revanced.manager.patcher.Session.Companion.component2\nimport app.revanced.manager.patcher.logger.Logger\nimport app.revanced.manager.patcher.logger.forStep\nimport app.revanced.manager.patcher.logger.withJavaLogging\nimport app.revanced.patcher.PatchesResult\nimport app.revanced.patcher.patch.Patch\nimport app.revanced.patcher.patch.PatchResult\nimport app.revanced.patcher.patcher\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.currentCoroutineContext\nimport kotlinx.coroutines.ensureActive\nimport kotlinx.coroutines.withContext\nimport java.io.Closeable\nimport java.io.File\nimport java.nio.file.Files\nimport java.nio.file.StandardCopyOption\n\ninternal typealias PatchList = List<Patch>\nprivate typealias Patcher = (emit: (PatchResult) -> Unit) -> PatchesResult\n\nclass Session(\n    cacheDir: String,\n    private val frameworkDir: String,\n    private val aaptPath: String,\n    private val logger: Logger,\n    private val input: File,\n    private val onEvent: (ProgressEvent) -> Unit,\n) : Closeable {\n    private val tempDir = File(cacheDir).resolve(\"patcher\").also { it.mkdirs() }\n\n\n    private suspend fun applyPatchesVerbose(\n        patcher: Patcher,\n        indices: Map<Patch, Int>,\n        phaseLogger: Logger = logger,\n    ) =\n        withContext(\n            Dispatchers.Default\n        ) {\n            val context = currentCoroutineContext()\n            patcher { (patch, exception) ->\n                // Make the patching process cancelable.\n                context.ensureActive()\n\n                val index = indices[patch] ?: return@patcher\n\n                if (exception != null) {\n                    onEvent(\n                        ProgressEvent.Failed(\n                            StepId.ExecutePatch(index),\n                            exception.toRemoteError(),\n                        )\n                    )\n                    phaseLogger.error(\"${patch.name} failed:\")\n                    phaseLogger.error(exception.stackTraceToString())\n                    throw exception\n                }\n\n                onEvent(\n                    ProgressEvent.Completed(\n                        StepId.ExecutePatch(index),\n                    )\n                )\n            }\n        }\n\n    suspend fun run(output: File, selectedPatches: PatchList) {\n        val indices = HashMap<Patch, Int>(selectedPatches.size)\n        selectedPatches.forEachIndexed { idx, patch -> indices[patch] = idx }\n\n        val prepareLogger = logger.forStep(StepId.ReadAPK, onEvent)\n        val patchingLogger = logger.forStep(StepId.ExecutePatches, onEvent)\n        val writingLogger = logger.forStep(StepId.WriteAPK, onEvent)\n\n        val patcher = runStep(StepId.ReadAPK, onEvent) {\n            prepareLogger.withJavaLogging {\n                patcher(\n                    apkFile = input,\n                    temporaryFilesPath = tempDir,\n                    frameworkFileDirectory = frameworkDir,\n                    aaptBinaryPath = File(aaptPath)\n                ) { _packageName, _version ->\n                    selectedPatches.toSet()\n                }\n            }\n        }\n\n        val result = runStep(StepId.ExecutePatches, onEvent) {\n            patchingLogger.withJavaLogging {\n                patchingLogger.info(\"Applying patches...\")\n                applyPatchesVerbose(patcher, indices, patchingLogger)\n            }\n        }\n\n        runStep(StepId.WriteAPK, onEvent) {\n            writingLogger.withJavaLogging {\n                writingLogger.info(\"Writing patched files...\")\n\n                val patched = tempDir.resolve(\"result.apk\")\n                withContext(Dispatchers.IO) {\n                    Files.copy(input.toPath(), patched.toPath(), StandardCopyOption.REPLACE_EXISTING)\n                }\n                result.applyTo(patched)\n\n                writingLogger.info(\"Patched apk saved to $patched\")\n\n                withContext(Dispatchers.IO) {\n                    Files.move(patched.toPath(), output.toPath(), StandardCopyOption.REPLACE_EXISTING)\n                }\n            }\n        }\n    }\n\n    override fun close() {\n        tempDir.deleteRecursively()\n    }\n\n    companion object {\n        operator fun PatchResult.component1() = patch\n        operator fun PatchResult.component2() = exception\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/patcher/aapt/Aapt.kt",
    "content": "package app.revanced.manager.patcher.aapt\n\nimport android.content.Context\nimport app.revanced.manager.patcher.LibraryResolver\nimport android.os.Build.SUPPORTED_ABIS as DEVICE_ABIS\nobject Aapt : LibraryResolver() {\n    private val WORKING_ABIS = setOf(\"arm64-v8a\", \"x86\", \"x86_64\", \"armeabi-v7a\")\n\n    fun supportsDevice() = (DEVICE_ABIS intersect WORKING_ABIS).isNotEmpty()\n\n    fun binary(context: Context) = findLibrary(context, \"aapt\")\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/patcher/logger/Logger.kt",
    "content": "package app.revanced.manager.patcher.logger\n\nimport app.revanced.manager.patcher.ProgressEvent\nimport app.revanced.manager.patcher.StepId\nimport java.util.logging.Handler\nimport java.util.logging.Level\nimport java.util.logging.LogRecord\n\nabstract class Logger {\n    abstract fun log(level: LogLevel, message: String)\n\n    // Logger-name metadata is only used for step-view filtering; default behavior keeps full logs.\n    open fun log(level: LogLevel, message: String, loggerName: String?) = log(level, message)\n\n    fun trace(msg: String) = log(LogLevel.TRACE, msg)\n    fun info(msg: String) = log(LogLevel.INFO, msg)\n    fun warn(msg: String) = log(LogLevel.WARN, msg)\n    fun error(msg: String) = log(LogLevel.ERROR, msg)\n\n    val handler = object : Handler() {\n        override fun publish(record: LogRecord) {\n            val msg = record.message\n            val loggerName = record.loggerName\n\n            when (record.level) {\n                Level.INFO -> log(LogLevel.INFO, msg, loggerName)\n                Level.SEVERE -> log(LogLevel.ERROR, msg, loggerName)\n                Level.WARNING -> log(LogLevel.WARN, msg, loggerName)\n                else -> log(LogLevel.TRACE, msg, loggerName)\n            }\n        }\n\n        override fun flush() = Unit\n        override fun close() = Unit\n    }\n}\n\nfun Logger.forStep(stepId: StepId, onEvent: (ProgressEvent) -> Unit) = object : Logger() {\n    override fun log(level: LogLevel, message: String) {\n        this@forStep.log(level, message)\n        onEvent(ProgressEvent.Log(stepId, level, message))\n    }\n\n    override fun log(level: LogLevel, message: String, loggerName: String?) {\n        this@forStep.log(level, message, loggerName)\n\n        // App loggers should use empty or \"app.revanced\" prefix;\n        // filter out logs from libraries to avoid cluttering the step view.\n        if (loggerName.isNullOrEmpty() || loggerName.startsWith(\"app.revanced\")) {\n            onEvent(ProgressEvent.Log(stepId, level, message))\n        }\n    }\n}\n\ninline fun <T> Logger.withJavaLogging(block: () -> T): T {\n    val rootLogger = java.util.logging.Logger.getLogger(\"\")\n\n    rootLogger.handlers.forEach {\n        it.close()\n        rootLogger.removeHandler(it)\n    }\n\n    rootLogger.addHandler(handler)\n\n    return try {\n        block()\n    } finally {\n        rootLogger.removeHandler(handler)\n    }\n}\n\nenum class LogLevel {\n    TRACE,\n    INFO,\n    WARN,\n    ERROR,\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/patcher/patch/PatchBundle.kt",
    "content": "package app.revanced.manager.patcher.patch\n\nimport kotlinx.parcelize.IgnoredOnParcel\nimport android.os.Parcelable\nimport app.revanced.patcher.patch.Patch\nimport app.revanced.patcher.patch.loadPatches\nimport kotlinx.parcelize.Parcelize\nimport java.io.File\nimport java.io.IOException\nimport java.util.jar.JarFile\nimport kotlin.collections.filter\n\n@Parcelize\ndata class PatchBundle(val patchesJar: String) : Parcelable {\n    /**\n     * The [java.util.jar.Manifest] of [patchesJar].\n     */\n    @IgnoredOnParcel\n    private val manifest by lazy {\n        try {\n            JarFile(patchesJar).use { it.manifest }\n        } catch (_: IOException) {\n            null\n        }\n    }\n\n    @IgnoredOnParcel\n    val manifestAttributes by lazy {\n        if (manifest != null)\n            ManifestAttributes(\n                name = readManifestAttribute(\"name\"),\n                version = readManifestAttribute(\"version\"),\n                description = readManifestAttribute(\"description\"),\n                source = readManifestAttribute(\"source\"),\n                author = readManifestAttribute(\"author\"),\n                contact = readManifestAttribute(\"contact\"),\n                website = readManifestAttribute(\"website\"),\n                license = readManifestAttribute(\"license\")\n            ) else\n            null\n    }\n\n    private fun readManifestAttribute(name: String) = manifest?.mainAttributes?.getValue(name)\n        ?.takeIf { it.isNotBlank() } // If empty, set it to null instead.\n\n    data class ManifestAttributes(\n        val name: String?,\n        val version: String?,\n        val description: String?,\n        val source: String?,\n        val author: String?,\n        val contact: String?,\n        val website: String?,\n        val license: String?\n    )\n\n    object Loader {\n        private fun patches(bundles: Iterable<PatchBundle>) = buildMap {\n            val bundleMap = bundles.associateBy { it.patchesJar }\n\n            loadPatches(\n                *bundleMap.keys.map(::File).toTypedArray(),\n                onFailedToLoad = { file, throwable ->\n                    this[bundleMap[file.absolutePath]!!] = Result.failure(throwable)\n                }\n            ).patchesByFile.forEach { (file, patches) ->\n                putIfAbsent(bundleMap[file.absolutePath]!!, Result.success(patches))\n            }\n        }\n\n        fun metadata(bundles: Iterable<PatchBundle>): Map<PatchBundle, Result<Set<PatchInfo>>> =\n            patches(bundles).mapValues { (_, result) ->\n                result.map { patches ->\n                    patches.mapTo(\n                        HashSet(patches.size),\n                        ::PatchInfo\n                    )\n                }\n            }\n\n        fun patches(bundles: Iterable<PatchBundle>, packageName: String): Map<PatchBundle, Set<Patch>> =\n            patches(bundles).mapValues { (_, result) ->\n                val patches = result.getOrDefault(emptySet())\n\n                patches.filterTo(HashSet(patches.size)) { patch ->\n                    val compatiblePackages = patch.compatiblePackages\n                        ?: // The patch has no compatibility constraints, which means it is universal.\n                        return@filterTo true\n\n                    if (!compatiblePackages.any { (name, _) -> name == packageName }) {\n                        // Patch is not compatible with this package.\n                        return@filterTo false\n                    }\n\n                    true\n                }\n            }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/patcher/patch/PatchBundleInfo.kt",
    "content": "package app.revanced.manager.patcher.patch\n\nimport app.revanced.manager.util.PatchSelection\n\n/**\n * A base class for storing [PatchBundle] metadata.\n */\nsealed class PatchBundleInfo {\n    /**\n     * The name of the bundle.\n     */\n    abstract val name: String\n\n    /**\n     * The version of the bundle.\n     */\n    abstract val version: String?\n\n    /**\n     * The unique ID of the bundle.\n     */\n    abstract val uid: Int\n\n    /**\n     * The patch list.\n     */\n    abstract val patches: List<PatchInfo>\n\n    /**\n     * Information about a bundle and all the patches it contains.\n     *\n     * @see [PatchBundleInfo]\n     */\n    data class Global(\n        override val name: String,\n        override val version: String?,\n        override val uid: Int,\n        override val patches: List<PatchInfo>\n    ) : PatchBundleInfo() {\n        /**\n         * Create a [PatchBundleInfo.Scoped] that only contains information about patches that are relevant for a specific [packageName].\n         */\n        fun forPackage(packageName: String, version: String?): Scoped {\n            val relevantPatches = patches.filter { it.compatibleWith(packageName) }\n            val compatible = mutableListOf<PatchInfo>()\n            val incompatible = mutableListOf<PatchInfo>()\n            val universal = mutableListOf<PatchInfo>()\n\n            relevantPatches.forEach {\n                val targetList = when {\n                    it.compatiblePackages == null -> universal\n                    // Before a concrete version is chosen, keep version-targeted patches visible.\n                    version == null || it.supports(\n                        packageName,\n                        version\n                    ) -> compatible\n\n                    else -> incompatible\n                }\n\n                targetList.add(it)\n            }\n\n            return Scoped(\n                name,\n                this.version,\n                uid,\n                relevantPatches,\n                compatible,\n                incompatible,\n                universal\n            )\n        }\n    }\n\n    /**\n     * Contains information about a bundle that is relevant for a specific package name.\n     *\n     * @param compatible Patches that are compatible with the specified package name and version.\n     * @param incompatible Patches that are compatible with the specified package name but not version.\n     * @param universal Patches that are compatible with all packages.\n     * @see [PatchBundleInfo.Global.forPackage]\n     * @see [PatchBundleInfo]\n     */\n    data class Scoped(\n        override val name: String,\n        override val version: String?,\n        override val uid: Int,\n        override val patches: List<PatchInfo>,\n        val compatible: List<PatchInfo>,\n        val incompatible: List<PatchInfo>,\n        val universal: List<PatchInfo>\n    ) : PatchBundleInfo() {\n        fun patchSequence(allowIncompatible: Boolean) = if (allowIncompatible) {\n            patches.asSequence()\n        } else {\n            sequence {\n                yieldAll(compatible)\n                yieldAll(universal)\n            }\n        }\n    }\n\n    companion object Extensions {\n        inline fun Iterable<Scoped>.toPatchSelection(\n            allowIncompatible: Boolean,\n            condition: (Int, PatchInfo) -> Boolean\n        ): PatchSelection = this.associate { bundle ->\n            val patches =\n                bundle.patchSequence(allowIncompatible)\n                    .mapNotNullTo(mutableSetOf()) { patch ->\n                        patch.name.takeIf {\n                            condition(\n                                bundle.uid,\n                                patch\n                            )\n                        }\n                    }\n\n            bundle.uid to patches\n        }\n\n        /**\n         * Algorithm for determining whether all required options have been set.\n         */\n        inline fun Iterable<Scoped>.requiredOptionsSet(\n            allowIncompatible: Boolean,\n            crossinline isSelected: (Scoped, PatchInfo) -> Boolean,\n            crossinline optionsForPatch: (Scoped, PatchInfo) -> Map<String, Any?>?\n        ) = all bundle@{ bundle ->\n            bundle\n                .patchSequence(allowIncompatible)\n                .filter { isSelected(bundle, it) }\n                .all patch@{\n                    if (it.options.isNullOrEmpty()) return@patch true\n                    val opts by lazy { optionsForPatch(bundle, it).orEmpty() }\n\n                    it.options.all option@{ option ->\n                        if (!option.required || option.default != null) return@option true\n\n                        option.name in opts\n                    }\n                }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/patcher/patch/PatchInfo.kt",
    "content": "package app.revanced.manager.patcher.patch\n\nimport androidx.compose.runtime.Immutable\nimport app.revanced.patcher.patch.Patch\nimport app.revanced.patcher.patch.Option as PatchOption\nimport app.revanced.patcher.patch.resourcePatch\nimport kotlinx.collections.immutable.ImmutableList\nimport kotlinx.collections.immutable.ImmutableSet\nimport kotlinx.collections.immutable.toImmutableList\nimport kotlinx.collections.immutable.toImmutableSet\nimport kotlin.reflect.KType\n\ndata class PatchInfo(\n    val name: String,\n    val description: String?,\n    val include: Boolean,\n    val compatiblePackages: ImmutableList<CompatiblePackage>?,\n    val options: ImmutableList<Option<*>>?\n) {\n    constructor(patch: Patch) : this(\n        patch.name.orEmpty(),\n        patch.description,\n        patch.use,\n        patch.compatiblePackages?.map { (pkgName, versions) ->\n            CompatiblePackage(\n                pkgName,\n                versions?.toImmutableSet()\n            )\n        }?.toImmutableList(),\n        patch.options.map { (_, option) -> Option(option) }.ifEmpty { null }?.toImmutableList()\n    )\n\n    fun compatibleWith(packageName: String) =\n        compatiblePackages?.any { it.packageName == packageName } ?: true\n\n    fun supports(packageName: String, versionName: String?): Boolean {\n        val packages = compatiblePackages ?: return true // Universal patch\n\n        return packages.any { pkg ->\n            if (pkg.packageName != packageName) return@any false\n            if (pkg.versions == null) return@any true\n\n            versionName != null && versionName in pkg.versions\n        }\n    }\n\n    /**\n     * Create a fake [Patch] with the same metadata as the [PatchInfo] instance.\n     * The resulting patch cannot be executed.\n     * This is necessary because some functions in ReVanced Library only accept full [Patch] objects.\n     */\n    fun toPatcherPatch(): Patch =\n        resourcePatch(name = name, description = description, use = include) {\n            compatiblePackages?.let { pkgs ->\n                compatibleWith(*pkgs.map { it.packageName to it.versions }.toTypedArray())\n            }\n        }\n}\n\n@Immutable\ndata class CompatiblePackage(\n    val packageName: String,\n    val versions: ImmutableSet<String>?\n)\n\n@Immutable\ndata class Option<T>(\n    val name: String,\n    val description: String,\n    val required: Boolean,\n    val type: KType,\n    val default: T?,\n    val presets: Map<String, T?>?,\n    val validator: (T?) -> Boolean,\n) {\n    constructor(option: PatchOption<T>) : this(\n        option.name,\n        option.description.orEmpty(),\n        option.required,\n        option.type,\n        option.default,\n        option.values,\n        { option.validator(option, it) },\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/patcher/runtime/CoroutineRuntime.kt",
    "content": "package app.revanced.manager.patcher.runtime\n\nimport android.content.Context\nimport app.revanced.manager.patcher.ProgressEvent\nimport app.revanced.manager.patcher.Session\nimport app.revanced.manager.patcher.StepId\nimport app.revanced.manager.patcher.logger.Logger\nimport app.revanced.manager.patcher.logger.forStep\nimport app.revanced.manager.patcher.logger.withJavaLogging\nimport app.revanced.manager.patcher.patch.PatchBundle\nimport app.revanced.manager.patcher.runStep\nimport app.revanced.manager.util.Options\nimport app.revanced.manager.util.PatchSelection\nimport java.io.File\n\n/**\n * Simple [Runtime] implementation that runs the patcher using coroutines.\n */\nclass CoroutineRuntime(context: Context) : Runtime(context) {\n    override suspend fun execute(\n        inputFile: String,\n        outputFile: String,\n        packageName: String,\n        selectedPatches: PatchSelection,\n        options: Options,\n        logger: Logger,\n        onEvent: (ProgressEvent) -> Unit,\n    ) {\n        val loadLogger = logger.forStep(StepId.LoadPatches, onEvent)\n\n        val patchList = runStep(StepId.LoadPatches, onEvent) {\n            loadLogger.withJavaLogging {\n                val selectedBundles = selectedPatches.keys\n                val bundles = bundles()\n                val uids = bundles.entries.associate { (key, value) -> value to key }\n\n                val allPatches =\n                    PatchBundle.Loader.patches(bundles.values, packageName)\n                        .mapKeys { (b, _) -> uids[b]!! }\n                        .filterKeys { it in selectedBundles }\n\n                val patchList = selectedPatches.flatMap { (bundle, selected) ->\n                    allPatches[bundle]?.filter { it.name in selected }\n                        ?: throw IllegalArgumentException(\"Patch bundle $bundle does not exist\")\n                }\n\n                // Set all patch options.\n                options.forEach { (bundle, bundlePatchOptions) ->\n                    val patches = allPatches[bundle] ?: return@forEach\n                    bundlePatchOptions.forEach { (patchName, configuredPatchOptions) ->\n                        val patchOptions = patches.single { it.name == patchName }.options\n                        configuredPatchOptions.forEach { (key, value) ->\n                            patchOptions[key] = value\n                        }\n                    }\n                }\n\n                patchList\n            }\n        }\n\n        val session = Session(\n            cacheDir,\n            frameworkPath,\n            aaptPath,\n            logger,\n            File(inputFile),\n            onEvent,\n        )\n\n        session.use { s ->\n            s.run(\n                File(outputFile),\n                patchList\n            )\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/patcher/runtime/ProcessRuntime.kt",
    "content": "package app.revanced.manager.patcher.runtime\n\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport android.os.Build\nimport android.util.Log\nimport androidx.core.content.ContextCompat\nimport app.revanced.manager.BuildConfig\nimport app.revanced.manager.patcher.runtime.process.IPatcherEvents\nimport app.revanced.manager.patcher.runtime.process.IPatcherProcess\nimport app.revanced.manager.patcher.LibraryResolver\nimport app.revanced.manager.patcher.ProgressEvent\nimport app.revanced.manager.patcher.ProgressEventParcel\nimport app.revanced.manager.patcher.logger.Logger\nimport app.revanced.manager.patcher.runtime.process.Parameters\nimport app.revanced.manager.patcher.runtime.process.PatchConfiguration\nimport app.revanced.manager.patcher.runtime.process.PatcherProcess\nimport app.revanced.manager.patcher.toEvent\nimport app.revanced.manager.util.Options\nimport app.revanced.manager.util.PM\nimport app.revanced.manager.util.PatchSelection\nimport app.revanced.manager.util.tag\nimport com.github.pgreze.process.Redirect\nimport com.github.pgreze.process.process\nimport kotlinx.coroutines.CompletableDeferred\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.coroutineScope\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withTimeout\nimport org.koin.core.component.inject\n\n/**\n * Runs the patcher in another process by using the app_process binary and IPC.\n */\nclass ProcessRuntime(private val context: Context) : Runtime(context) {\n    private val pm: PM by inject()\n\n    private suspend fun awaitBinderConnection(): IPatcherProcess {\n        val binderFuture = CompletableDeferred<IPatcherProcess>()\n        val receiver = object : BroadcastReceiver() {\n            override fun onReceive(context: Context, intent: Intent) {\n                val binder =\n                    intent.getBundleExtra(INTENT_BUNDLE_KEY)?.getBinder(BUNDLE_BINDER_KEY)!!\n\n                binderFuture.complete(IPatcherProcess.Stub.asInterface(binder))\n            }\n        }\n\n        ContextCompat.registerReceiver(context, receiver, IntentFilter().apply {\n            addAction(CONNECT_TO_APP_ACTION)\n        }, ContextCompat.RECEIVER_NOT_EXPORTED)\n\n        return try {\n            withTimeout(10000L) {\n                binderFuture.await()\n            }\n        } finally {\n            context.unregisterReceiver(receiver)\n        }\n    }\n\n    override suspend fun execute(\n        inputFile: String,\n        outputFile: String,\n        packageName: String,\n        selectedPatches: PatchSelection,\n        options: Options,\n        logger: Logger,\n        onEvent: (ProgressEvent) -> Unit,\n    ) = coroutineScope {\n        // Get the location of our own Apk.\n        val managerBaseApk = pm.getPackageInfo(context.packageName)!!.applicationInfo!!.sourceDir\n\n        val limit = \"${prefs.patcherProcessMemoryLimit.get()}M\"\n        val propOverride = resolvePropOverride(context)?.absolutePath\n            ?: throw Exception(\"Couldn't find prop override library\")\n\n        val env =\n            System.getenv().toMutableMap().apply {\n                putAll(\n                    mapOf(\n                        \"CLASSPATH\" to managerBaseApk,\n                        // Override the props used by ART to set the memory limit.\n                        \"LD_PRELOAD\" to propOverride,\n                        \"PROP_dalvik.vm.heapgrowthlimit\" to limit,\n                        \"PROP_dalvik.vm.heapsize\" to limit,\n                    )\n                )\n            }\n\n        launch(Dispatchers.IO) {\n            val result = process(\n                APP_PROCESS_BIN_PATH,\n                \"-Djava.io.tmpdir=$cacheDir\", // The process will use /tmp if this isn't set, which is a problem because that folder is not accessible on Android.\n                \"/\", // The unused cmd-dir parameter\n                \"--nice-name=${context.packageName}:Patcher\",\n                PatcherProcess::class.java.name, // The class with the main function.\n                context.packageName,\n                env = env,\n                stdout = Redirect.CAPTURE,\n                stderr = Redirect.CAPTURE,\n            ) { line ->\n                // The process shouldn't generally be writing to stdio. Log any lines we get as warnings.\n                logger.warn(\"[STDIO]: $line\")\n            }\n\n            Log.d(tag, \"Process finished with exit code ${result.resultCode}\")\n\n            if (result.resultCode != 0) throw Exception(\"Process exited with nonzero exit code ${result.resultCode}\")\n        }\n\n        val patching = CompletableDeferred<Unit>()\n\n        launch(Dispatchers.IO) {\n            val binder = awaitBinderConnection()\n\n            // Android Studio's fast deployment feature causes an issue where the other process will be running older code compared to the main process.\n            // The patcher process might be running outdated code if the fast deployment feature is used.\n            // To fix it, clear the cache in the Android settings or disable fast deployment (Run configurations -> Edit Configurations -> app -> Enable \"always deploy with package manager\").\n            if (BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {\n                logger.warn(\"External patcher process: app_process could be running outdated code. To resolve stale code, clear the app cache or disable Android 11 deployment optimizations in your IDE.\")\n            }\n\n            val eventHandler = object : IPatcherEvents.Stub() {\n                override fun log(level: String, msg: String) = logger.log(enumValueOf(level), msg)\n\n                override fun event(event: ProgressEventParcel?) {\n                    event?.let { onEvent(it.toEvent()) }\n                }\n\n                override fun finished(exceptionStackTrace: String?) {\n                    binder.exit()\n\n                    exceptionStackTrace?.let {\n                        patching.completeExceptionally(RemoteFailureException(it))\n                        return\n                    }\n                    patching.complete(Unit)\n                }\n            }\n\n            val parameters = Parameters(\n                aaptPath = aaptPath,\n                frameworkDir = frameworkPath,\n                cacheDir = cacheDir,\n                packageName = packageName,\n                inputFile = inputFile,\n                outputFile = outputFile,\n                configurations = bundles().map { (uid, bundle) ->\n                    PatchConfiguration(\n                        bundle,\n                        selectedPatches[uid].orEmpty(),\n                        options[uid].orEmpty()\n                    )\n                }\n            )\n\n            binder.start(parameters, eventHandler)\n        }\n\n        // Wait until patching finishes.\n        patching.await()\n    }\n\n    companion object : LibraryResolver() {\n        private const val APP_PROCESS_BIN_PATH = \"/system/bin/app_process\"\n\n        const val CONNECT_TO_APP_ACTION = \"CONNECT_TO_APP_ACTION\"\n        const val INTENT_BUNDLE_KEY = \"BUNDLE\"\n        const val BUNDLE_BINDER_KEY = \"BINDER\"\n\n        private fun resolvePropOverride(context: Context) = findLibrary(context, \"prop_override\")\n    }\n\n    /**\n     * An [Exception] occurred in the remote process while patching.\n     *\n     * @param originalStackTrace The stack trace of the original [Exception].\n     */\n    class RemoteFailureException(val originalStackTrace: String) : Exception()\n}\n\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/patcher/runtime/Runtime.kt",
    "content": "package app.revanced.manager.patcher.runtime\n\nimport android.content.Context\nimport app.revanced.manager.data.platform.Filesystem\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.repository.PatchBundleRepository\nimport app.revanced.manager.patcher.ProgressEvent\nimport app.revanced.manager.patcher.aapt.Aapt\nimport app.revanced.manager.patcher.logger.Logger\nimport app.revanced.manager.util.Options\nimport app.revanced.manager.util.PatchSelection\nimport kotlinx.coroutines.flow.first\nimport org.koin.core.component.KoinComponent\nimport org.koin.core.component.inject\nimport java.io.FileNotFoundException\n\nsealed class Runtime(context: Context) : KoinComponent {\n    private val fs: Filesystem by inject()\n    private val patchBundlesRepo: PatchBundleRepository by inject()\n    protected val prefs: PreferencesManager by inject()\n\n    protected val cacheDir: String = fs.tempDir.absolutePath\n    protected val aaptPath = Aapt.binary(context)?.absolutePath\n        ?: throw FileNotFoundException(\"Could not resolve aapt.\")\n    protected val frameworkPath: String =\n        context.cacheDir.resolve(\"framework\").also { it.mkdirs() }.absolutePath\n\n    protected suspend fun bundles() = patchBundlesRepo.bundles.first()\n\n    abstract suspend fun execute(\n        inputFile: String,\n        outputFile: String,\n        packageName: String,\n        selectedPatches: PatchSelection,\n        options: Options,\n        logger: Logger,\n        onEvent: (ProgressEvent) -> Unit,\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/patcher/runtime/process/Parameters.kt",
    "content": "package app.revanced.manager.patcher.runtime.process\n\nimport android.os.Parcelable\nimport app.revanced.manager.patcher.patch.PatchBundle\nimport kotlinx.parcelize.Parcelize\nimport kotlinx.parcelize.RawValue\n\n@Parcelize\ndata class Parameters(\n    val cacheDir: String,\n    val aaptPath: String,\n    val frameworkDir: String,\n    val packageName: String,\n    val inputFile: String,\n    val outputFile: String,\n    val configurations: List<PatchConfiguration>,\n) : Parcelable\n\n@Parcelize\ndata class PatchConfiguration(\n    val bundle: PatchBundle,\n    val patches: Set<String>,\n    val options: @RawValue Map<String, Map<String, Any?>>\n) : Parcelable"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/patcher/runtime/process/PatcherProcess.kt",
    "content": "package app.revanced.manager.patcher.runtime.process\n\nimport android.annotation.SuppressLint\nimport android.app.ActivityThread\nimport android.content.Context\nimport android.content.Intent\nimport android.os.Build\nimport android.os.Bundle\nimport android.os.Looper\nimport app.revanced.manager.BuildConfig\nimport app.revanced.manager.patcher.ProgressEvent\nimport app.revanced.manager.patcher.Session\nimport app.revanced.manager.patcher.StepId\nimport app.revanced.manager.patcher.logger.LogLevel\nimport app.revanced.manager.patcher.logger.Logger\nimport app.revanced.manager.patcher.logger.forStep\nimport app.revanced.manager.patcher.logger.withJavaLogging\nimport app.revanced.manager.patcher.patch.PatchBundle\nimport app.revanced.manager.patcher.runStep\nimport app.revanced.manager.patcher.runtime.ProcessRuntime\nimport app.revanced.manager.patcher.toParcel\nimport kotlinx.coroutines.CoroutineExceptionHandler\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\nimport java.io.File\nimport kotlin.system.exitProcess\n\n/**\n * The main class that runs inside the runner process launched by [ProcessRuntime].\n */\nclass PatcherProcess() : IPatcherProcess.Stub() {\n    private var eventBinder: IPatcherEvents? = null\n\n    private val scope =\n        CoroutineScope(Dispatchers.Default + CoroutineExceptionHandler { _, throwable ->\n            // Try to send the exception information to the main app.\n            eventBinder?.let {\n                try {\n                    it.finished(throwable.stackTraceToString())\n                    return@CoroutineExceptionHandler\n                } catch (_: Exception) {\n                }\n            }\n\n            throwable.printStackTrace()\n            exitProcess(1)\n        })\n\n    override fun exit() = exitProcess(0)\n\n    override fun start(parameters: Parameters, events: IPatcherEvents) {\n        fun onEvent(event: ProgressEvent) = events.event(event.toParcel())\n\n        eventBinder = events\n\n        scope.launch {\n            val logger = object : Logger() {\n                override fun log(level: LogLevel, message: String) =\n                    events.log(level.name, message)\n            }\n\n            logger.info(\"Memory limit: ${Runtime.getRuntime().maxMemory() / (1024 * 1024)}MB\")\n\n            val loadLogger = logger.forStep(StepId.LoadPatches, ::onEvent)\n            val patchList = runStep(StepId.LoadPatches, ::onEvent) {\n                loadLogger.withJavaLogging {\n                    val allPatches = PatchBundle.Loader.patches(\n                        parameters.configurations.map { it.bundle },\n                        parameters.packageName\n                    )\n\n                    parameters.configurations.flatMap { config ->\n                        val patches = (allPatches[config.bundle] ?: return@flatMap emptyList())\n                            .filter { it.name in config.patches }\n                            .associateBy { it.name }\n\n                        config.options.forEach { (patchName, opts) ->\n                            val patchOptions = patches[patchName]?.options\n                                ?: throw Exception(\"Patch with name $patchName does not exist.\")\n\n                            opts.forEach { (key, value) ->\n                                patchOptions[key] = value\n                            }\n                        }\n\n                        patches.values\n                    }\n                }\n            }\n\n            val session = Session(\n                cacheDir = parameters.cacheDir,\n                aaptPath = parameters.aaptPath,\n                frameworkDir = parameters.frameworkDir,\n                logger = logger,\n                input = File(parameters.inputFile),\n                onEvent = ::onEvent,\n            )\n\n            session.use {\n                it.run(File(parameters.outputFile), patchList)\n            }\n\n            events.finished(null)\n        }\n    }\n\n    companion object {\n        private val longArrayClass = LongArray::class.java\n        private val emptyLongArray = LongArray(0)\n\n        @SuppressLint(\"PrivateApi\")\n        @JvmStatic\n        fun main(args: Array<String>) {\n            Looper.prepare()\n\n            val managerPackageName = args[0]\n\n            // Abuse hidden APIs to get a context.\n            val systemContext = ActivityThread.systemMain().systemContext as Context\n            val appContext = systemContext.createPackageContext(managerPackageName, 0)\n\n            // Avoid annoying logs. See https://github.com/robolectric/robolectric/blob/ad0484c6b32c7d11176c711abeb3cb4a900f9258/robolectric/src/main/java/org/robolectric/android/internal/AndroidTestEnvironment.java#L376-L388\n            Class.forName(\"android.app.AppCompatCallbacks\").apply {\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {\n                    getDeclaredMethod(\"install\", longArrayClass, longArrayClass).also { it.isAccessible = true }(null, emptyLongArray, emptyLongArray)\n                } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {\n                    getDeclaredMethod(\"install\", longArrayClass).also { it.isAccessible = true }(null, emptyLongArray)\n                }\n            }\n\n            val ipcInterface = PatcherProcess()\n\n            appContext.sendBroadcast(Intent().apply {\n                action = ProcessRuntime.CONNECT_TO_APP_ACTION\n                `package` = managerPackageName\n\n                putExtra(ProcessRuntime.INTENT_BUNDLE_KEY, Bundle().apply {\n                    putBinder(ProcessRuntime.BUNDLE_BINDER_KEY, ipcInterface.asBinder())\n                })\n            })\n\n            Looper.loop()\n            exitProcess(1) // Shouldn't happen\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/patcher/worker/PatcherWorker.kt",
    "content": "package app.revanced.manager.patcher.worker\n\nimport android.app.Activity\nimport android.app.Notification\nimport android.app.NotificationChannel\nimport android.app.NotificationManager\nimport android.app.PendingIntent\nimport android.content.Context\nimport android.content.Intent\nimport android.content.pm.ServiceInfo\nimport android.graphics.drawable.Icon\nimport android.os.Build\nimport android.os.Parcelable\nimport android.os.PowerManager\nimport android.util.Log\nimport androidx.activity.result.ActivityResult\nimport androidx.work.ForegroundInfo\nimport androidx.work.WorkerParameters\nimport app.revanced.manager.MainActivity\nimport app.revanced.manager.R\nimport app.revanced.manager.data.platform.Filesystem\nimport app.revanced.manager.data.room.apps.installed.InstallType\nimport app.revanced.manager.domain.installer.RootInstaller\nimport app.revanced.manager.domain.manager.KeystoreManager\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.repository.DownloadedAppRepository\nimport app.revanced.manager.domain.repository.DownloaderRepository\nimport app.revanced.manager.domain.repository.InstalledAppRepository\nimport app.revanced.manager.domain.worker.Worker\nimport app.revanced.manager.domain.worker.WorkerRepository\nimport app.revanced.manager.network.downloader.LoadedDownloader\nimport app.revanced.manager.patcher.ProgressEvent\nimport app.revanced.manager.patcher.StepId\nimport app.revanced.manager.patcher.logger.Logger\nimport app.revanced.manager.patcher.runStep\nimport app.revanced.manager.patcher.runtime.CoroutineRuntime\nimport app.revanced.manager.patcher.runtime.ProcessRuntime\nimport app.revanced.manager.patcher.toRemoteError\nimport app.revanced.manager.downloader.GetScope\nimport app.revanced.manager.downloader.DownloaderHostApi\nimport app.revanced.manager.downloader.Scope\nimport app.revanced.manager.downloader.UserInteractionException\nimport app.revanced.manager.ui.model.SelectedApp\nimport app.revanced.manager.util.Options\nimport app.revanced.manager.util.PM\nimport app.revanced.manager.util.PatchSelection\nimport app.revanced.manager.util.tag\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.withContext\nimport org.koin.core.component.KoinComponent\nimport org.koin.core.component.inject\nimport java.io.File\n\n@OptIn(DownloaderHostApi::class)\nclass PatcherWorker(\n    context: Context,\n    parameters: WorkerParameters\n) : Worker<PatcherWorker.Args>(context, parameters), KoinComponent {\n    private val workerRepository: WorkerRepository by inject()\n    private val prefs: PreferencesManager by inject()\n    private val keystoreManager: KeystoreManager by inject()\n    private val downloaderRepository: DownloaderRepository by inject()\n    private val downloadedAppRepository: DownloadedAppRepository by inject()\n    private val pm: PM by inject()\n    private val fs: Filesystem by inject()\n    private val installedAppRepository: InstalledAppRepository by inject()\n    private val rootInstaller: RootInstaller by inject()\n\n    class Args(\n        val input: SelectedApp,\n        val output: String,\n        val selectedPatches: PatchSelection,\n        val options: Options,\n        val logger: Logger,\n        val handleStartActivityRequest: suspend (LoadedDownloader, Intent) -> ActivityResult,\n        val setInputFile: suspend (File) -> Unit,\n        val onEvent: (ProgressEvent) -> Unit,\n    ) {\n        val packageName get() = input.packageName\n    }\n\n    override suspend fun getForegroundInfo() =\n        ForegroundInfo(\n            1,\n            createNotification(),\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) ServiceInfo.FOREGROUND_SERVICE_TYPE_SPECIAL_USE else 0\n        )\n\n    private fun createNotification(): Notification {\n        val notificationIntent = Intent(applicationContext, MainActivity::class.java).apply {\n            flags = Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP\n        }\n        val pendingIntent = PendingIntent.getActivity(\n            applicationContext, 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE\n        )\n        val channel = NotificationChannel(\n            \"revanced-patcher-patching\", \"Patching\", NotificationManager.IMPORTANCE_LOW\n        )\n        val notificationManager =\n            applicationContext.getSystemService(NotificationManager::class.java)\n        notificationManager.createNotificationChannel(channel)\n        return Notification.Builder(applicationContext, channel.id)\n            .setContentTitle(applicationContext.getText(R.string.patcher_notification_title))\n            .setContentText(applicationContext.getText(R.string.patcher_notification_text))\n            .setSmallIcon(Icon.createWithResource(applicationContext, R.drawable.ic_notification))\n            .setContentIntent(pendingIntent)\n            .setCategory(Notification.CATEGORY_SERVICE)\n            .build()\n    }\n\n    override suspend fun doWork(): Result {\n        if (runAttemptCount > 0) {\n            Log.d(tag, \"Android requested retrying but retrying is disabled.\".logFmt())\n            return Result.failure()\n        }\n\n        try {\n            // This does not always show up for some reason.\n            setForeground(getForegroundInfo())\n        } catch (e: Exception) {\n            Log.d(tag, \"Failed to set foreground info:\", e)\n        }\n\n        val wakeLock: PowerManager.WakeLock =\n            (applicationContext.getSystemService(Context.POWER_SERVICE) as PowerManager)\n                .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, \"$tag::Patcher\")\n                .apply {\n                    acquire(10 * 60 * 1000L)\n                    Log.d(tag, \"Acquired wakelock.\")\n                }\n\n        val args = workerRepository.claimInput(this)\n\n        return try {\n            runPatcher(args)\n        } finally {\n            wakeLock.release()\n        }\n    }\n\n    private suspend fun runPatcher(args: Args): Result {\n        val patchedApk = fs.tempDir.resolve(\"patched.apk\")\n\n        return try {\n            if (args.input is SelectedApp.Installed) {\n                installedAppRepository.get(args.packageName)?.let {\n                    if (it.installType == InstallType.MOUNT) {\n                        rootInstaller.unmount(args.packageName)\n                    }\n                }\n            }\n\n            suspend fun download(downloader: LoadedDownloader, data: Parcelable) =\n                downloadedAppRepository.download(\n                    downloader,\n                    data,\n                    args.packageName,\n                    args.input.version,\n                    prefs.suggestedVersionSafeguard.get(),\n                    !prefs.disablePatchVersionCompatCheck.get(),\n                    onDownload = { progress ->\n                        args.onEvent(\n                            ProgressEvent.Progress(\n                                stepId = StepId.DownloadAPK,\n                                current = progress.first,\n                                total = progress.second\n                            )\n                        )\n                    }\n                ).also { args.setInputFile(it) }\n\n            val inputFile = when (val selectedApp = args.input) {\n                is SelectedApp.Download -> {\n                    runStep(StepId.DownloadAPK, args.onEvent) {\n                        val (downloader, data) = downloaderRepository.unwrapParceledData(\n                            selectedApp.data\n                        )\n\n                        download(downloader, data)\n                    }\n                }\n\n                is SelectedApp.Search -> {\n                    runStep(StepId.DownloadAPK, args.onEvent) {\n                        downloaderRepository.loadedDownloadersFlow.first()\n                            .firstNotNullOfOrNull { downloader ->\n                                try {\n                                    val getScope = object : GetScope, Scope by downloader.scopeImpl {\n                                        override suspend fun requestStartActivity(intent: Intent): Intent? {\n                                            val result =\n                                                args.handleStartActivityRequest(downloader, intent)\n                                            return when (result.resultCode) {\n                                                Activity.RESULT_OK -> result.data\n                                                Activity.RESULT_CANCELED -> throw UserInteractionException.Activity.Cancelled()\n                                                else -> throw UserInteractionException.Activity.NotCompleted(\n                                                    result.resultCode,\n                                                    result.data\n                                                )\n                                            }\n                                        }\n                                    }\n                                    withContext(Dispatchers.IO) {\n                                        downloader.impl.get(\n                                            getScope,\n                                            selectedApp.packageName,\n                                            selectedApp.version\n                                        )\n                                    }?.takeIf { (_, version) -> selectedApp.version == null || version == selectedApp.version }\n                                } catch (e: UserInteractionException.Activity.NotCompleted) {\n                                    throw e\n                                } catch (_: UserInteractionException) {\n                                    null\n                                }?.let { (data, _) -> download(downloader, data) }\n                            } ?: throw Exception(\"App is not available.\")\n                    }\n                }\n\n                is SelectedApp.Local -> selectedApp.file.also { args.setInputFile(it) }\n                is SelectedApp.Installed -> File(pm.getPackageInfo(selectedApp.packageName)!!.applicationInfo!!.sourceDir)\n            }\n\n            val runtime = if (prefs.useProcessRuntime.get()) {\n                ProcessRuntime(applicationContext)\n            } else {\n                CoroutineRuntime(applicationContext)\n            }\n\n            runtime.execute(\n                inputFile.absolutePath,\n                patchedApk.absolutePath,\n                args.packageName,\n                args.selectedPatches,\n                args.options,\n                args.logger,\n                args.onEvent,\n            )\n\n            runStep(StepId.SignAPK, args.onEvent) {\n                keystoreManager.sign(patchedApk, File(args.output))\n            }\n\n            Log.i(tag, \"Patching succeeded\".logFmt())\n            Result.success()\n        } catch (e: ProcessRuntime.RemoteFailureException) {\n            Log.e(\n                tag,\n                \"An exception occurred in the remote process while patching. ${e.originalStackTrace}\".logFmt()\n            )\n            args.onEvent(\n                ProgressEvent.Failed(\n                    null,\n                    e.toRemoteError()\n                )\n            ) // Fallback if exception doesn't occur within step\n            Result.failure()\n        } catch (e: Exception) {\n            Log.e(tag, \"An exception occurred while patching\".logFmt(), e)\n            args.onEvent(\n                ProgressEvent.Failed(\n                    null,\n                    e.toRemoteError()\n                )\n            ) // Fallback if exception doesn't occur within step\n            Result.failure()\n        } finally {\n            patchedApk.delete()\n            if (args.input is SelectedApp.Local && args.input.temporary) {\n                args.input.file.delete()\n            }\n        }\n    }\n\n    companion object {\n        private const val LOG_PREFIX = \"[Worker]\"\n        private fun String.logFmt() = \"$LOG_PREFIX $this\"\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/service/RootService.kt",
    "content": "package app.revanced.manager.service\n\nimport android.content.Intent\nimport android.os.IBinder\nimport app.revanced.manager.IRootSystemService\nimport com.topjohnwu.superuser.ipc.RootService\nimport com.topjohnwu.superuser.nio.FileSystemManager\n\nclass ManagerRootService : RootService() {\n    class RootSystemService : IRootSystemService.Stub() {\n        override fun getFileSystemService() =\n            FileSystemManager.getService()\n    }\n\n    override fun onBind(intent: Intent): IBinder = RootSystemService()\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/service/UninstallService.kt",
    "content": "package app.revanced.manager.service\n\nimport android.app.Service\nimport android.content.Intent\nimport android.content.pm.PackageInstaller\nimport android.os.Build\nimport android.os.IBinder\n\n@Suppress(\"DEPRECATION\")\nclass UninstallService : Service() {\n\n    override fun onStartCommand(\n        intent: Intent,\n        flags: Int,\n        startId: Int\n    ): Int {\n        val extraStatus = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999)\n        val extraStatusMessage = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE)\n\n        when (extraStatus) {\n            PackageInstaller.STATUS_PENDING_USER_ACTION -> {\n                startActivity(if (Build.VERSION.SDK_INT >= 33) {\n                    intent.getParcelableExtra(Intent.EXTRA_INTENT, Intent::class.java)\n                } else {\n                    intent.getParcelableExtra(Intent.EXTRA_INTENT)\n                }.apply {\n                    this?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)\n                })\n            }\n\n            else -> {\n                sendBroadcast(Intent().apply {\n                    action = APP_UNINSTALL_ACTION\n                    `package` = packageName\n                    putExtra(EXTRA_UNINSTALL_STATUS, extraStatus)\n                    putExtra(EXTRA_UNINSTALL_STATUS_MESSAGE, extraStatusMessage)\n                })\n            }\n        }\n        stopSelf()\n        return START_NOT_STICKY\n    }\n\n    override fun onBind(intent: Intent?): IBinder? = null\n\n    companion object {\n        const val APP_UNINSTALL_ACTION = \"APP_UNINSTALL_ACTION\"\n\n        const val EXTRA_UNINSTALL_STATUS = \"EXTRA_UNINSTALL_STATUS\"\n        const val EXTRA_UNINSTALL_STATUS_MESSAGE = \"EXTRA_INSTALL_STATUS_MESSAGE\"\n    }\n\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/AlertDialogExtended.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.ExperimentalLayoutApi\nimport androidx.compose.foundation.layout.FlowRow\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.AlertDialogDefaults\nimport androidx.compose.material3.BasicAlertDialog\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.LocalTextStyle\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ProvideTextStyle\nimport androidx.compose.material3.Surface\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.Shape\nimport androidx.compose.ui.text.TextStyle\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\n\n@OptIn(ExperimentalLayoutApi::class, ExperimentalMaterial3Api::class)\n@Composable\nfun AlertDialogExtended(\n    modifier: Modifier = Modifier,\n    onDismissRequest: () -> Unit,\n    confirmButton: @Composable () -> Unit,\n    dismissButton: @Composable (() -> Unit)? = null,\n    tertiaryButton: @Composable (() -> Unit)? = null,\n    icon: @Composable (() -> Unit)? = null,\n    title: @Composable (() -> Unit)? = null,\n    text: @Composable (() -> Unit)? = null,\n    shape: Shape = AlertDialogDefaults.shape,\n    containerColor: Color = AlertDialogDefaults.containerColor,\n    iconContentColor: Color = AlertDialogDefaults.iconContentColor,\n    titleContentColor: Color = AlertDialogDefaults.titleContentColor,\n    textContentColor: Color = AlertDialogDefaults.textContentColor,\n    tonalElevation: Dp = AlertDialogDefaults.TonalElevation,\n    textHorizontalPadding: PaddingValues = TextHorizontalPadding\n) {\n    BasicAlertDialog(onDismissRequest = onDismissRequest) {\n        Surface(\n            modifier = modifier,\n            shape = shape,\n            color = containerColor,\n            tonalElevation = tonalElevation,\n        ) {\n            Column(modifier = Modifier.padding(vertical = 24.dp)) {\n                Column(\n                    modifier = Modifier.padding(horizontal = 24.dp).fillMaxWidth()\n                ) {\n                    icon?.let {\n                        ContentStyle(color = iconContentColor) {\n                            Box(\n                                Modifier\n                                    .padding(bottom = 16.dp)\n                                    .align(Alignment.CenterHorizontally)\n                            ) {\n                                icon()\n                            }\n                        }\n                    }\n                    title?.let {\n                        ContentStyle(\n                            color = titleContentColor,\n                            textStyle = MaterialTheme.typography.headlineSmall\n                        ) {\n                            Box(\n                                // Align the title to the center when an icon is present.\n                                Modifier\n                                    .padding(bottom = 16.dp)\n                                    .align(\n                                        if (icon == null) {\n                                            Alignment.Start\n                                        } else {\n                                            Alignment.CenterHorizontally\n                                        }\n                                    )\n                            ) {\n                                title()\n                            }\n                        }\n                    }\n                }\n                text?.let {\n                    ContentStyle(\n                        color = textContentColor,\n                        textStyle = MaterialTheme.typography.bodyMedium\n                    ) {\n                        Box(\n                            Modifier\n                                .weight(weight = 1f, fill = false)\n                                .padding(bottom = 24.dp)\n                                .padding(textHorizontalPadding)\n                                .align(Alignment.Start)\n                        ) {\n                            text()\n                        }\n                    }\n                }\n                Box(\n                    modifier = Modifier\n                        .padding(horizontal = 24.dp)\n                ) {\n                    ContentStyle(\n                        color = MaterialTheme.colorScheme.primary,\n                        textStyle = MaterialTheme.typography.labelLarge\n                    ) {\n                        FlowRow(\n                            modifier = Modifier.fillMaxWidth(),\n                            horizontalArrangement = Arrangement.spacedBy(\n                                12.dp,\n                                if (tertiaryButton != null) Alignment.Start else Alignment.End\n                            ),\n                            verticalArrangement = Arrangement.spacedBy(8.dp)\n                        ) {\n                            tertiaryButton?.let {\n                                it()\n                                Spacer(modifier = Modifier.weight(1f))\n                            }\n                            dismissButton?.invoke()\n                            confirmButton()\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ContentStyle(\n    color: Color = LocalContentColor.current,\n    textStyle: TextStyle = LocalTextStyle.current,\n    content: @Composable () -> Unit\n) {\n    CompositionLocalProvider(LocalContentColor provides color) {\n        ProvideTextStyle(textStyle) {\n            content()\n        }\n    }\n}\n\nval TextHorizontalPadding = PaddingValues(horizontal = 24.dp)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/AppIcon.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport android.content.pm.PackageInfo\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Android\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.alpha\nimport androidx.compose.ui.graphics.ColorFilter\nimport androidx.compose.ui.graphics.vector.rememberVectorPainter\nimport androidx.compose.ui.platform.LocalContext\nimport coil.compose.AsyncImage\nimport coil.request.ImageRequest\nimport kotlinx.coroutines.yield\n\n@Composable\nfun AppIcon(\n    packageInfo: PackageInfo?,\n    contentDescription: String?,\n    modifier: Modifier = Modifier\n) {\n    val context = LocalContext.current\n    val placeholderPainter = rememberVectorPainter(Icons.Default.Android)\n    val placeholderColorFilter = ColorFilter.tint(LocalContentColor.current)\n\n    if (packageInfo == null) {\n        Image(\n            painter = placeholderPainter,\n            contentDescription = contentDescription,\n            modifier = modifier,\n            colorFilter = placeholderColorFilter\n        )\n    } else {\n        var showPlaceHolder by remember(packageInfo.packageName) { mutableStateOf(true) }\n        var shouldLoadIcon by remember(packageInfo.packageName) { mutableStateOf(false) }\n\n        val request = remember(context, packageInfo.packageName) {\n            ImageRequest.Builder(context)\n                .data(packageInfo)\n//                .memoryCachePolicy(CachePolicy.DISABLED)\n                .build()\n        }\n\n        LaunchedEffect(packageInfo.packageName) {\n            yield()\n            shouldLoadIcon = true\n        }\n\n        Box(\n            modifier = modifier,\n            contentAlignment = Alignment.Center\n        ) {\n            if (shouldLoadIcon) {\n                AsyncImage(\n                    model = request,\n                    contentDescription = contentDescription,\n                    modifier = Modifier.alpha(if (showPlaceHolder) 0f else 1f),\n                    onSuccess = { showPlaceHolder = false },\n                    onError = { showPlaceHolder = true }\n                )\n            }\n\n            if (showPlaceHolder) {\n                Image(\n                    painter = placeholderPainter,\n                    contentDescription = contentDescription,\n                    colorFilter = placeholderColorFilter\n                )\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/AppInfo.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport android.content.pm.PackageInfo\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\n\n@Composable\nfun AppInfo(appInfo: PackageInfo?, placeholderLabel: String? = null, extraContent: @Composable () -> Unit = {}) {\n    Column(\n        modifier = Modifier\n            .fillMaxWidth()\n            .padding(horizontal = 24.dp, vertical = 16.dp),\n        horizontalAlignment = Alignment.CenterHorizontally\n    ) {\n        AppIcon(\n            appInfo,\n            contentDescription = null,\n            modifier = Modifier\n                .size(100.dp)\n                .padding(bottom = 5.dp)\n        )\n\n        AppLabel(\n            appInfo,\n            modifier = Modifier.padding(top = 16.dp),\n            style = MaterialTheme.typography.titleLarge,\n            defaultText = placeholderLabel\n        )\n\n        extraContent()\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/AppLabel.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport android.content.pm.PackageInfo\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.material3.LocalTextStyle\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.TextStyle\nimport app.revanced.manager.R\nimport com.eygraber.compose.placeholder.material3.placeholder\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.withContext\n\n@Composable\nfun AppLabel(\n    packageInfo: PackageInfo?,\n    modifier: Modifier = Modifier,\n    style: TextStyle = LocalTextStyle.current,\n    defaultText: String? = stringResource(R.string.not_installed)\n) {\n    val context = LocalContext.current\n\n    var label: String? by rememberSaveable { mutableStateOf(null) }\n\n    LaunchedEffect(packageInfo) {\n        label = withContext(Dispatchers.IO) {\n            packageInfo?.applicationInfo?.loadLabel(context.packageManager)?.toString()\n                ?: defaultText\n        }\n    }\n\n    Text(\n        label ?: stringResource(R.string.loading),\n        modifier = Modifier\n            .placeholder(\n                visible = label == null,\n                color = MaterialTheme.colorScheme.inverseOnSurface,\n                shape = RoundedCornerShape(100)\n            )\n            .then(modifier),\n        style = style\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/AppScaffold.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBar\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.TopAppBarScrollBehavior\nimport androidx.compose.material3.rememberTopAppBarState\nimport androidx.compose.material3.surfaceColorAtElevation\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun AppScaffold(\n    topBar: @Composable (TopAppBarScrollBehavior) -> Unit = {},\n    bottomBar: @Composable () -> Unit = {},\n    floatingActionButton: @Composable () -> Unit = {},\n    content: @Composable (PaddingValues) -> Unit\n) {\n    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())\n\n    Scaffold(\n        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),\n        topBar = { topBar(scrollBehavior) },\n        bottomBar = bottomBar,\n        floatingActionButton = floatingActionButton,\n        content = content\n    )\n}\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun AppTopBar(\n    title: String,\n    onBackClick: (() -> Unit)? = null,\n    backIcon: @Composable (() -> Unit) = @Composable {\n        Icon(\n            imageVector = Icons.AutoMirrored.Filled.ArrowBack, contentDescription = stringResource(\n                R.string.back\n            )\n        )\n    },\n    actions: @Composable (RowScope.() -> Unit) = {},\n    scrollBehavior: TopAppBarScrollBehavior? = null,\n    applyContainerColor: Boolean = false\n) {\n    val containerColor = if (applyContainerColor) {\n        MaterialTheme.colorScheme.surfaceColorAtElevation(3.0.dp)\n    } else {\n        Color.Unspecified\n    }\n\n    TopAppBar(\n        title = { Text(title) },\n        scrollBehavior = scrollBehavior,\n        navigationIcon = {\n            if (onBackClick != null) {\n                TooltipIconButton(\n                    onClick = onBackClick,\n                    tooltip = stringResource(R.string.back),\n                ) {\n                    backIcon()\n                }\n            }\n        },\n        actions = actions,\n        colors = TopAppBarDefaults.topAppBarColors(\n            containerColor = containerColor\n        )\n    )\n}\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun AppTopBar(\n    title: @Composable () -> Unit,\n    onBackClick: (() -> Unit)? = null,\n    backIcon: @Composable (() -> Unit) = @Composable {\n        Icon(\n            imageVector = Icons.AutoMirrored.Filled.ArrowBack, contentDescription = stringResource(\n                R.string.back\n            )\n        )\n    },\n    actions: @Composable (RowScope.() -> Unit) = {},\n    scrollBehavior: TopAppBarScrollBehavior? = null,\n    applyContainerColor: Boolean = false\n) {\n    val containerColor = if (applyContainerColor) {\n        MaterialTheme.colorScheme.surfaceColorAtElevation(3.0.dp)\n    } else {\n        Color.Unspecified\n    }\n\n    TopAppBar(\n        title = title,\n        scrollBehavior = scrollBehavior,\n        navigationIcon = {\n            if (onBackClick != null) {\n                TooltipIconButton(\n                    onClick = onBackClick,\n                    tooltip = stringResource(R.string.back),\n                ) {\n                    backIcon()\n                }\n            }\n        },\n        actions = actions,\n        colors = TopAppBarDefaults.topAppBarColors(\n            containerColor = containerColor\n        )\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/ArrowButton.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.KeyboardArrowUp\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.rotate\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun ArrowButton(\n    modifier: Modifier = Modifier,\n    expanded: Boolean,\n    onClick: (() -> Unit)?,\n    rotationInitial: Float = 0f,\n    rotationFinal: Float = 180f\n) {\n    val description = if (expanded) R.string.collapse_content else R.string.expand_content\n    val rotation by animateFloatAsState(\n        targetValue = if (expanded) rotationInitial else rotationFinal,\n        label = \"rotation\"\n    )\n\n    onClick?.let {\n        TooltipIconButton(\n            onClick = it,\n            tooltip = stringResource(description),\n        ) { contentDescription ->\n            Icon(\n                imageVector = Icons.Filled.KeyboardArrowUp,\n                contentDescription = contentDescription,\n                modifier = Modifier\n                    .rotate(rotation)\n                    .then(modifier)\n            )\n        }\n    } ?: Icon(\n        imageVector = Icons.Filled.KeyboardArrowUp,\n        contentDescription = stringResource(description),\n        modifier = Modifier\n            .rotate(rotation)\n            .then(modifier)\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/AvailableUpdateDialog.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Update\nimport androidx.compose.material3.*\nimport androidx.compose.runtime.*\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.haptics.HapticCheckbox\nimport app.revanced.manager.util.transparentListItemColors\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun AvailableUpdateDialog(\n    onDismiss: () -> Unit,\n    onConfirm: () -> Unit,\n    setShowManagerUpdateDialogOnLaunch: (Boolean) -> Unit,\n    newVersion: String\n) {\n    var dontShowAgain by rememberSaveable { mutableStateOf(false) }\n    val dismissDialog = {\n        setShowManagerUpdateDialogOnLaunch(!dontShowAgain)\n        onDismiss()\n    }\n\n    AlertDialogExtended(\n        onDismissRequest = dismissDialog,\n        confirmButton = {\n            TextButton(\n                onClick = {\n                    dismissDialog()\n                    onConfirm()\n                },\n                shapes = ButtonDefaults.shapes()\n            ) {\n                Text(stringResource(R.string.show))\n            }\n        },\n        dismissButton = {\n            TextButton(\n                onClick = dismissDialog,\n                shapes = ButtonDefaults.shapes()\n            ) {\n                Text(stringResource(R.string.dismiss))\n            }\n        },\n        icon = {\n            Icon(imageVector = Icons.Outlined.Update, contentDescription = null)\n        },\n        title = {\n            Text(stringResource(R.string.update_available))\n        },\n        text = {\n            Column(\n                modifier = Modifier\n                    .verticalScroll(rememberScrollState())\n                    .padding(horizontal = 8.dp),\n                verticalArrangement = Arrangement.spacedBy(4.dp),\n            ) {\n                Text(\n                    modifier = Modifier.padding(horizontal = 16.dp),\n                    text = stringResource(R.string.update_available_dialog_description, newVersion)\n                )\n                ListItem(\n                    modifier = Modifier.clickable { dontShowAgain = !dontShowAgain },\n                    headlineContent = {\n                        Text(stringResource(R.string.never_show_again))\n                    },\n                    leadingContent = {\n                        CompositionLocalProvider(LocalMinimumInteractiveComponentSize provides Dp.Unspecified) {\n                            HapticCheckbox(checked = dontShowAgain, onCheckedChange = { dontShowAgain = it })\n                        }\n                    },\n                    colors = transparentListItemColors\n                )\n            }\n        },\n        textHorizontalPadding = PaddingValues(0.dp)\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/BottomContentBar.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.ColumnScope\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\n\n@Composable\nfun BottomContentBar(\n    modifier: Modifier = Modifier,\n    contentPadding: PaddingValues = PaddingValues(start = 16.dp, end = 16.dp, top = 8.dp, bottom = 16.dp),\n    content: @Composable ColumnScope.() -> Unit\n) {\n    Column(\n        modifier = modifier\n            .fillMaxWidth()\n            .padding(contentPadding),\n        verticalArrangement = Arrangement.spacedBy(8.dp),\n        content = content\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/CheckedFilterChip.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.expandIn\nimport androidx.compose.animation.shrinkOut\nimport androidx.compose.foundation.BorderStroke\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Done\nimport androidx.compose.material3.FilterChip\nimport androidx.compose.material3.FilterChipDefaults\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.SelectableChipColors\nimport androidx.compose.material3.SelectableChipElevation\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Shape\nimport androidx.core.view.HapticFeedbackConstantsCompat\nimport app.revanced.manager.util.withHapticFeedback\n\n@Composable\nfun CheckedFilterChip(\n    selected: Boolean,\n    onClick: () -> Unit,\n    label: @Composable () -> Unit,\n    modifier: Modifier = Modifier,\n    enabled: Boolean = true,\n    trailingIcon: @Composable (() -> Unit)? = null,\n    shape: Shape = FilterChipDefaults.shape,\n    colors: SelectableChipColors = FilterChipDefaults.filterChipColors(),\n    elevation: SelectableChipElevation? = FilterChipDefaults.filterChipElevation(),\n    border: BorderStroke? = FilterChipDefaults.filterChipBorder(enabled, selected),\n    interactionSource: MutableInteractionSource? = null\n) {\n    FilterChip(\n        selected = selected,\n        onClick = onClick.withHapticFeedback(HapticFeedbackConstantsCompat.CONFIRM),\n        label = label,\n        modifier = modifier,\n        enabled = enabled,\n        leadingIcon = {\n            AnimatedVisibility(\n                visible = selected,\n                enter = expandIn(expandFrom = Alignment.CenterStart),\n                exit = shrinkOut(shrinkTowards = Alignment.CenterStart)\n            ) {\n                Icon(\n                    modifier = Modifier.size(FilterChipDefaults.IconSize),\n                    imageVector = Icons.Filled.Done,\n                    contentDescription = null,\n                )\n            }\n        },\n        trailingIcon = trailingIcon,\n        shape = shape,\n        colors = colors,\n        elevation = elevation,\n        border = border,\n        interactionSource = interactionSource\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/ColumnWithScrollbar.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.ScrollState\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.ColumnScope\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\n\n@Composable\nfun ColumnWithScrollbar(\n    modifier: Modifier = Modifier,\n    state: ScrollState = rememberScrollState(),\n    verticalArrangement: Arrangement.Vertical = Arrangement.Top,\n    horizontalAlignment: Alignment.Horizontal = Alignment.Start,\n    content: @Composable ColumnScope.() -> Unit\n) {\n    Column(\n        modifier = modifier.then(Modifier.verticalScroll(state)),\n        verticalArrangement = verticalArrangement,\n        horizontalAlignment = horizontalAlignment,\n        content = content\n    )\n    Scrollbar(state, Modifier.then(modifier.padding())) // Get the modifier's padding to maintain scrollbar within the screen, e.g. paddingValues\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/ColumnWithScrollbarEdgeShadow.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.ScrollState\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.ColumnScope\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Brush\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.graphicsLayer\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\n\n@Composable\nfun ColumnWithScrollbarEdgeShadow(\n    modifier: Modifier = Modifier,\n    state: ScrollState = rememberScrollState(),\n    verticalArrangement: Arrangement.Vertical = Arrangement.Top,\n    horizontalAlignment: Alignment.Horizontal = Alignment.Start,\n    edgeShadowHeight: Dp = 40.dp,\n    edgeShadowProximity: Dp = 80.dp,\n    content: @Composable ColumnScope.() -> Unit\n) {\n    val surfaceColor = MaterialTheme.colorScheme.surface\n    val proximityPx = with(LocalDensity.current) { edgeShadowProximity.toPx() }\n\n    val bottomAlpha by remember(state, proximityPx) {\n        derivedStateOf {\n            val maxScroll = state.maxValue.takeUnless { it == Int.MAX_VALUE } ?: 0\n            if (maxScroll == 0 || proximityPx <= 0f) {\n                0f\n            } else {\n                ((maxScroll - state.value).coerceAtLeast(0) / proximityPx).coerceIn(0f, 1f)\n            }\n        }\n    }\n\n    Box(modifier = modifier) {\n        Column(\n            modifier = Modifier\n                .matchParentSize()\n                .verticalScroll(state),\n            verticalArrangement = verticalArrangement,\n            horizontalAlignment = horizontalAlignment,\n            content = content\n        )\n\n        Box(\n            modifier = Modifier\n                .align(Alignment.BottomCenter)\n                .fillMaxWidth()\n                .height(edgeShadowHeight)\n                .graphicsLayer { alpha = bottomAlpha }\n                .background(\n                    Brush.verticalGradient(\n                        colors = listOf(Color.Transparent, surfaceColor)\n                    )\n                )\n        )\n        if (state.canScrollForward || state.canScrollBackward) {\n            Scrollbar(state)\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/ConfirmDialog.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun ConfirmDialog(\n    onDismiss: () -> Unit,\n    onConfirm: () -> Unit,\n    title: String,\n    description: String,\n    icon: ImageVector\n) {\n    AlertDialog(\n        onDismissRequest = onDismiss,\n        dismissButton = {\n            TextButton(onDismiss, shapes = ButtonDefaults.shapes()) {\n                Text(stringResource(R.string.cancel))\n            }\n        },\n        confirmButton = {\n            TextButton(\n                onClick = {\n                    onConfirm()\n                    onDismiss()\n                },\n                shapes = ButtonDefaults.shapes()\n            ) {\n                Text(stringResource(R.string.confirm))\n            }\n        },\n        title = { Text(title) },\n        icon = { Icon(icon, null) },\n        text = { Text(description) }\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/ContentSelector.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport android.net.Uri\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.runtime.Composable\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun ContentSelector(mime: String, onSelect: (Uri) -> Unit, content: @Composable () -> Unit) {\n    val activityLauncher = rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { uri ->\n        uri?.let(onSelect)\n    }\n    Button(\n        onClick = {\n            activityLauncher.launch(mime)\n        },\n        shapes = ButtonDefaults.shapes()\n    ) {\n        content()\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/EmptyState.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.annotation.StringRes\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.alpha\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\n\n@Composable\nfun EmptyState(\n    icon: ImageVector,\n    @StringRes title: Int,\n    @StringRes description: Int\n) {\n    Box(\n        modifier = Modifier.fillMaxSize(),\n        contentAlignment = Alignment.Center\n    ) {\n        Column(\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(horizontal = 32.dp),\n            horizontalAlignment = Alignment.CenterHorizontally,\n            verticalArrangement = Arrangement.Center\n        ) {\n            Icon(\n                imageVector = icon,\n                contentDescription = null,\n                modifier = Modifier\n                    .size(100.dp)\n                    .alpha(0.6f),\n                tint = MaterialTheme.colorScheme.onSurfaceVariant\n            )\n\n            Spacer(modifier = Modifier.height(24.dp))\n\n            Text(\n                text = stringResource(title),\n                style = MaterialTheme.typography.titleLarge,\n                color = MaterialTheme.colorScheme.onSurface,\n                textAlign = TextAlign.Center\n            )\n\n            Spacer(modifier = Modifier.height(8.dp))\n\n            Text(\n                text = stringResource(description),\n                style = MaterialTheme.typography.bodyMedium,\n                color = MaterialTheme.colorScheme.onSurfaceVariant,\n                textAlign = TextAlign.Center\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/ExceptionViewerDialog.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport android.content.Intent\nimport androidx.compose.foundation.horizontalScroll\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material.icons.filled.Share\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.bundle.BundleTopBar\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun ExceptionViewerDialog(text: String, onDismiss: () -> Unit) {\n    val context = LocalContext.current\n\n    FullscreenDialog(\n        onDismissRequest = onDismiss,\n    ) {\n        Scaffold(\n            topBar = {\n                BundleTopBar(\n                    title = stringResource(R.string.patches_error),\n                    onBackClick = onDismiss,\n                    backIcon = {\n                        Icon(\n                            Icons.AutoMirrored.Filled.ArrowBack,\n                            stringResource(R.string.back)\n                        )\n                    },\n                    actions = {\n                        TooltipIconButton(\n                            onClick = {\n                                val sendIntent: Intent = Intent().apply {\n                                    action = Intent.ACTION_SEND\n                                    putExtra(\n                                        Intent.EXTRA_TEXT,\n                                        text\n                                    )\n                                    type = \"text/plain\"\n                                }\n\n                                val shareIntent = Intent.createChooser(sendIntent, null)\n                                context.startActivity(shareIntent)\n                            },\n                            tooltip = stringResource(R.string.share)\n                        ) {\n                            Icon(\n                                Icons.Filled.Share,\n                                contentDescription = stringResource(R.string.share)\n                            )\n                        }\n                    }\n                )\n            }\n        ) { paddingValues ->\n            ColumnWithScrollbar(\n                modifier = Modifier.padding(paddingValues)\n            ) {\n                Text(text, modifier = Modifier.horizontalScroll(rememberScrollState()))\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/FullscreenDialog.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport android.view.WindowManager\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.SideEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.toArgb\nimport androidx.compose.ui.platform.LocalView\nimport androidx.compose.ui.window.Dialog\nimport androidx.compose.ui.window.DialogProperties\nimport androidx.compose.ui.window.DialogWindowProvider\nimport androidx.core.view.WindowCompat\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.ui.theme.Theme\nimport org.koin.compose.koinInject\n\nprivate val properties = DialogProperties(\n    usePlatformDefaultWidth = false,\n    dismissOnBackPress = true,\n    decorFitsSystemWindows = false,\n)\n\n@Composable\nfun FullscreenDialog(onDismissRequest: () -> Unit, content: @Composable () -> Unit) {\n    val prefs: PreferencesManager = koinInject()\n    val theme by prefs.theme.getAsState()\n    val isDarkTheme = theme == Theme.SYSTEM && isSystemInDarkTheme() || theme == Theme.DARK\n    \n    Dialog(\n        onDismissRequest = onDismissRequest,\n        properties = properties\n    ) {\n        val view = LocalView.current\n        \n        SideEffect {\n            val window = (view.parent as DialogWindowProvider).window\n            WindowCompat.setDecorFitsSystemWindows(window, false)\n            window.statusBarColor = Color.Transparent.toArgb()\n            window.navigationBarColor = Color.Transparent.toArgb()\n            window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)\n\n            val insetsController = WindowCompat.getInsetsController(window, view)\n            insetsController.isAppearanceLightStatusBars = !isDarkTheme\n            insetsController.isAppearanceLightNavigationBars = !isDarkTheme\n        }\n\n        content()\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/GroupHeader.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.semantics.heading\nimport androidx.compose.ui.semantics.semantics\nimport androidx.compose.ui.unit.dp\n\n@Composable\nfun GroupHeader(\n    title: String,\n    modifier: Modifier = Modifier\n) {\n    Text(\n        text = title,\n        color = MaterialTheme.colorScheme.primary,\n        style = MaterialTheme.typography.labelLarge,\n        modifier = Modifier\n            .padding(start = 32.dp, end = 16.dp, top = 16.dp, bottom = 8.dp)\n            .semantics { heading() }\n            .then(modifier)\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/InstallerStatusDialog.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport android.annotation.SuppressLint\nimport android.content.pm.PackageInstaller\nimport androidx.annotation.RequiresApi\nimport androidx.annotation.StringRes\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.ErrorOutline\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.model.InstallerModel\nimport com.github.materiiapps.enumutil.FromValue\n\nprivate typealias InstallerStatusDialogButtonHandler = ((model: InstallerModel) -> Unit)\nprivate typealias InstallerStatusDialogButton = @Composable (model: InstallerModel, dismiss: () -> Unit) -> Unit\n\n@Composable\nfun InstallerStatusDialog(installerStatus: Int, model: InstallerModel, onDismiss: () -> Unit) {\n    val dialogKind = remember {\n        DialogKind.fromValue(installerStatus) ?: DialogKind.FAILURE\n    }\n\n    AlertDialog(\n        onDismissRequest = onDismiss,\n        confirmButton = {\n            dialogKind.confirmButton(model, onDismiss)\n        },\n        dismissButton = {\n            dialogKind.dismissButton?.invoke(model, onDismiss)\n        },\n        icon = {\n            Icon(dialogKind.icon, null)\n        },\n        title = {\n            Text(\n                text = stringResource(dialogKind.title),\n                style = MaterialTheme.typography.headlineSmall.copy(textAlign = TextAlign.Center),\n                color = MaterialTheme.colorScheme.onSurface,\n            )\n        },\n        text = {\n            Column(\n                horizontalAlignment = Alignment.CenterHorizontally,\n                verticalArrangement = Arrangement.spacedBy(16.dp),\n            ) {\n                Text(stringResource(dialogKind.contentStringResId))\n            }\n        }\n    )\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\nprivate fun installerStatusDialogButton(\n    @StringRes buttonStringResId: Int,\n    buttonHandler: InstallerStatusDialogButtonHandler = { },\n): InstallerStatusDialogButton = { model, dismiss ->\n    TextButton(\n        onClick = {\n            dismiss()\n            buttonHandler(model)\n        },\n        shapes = ButtonDefaults.shapes()\n    ) {\n        Text(stringResource(buttonStringResId))\n    }\n}\n\n@FromValue(\"flag\")\nenum class DialogKind(\n    val flag: Int,\n    val title: Int,\n    @param:StringRes val contentStringResId: Int,\n    val icon: ImageVector = Icons.Outlined.ErrorOutline,\n    val confirmButton: InstallerStatusDialogButton = installerStatusDialogButton(R.string.ok),\n    val dismissButton: InstallerStatusDialogButton? = null,\n) {\n    FAILURE(\n        flag = PackageInstaller.STATUS_FAILURE,\n        title = R.string.installation_failed_dialog_title,\n        contentStringResId = R.string.installation_failed_description,\n        confirmButton = installerStatusDialogButton(R.string.install_app) { model ->\n            model.install()\n        }\n    ),\n    FAILURE_ABORTED(\n        flag = PackageInstaller.STATUS_FAILURE_ABORTED,\n        title = R.string.installation_cancelled_dialog_title,\n        contentStringResId = R.string.installation_aborted_description,\n        confirmButton = installerStatusDialogButton(R.string.install_app) { model ->\n            model.install()\n        }\n    ),\n    FAILURE_BLOCKED(\n        flag = PackageInstaller.STATUS_FAILURE_BLOCKED,\n        title = R.string.installation_blocked_dialog_title,\n        contentStringResId = R.string.installation_blocked_description,\n    ),\n    FAILURE_CONFLICT(\n        flag = PackageInstaller.STATUS_FAILURE_CONFLICT,\n        title = R.string.installation_conflict_dialog_title,\n        contentStringResId = R.string.installation_conflict_description,\n        confirmButton = installerStatusDialogButton(R.string.reinstall) { model ->\n            model.reinstall()\n        },\n        dismissButton = installerStatusDialogButton(R.string.cancel),\n    ),\n    FAILURE_INCOMPATIBLE(\n        flag = PackageInstaller.STATUS_FAILURE_INCOMPATIBLE,\n        title = R.string.installation_incompatible_dialog_title,\n        contentStringResId = R.string.installation_incompatible_description,\n    ),\n    FAILURE_INVALID(\n        flag = PackageInstaller.STATUS_FAILURE_INVALID,\n        title = R.string.installation_invalid_dialog_title,\n        contentStringResId = R.string.installation_invalid_description,\n        confirmButton = installerStatusDialogButton(R.string.reinstall) { model ->\n            model.reinstall()\n        },\n        dismissButton = installerStatusDialogButton(R.string.cancel),\n    ),\n    FAILURE_STORAGE(\n        flag = PackageInstaller.STATUS_FAILURE_STORAGE,\n        title = R.string.installation_storage_issue_dialog_title,\n        contentStringResId = R.string.installation_storage_issue_description,\n    ),\n    FAILURE_TIMEOUT(\n        flag = @SuppressLint(\"InlinedApi\") PackageInstaller.STATUS_FAILURE_TIMEOUT,\n        title = R.string.installation_timeout_dialog_title,\n        contentStringResId = R.string.installation_timeout_description,\n        confirmButton = installerStatusDialogButton(R.string.install_app) { model ->\n            model.install()\n        },\n    );\n\n    // Needed due to the @FromValue annotation.\n    companion object\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/LazyColumnWithScrollbar.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.gestures.FlingBehavior\nimport androidx.compose.foundation.gestures.ScrollableDefaults\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.LazyListScope\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\n\n@Composable\nfun LazyColumnWithScrollbar(\n    modifier: Modifier = Modifier,\n    state: LazyListState = rememberLazyListState(),\n    contentPadding: PaddingValues = PaddingValues(0.dp),\n    reverseLayout: Boolean = false,\n    verticalArrangement: Arrangement.Vertical =\n        if (!reverseLayout) Arrangement.Top else Arrangement.Bottom,\n    horizontalAlignment: Alignment.Horizontal = Alignment.Start,\n    flingBehavior: FlingBehavior = ScrollableDefaults.flingBehavior(),\n    userScrollEnabled: Boolean = true,\n    content: LazyListScope.() -> Unit\n) {\n    LazyColumn(\n        modifier = modifier,\n        state = state,\n        contentPadding = contentPadding,\n        reverseLayout = reverseLayout,\n        verticalArrangement = verticalArrangement,\n        horizontalAlignment = horizontalAlignment,\n        flingBehavior = flingBehavior,\n        userScrollEnabled = userScrollEnabled,\n        content = content\n    )\n    Scrollbar(state, Modifier.then(modifier.padding())) // Get the modifier's padding to maintain scrollbar within the screen, e.g. paddingValues\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/LazyColumnWithScrollbarEdgeShadow.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.gestures.FlingBehavior\nimport androidx.compose.foundation.gestures.ScrollableDefaults\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.LazyListScope\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.alpha\nimport androidx.compose.ui.graphics.Brush\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\n\n@Composable\nfun LazyColumnWithScrollbarEdgeShadow(\n    modifier: Modifier = Modifier,\n    state: LazyListState = rememberLazyListState(),\n    contentPadding: PaddingValues = PaddingValues(0.dp),\n    reverseLayout: Boolean = false,\n    verticalArrangement: Arrangement.Vertical = if (!reverseLayout) Arrangement.Top else Arrangement.Bottom,\n    horizontalAlignment: Alignment.Horizontal = Alignment.Start,\n    flingBehavior: FlingBehavior = ScrollableDefaults.flingBehavior(),\n    userScrollEnabled: Boolean = true,\n    edgeShadowHeight: Dp = 40.dp,\n    edgeShadowProximity: Dp = 80.dp,\n    content: LazyListScope.() -> Unit\n) {\n    val surfaceColor = MaterialTheme.colorScheme.surface\n    val proximityPx = with(LocalDensity.current) { edgeShadowProximity.toPx() }\n\n    val topAlpha by remember(state, proximityPx) {\n        derivedStateOf {\n            if (!state.canScrollBackward || proximityPx <= 0f)\n                return@derivedStateOf 0f\n\n            val layoutInfo = state.layoutInfo\n            val firstVisible = layoutInfo.visibleItemsInfo.firstOrNull()\n                ?: return@derivedStateOf 0f\n\n            if (firstVisible.index > 0)\n                return@derivedStateOf 1f\n\n            val viewportStart = layoutInfo.viewportStartOffset + layoutInfo.beforeContentPadding\n            val overflowPx = (viewportStart - firstVisible.offset).coerceAtLeast(0)\n\n            (overflowPx / proximityPx).coerceIn(0f, 1f)\n        }\n    }\n\n    val bottomAlpha by remember(state, proximityPx) {\n        derivedStateOf {\n            if (!state.canScrollForward || proximityPx <= 0f)\n                return@derivedStateOf 0f\n\n            val layoutInfo = state.layoutInfo\n            val lastIndex = layoutInfo.totalItemsCount - 1\n            val lastVisible = layoutInfo.visibleItemsInfo.lastOrNull()\n                ?: return@derivedStateOf 0f\n\n            if (lastVisible.index < lastIndex)\n                return@derivedStateOf 1f\n\n            val viewportEnd = layoutInfo.viewportEndOffset - layoutInfo.afterContentPadding\n            val overflowPx = (lastVisible.offset + lastVisible.size - viewportEnd)\n                .coerceAtLeast(0)\n\n            (overflowPx / proximityPx).coerceIn(0f, 1f)\n        }\n    }\n\n    Box(modifier = modifier) {\n        LazyColumn(\n            modifier = Modifier.matchParentSize(),\n            state = state,\n            contentPadding = contentPadding,\n            reverseLayout = reverseLayout,\n            verticalArrangement = verticalArrangement,\n            horizontalAlignment = horizontalAlignment,\n            flingBehavior = flingBehavior,\n            userScrollEnabled = userScrollEnabled,\n            content = content\n        )\n\n        if (topAlpha > 0f) {\n            Box(\n                modifier = Modifier\n                    .align(Alignment.TopCenter)\n                    .fillMaxWidth()\n                    .height(edgeShadowHeight)\n                    .alpha(topAlpha)\n                    .background(\n                        Brush.verticalGradient(\n                            colors = listOf(surfaceColor, Color.Transparent)\n                        )\n                    )\n            )\n        }\n\n        if (bottomAlpha > 0f) {\n            Box(\n                modifier = Modifier\n                    .align(Alignment.BottomCenter)\n                    .fillMaxWidth()\n                    .height(edgeShadowHeight)\n                    .alpha(bottomAlpha)\n                    .background(\n                        Brush.verticalGradient(\n                            colors = listOf(Color.Transparent, surfaceColor)\n                        )\n                    )\n            )\n        }\n\n        if (state.canScrollForward || state.canScrollBackward) {\n            Scrollbar(state)\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/ListSection.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.ListItemDefaults\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.semantics.heading\nimport androidx.compose.ui.semantics.semantics\nimport androidx.compose.ui.unit.dp\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun ListSection(\n    modifier: Modifier = Modifier,\n    title: String? = null,\n    leadingContent: (@Composable () -> Unit)? = null,\n    contentPadding: PaddingValues = PaddingValues(horizontal = 16.dp),\n    content: @Composable () -> Unit\n) {\n    Column(modifier = modifier.fillMaxWidth()) {\n        if (title != null) {\n            Row(\n                modifier = Modifier\n                    .padding(start = 32.dp, end = 16.dp, top = 16.dp, bottom = 8.dp)\n                    .semantics { heading() },\n                verticalAlignment = Alignment.CenterVertically,\n                horizontalArrangement = Arrangement.spacedBy(8.dp)\n            ) {\n                if (leadingContent != null) {\n                    CompositionLocalProvider(LocalContentColor provides MaterialTheme.colorScheme.primary) {\n                        leadingContent()\n                    }\n                }\n                Text(\n                    text = title,\n                    color = MaterialTheme.colorScheme.primary,\n                    style = MaterialTheme.typography.labelLarge\n                )\n            }\n        }\n\n        Column(\n            modifier = Modifier\n                .padding(contentPadding)\n                .clip(MaterialTheme.shapes.large),\n            verticalArrangement = Arrangement.spacedBy(ListItemDefaults.SegmentedGap)\n        ) {\n            content()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/LoadingIndicator.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.material3.CircularProgressIndicator\nimport androidx.compose.material3.ProgressIndicatorDefaults\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.StrokeCap\nimport androidx.compose.ui.unit.Dp\n\n@Composable\nfun LoadingIndicator(\n    modifier: Modifier = Modifier,\n    progress: () -> Float? = { null },\n    color: Color = ProgressIndicatorDefaults.circularColor,\n    strokeWidth: Dp = ProgressIndicatorDefaults.CircularStrokeWidth,\n    trackColor: Color = ProgressIndicatorDefaults.circularIndeterminateTrackColor,\n    strokeCap: StrokeCap = ProgressIndicatorDefaults.CircularDeterminateStrokeCap\n) {\n    progress()?.let {\n        CircularProgressIndicator(\n            progress = { it },\n            modifier = modifier,\n            color = color,\n            strokeWidth = strokeWidth,\n            trackColor = trackColor,\n            strokeCap = strokeCap\n        )\n    } ?:\n        CircularProgressIndicator(\n            modifier = modifier,\n            color = color,\n            strokeWidth = strokeWidth,\n            trackColor = trackColor,\n            strokeCap = strokeCap\n        )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/Markdown.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.text.font.FontWeight\nimport com.mikepenz.markdown.compose.Markdown\nimport com.mikepenz.markdown.m3.markdownColor\nimport com.mikepenz.markdown.m3.markdownTypography\n\n@Composable\nfun Markdown(\n    text: String\n) {\n    val markdown = text.trimIndent()\n\n    Markdown(\n        content = markdown,\n        colors = markdownColor(\n            text = MaterialTheme.colorScheme.onSurfaceVariant,\n            codeBackground = MaterialTheme.colorScheme.secondaryContainer,\n        ),\n        typography = markdownTypography(\n            h1 = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.Bold),\n            h2 = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight.Bold),\n            h3 = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.Bold),\n            text = MaterialTheme.typography.bodyMedium,\n            list = MaterialTheme.typography.bodyMedium\n        )\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/NotificationCard.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Close\nimport androidx.compose.material3.Card\nimport androidx.compose.material3.CardDefaults\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\n\nenum class NotificationCardType {\n    NORMAL, WARNING, ERROR\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun NotificationCard(\n    text: String,\n    icon: ImageVector,\n    modifier: Modifier = Modifier,\n    actions: (@Composable RowScope.() -> Unit)? = null,\n    title: String? = null,\n    type: NotificationCardType = NotificationCardType.NORMAL,\n    onDismiss: (() -> Unit)? = null,\n    onClick: (() -> Unit)? = null\n) {\n    val color =\n        when (type) {\n            NotificationCardType.ERROR -> MaterialTheme.colorScheme.onError\n            NotificationCardType.WARNING -> MaterialTheme.colorScheme.onPrimaryContainer\n            else -> MaterialTheme.colorScheme.onTertiaryContainer\n        }\n\n    NotificationCardInstance(modifier = modifier, type = type, onClick = onClick) {\n        CompositionLocalProvider(LocalContentColor provides color) {\n            Row(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .padding(16.dp),\n                verticalAlignment = Alignment.Top,\n                horizontalArrangement = Arrangement.spacedBy(16.dp),\n            ) {\n                Box(\n                    modifier = Modifier.size(28.dp),\n                    contentAlignment = Alignment.Center\n                ) {\n                    Icon(\n                        modifier = Modifier.size(24.dp),\n                        imageVector = icon,\n                        contentDescription = null,\n                    )\n                }\n                Column(\n                    modifier = Modifier.weight(1f),\n                    verticalArrangement = Arrangement.spacedBy(8.dp)\n                ) {\n                    title?.let {\n                        Text(\n                            text = it,\n                            style = MaterialTheme.typography.bodyLarge,\n                            color = LocalContentColor.current,\n                        )\n                    }\n                    Text(\n                        text = text,\n                        style = MaterialTheme.typography.bodyLarge,\n                        color = LocalContentColor.current,\n                    )\n                    actions?.let {\n                        Row(\n                            modifier = Modifier.fillMaxWidth(),\n                            horizontalArrangement = Arrangement.End,\n                            content = { it() }\n                        )\n                    }\n                }\n                if (onDismiss != null) {\n                    TooltipIconButton(\n                        onClick = onDismiss,\n                        tooltip = stringResource(R.string.close),\n                    ) {\n                        Icon(\n                            imageVector = Icons.Outlined.Close,\n                            contentDescription = stringResource(R.string.close),\n                        )\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun NotificationCardInstance(\n    modifier: Modifier = Modifier,\n    type: NotificationCardType = NotificationCardType.NORMAL,\n    onClick: (() -> Unit)? = null,\n    content: @Composable () -> Unit,\n) {\n    val colors =\n        CardDefaults.cardColors(\n            containerColor = when (type) {\n                NotificationCardType.ERROR -> MaterialTheme.colorScheme.error\n                NotificationCardType.WARNING -> MaterialTheme.colorScheme.primaryContainer\n                else -> MaterialTheme.colorScheme.tertiaryContainer\n            }\n        )\n    val defaultModifier = Modifier\n        .fillMaxWidth()\n        .clip(RoundedCornerShape(24.dp))\n\n    if (onClick != null) {\n        Card(\n            onClick = onClick,\n            colors = colors,\n            modifier = modifier.then(defaultModifier),\n            content = { content() }\n        )\n    } else {\n        Card(\n            colors = colors,\n            modifier = modifier.then(defaultModifier),\n            content = { content() }\n        )\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/NumberInputDialog.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.OutlinedTextField\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.DisallowComposableCalls\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nprivate inline fun <T> NumberInputDialog(\n    current: T?,\n    name: String,\n    unit: String?,\n    crossinline onSubmit: (T?) -> Unit,\n    crossinline validator: @DisallowComposableCalls (T) -> Boolean,\n    crossinline toNumberOrNull: @DisallowComposableCalls String.() -> T?\n) {\n    var fieldValue by rememberSaveable {\n        mutableStateOf(current?.toString().orEmpty())\n    }\n    val numberFieldValue by remember {\n        derivedStateOf { fieldValue.toNumberOrNull() }\n    }\n    val validatorFailed by remember {\n        derivedStateOf { numberFieldValue?.let { !validator(it) } ?: false }\n    }\n\n    AlertDialog(\n        onDismissRequest = { onSubmit(null) },\n        title = { Text(name) },\n        text = {\n            OutlinedTextField(\n                value = fieldValue,\n                onValueChange = { fieldValue = it },\n                placeholder = {\n                    Text(stringResource(R.string.dialog_input_placeholder))\n                },\n                isError = validatorFailed,\n                suffix = unit?.let { { Text(it) } },\n                supportingText = {\n                    if (validatorFailed) {\n                        Text(\n                            stringResource(R.string.input_dialog_value_invalid),\n                            modifier = Modifier.fillMaxWidth(),\n                            color = MaterialTheme.colorScheme.error\n                        )\n                    }\n                }\n            )\n        },\n        confirmButton = {\n            TextButton(\n                onClick = { numberFieldValue?.let(onSubmit) },\n                enabled = numberFieldValue != null && !validatorFailed,\n                shapes = ButtonDefaults.shapes()\n            ) {\n                Text(stringResource(R.string.save))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = { onSubmit(null) }, shapes = ButtonDefaults.shapes()) {\n                Text(stringResource(R.string.cancel))\n            }\n        },\n    )\n}\n\n@Composable\nfun IntInputDialog(\n    current: Int?,\n    name: String,\n    unit: String? = null,\n    validator: (Int) -> Boolean = { true },\n    onSubmit: (Int?) -> Unit\n) = NumberInputDialog(current, name, unit, onSubmit, validator, String::toIntOrNull)\n\n@Composable\nfun LongInputDialog(\n    current: Long?,\n    name: String,\n    unit: String? = null,\n    validator: (Long) -> Boolean = { true },\n    onSubmit: (Long?) -> Unit\n) = NumberInputDialog(current, name, unit, onSubmit, validator, String::toLongOrNull)\n\n@Composable\nfun FloatInputDialog(\n    current: Float?,\n    name: String,\n    unit: String? = null,\n    validator: (Float) -> Boolean = { true },\n    onSubmit: (Float?) -> Unit\n) = NumberInputDialog(current, name, unit, onSubmit, validator, String::toFloatOrNull)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/PasswordField.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.text.KeyboardOptions\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Visibility\nimport androidx.compose.material.icons.outlined.VisibilityOff\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.OutlinedTextField\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.input.KeyboardType\nimport androidx.compose.ui.text.input.PasswordVisualTransformation\nimport androidx.compose.ui.text.input.VisualTransformation\nimport app.revanced.manager.R\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun PasswordField(modifier: Modifier = Modifier, value: String, onValueChange: (String) -> Unit, label: @Composable (() -> Unit)? = null, placeholder: @Composable (() -> Unit)? = null) {\n    var visible by rememberSaveable {\n        mutableStateOf(false)\n    }\n\n    OutlinedTextField(\n        value = value,\n        onValueChange = onValueChange,\n        placeholder = placeholder,\n        label = label,\n        modifier = modifier,\n        trailingIcon = {\n            val (icon, description) = remember(visible) {\n                if (visible) Icons.Outlined.VisibilityOff to R.string.hide_password_field else Icons.Outlined.Visibility to R.string.show_password_field\n            }\n            TooltipIconButton(\n                onClick = { visible = !visible },\n                tooltip = stringResource(description)\n            ) {\n                Icon(icon, stringResource(description))\n            }\n        },\n        keyboardOptions = KeyboardOptions(\n            keyboardType = KeyboardType.Password\n        ),\n        visualTransformation = if (visible) VisualTransformation.None else PasswordVisualTransformation()\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/PillTabBar.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.core.view.HapticFeedbackConstantsCompat\nimport androidx.compose.animation.core.CubicBezierEasing\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.animation.core.tween\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.gestures.detectTapGestures\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.BoxWithConstraints\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.offset\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.pager.PagerState\nimport androidx.compose.foundation.shape.CircleShape\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ProvideTextStyle\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableIntStateOf\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.runtime.staticCompositionLocalOf\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.TransformOrigin\nimport androidx.compose.ui.graphics.graphicsLayer\nimport androidx.compose.ui.input.pointer.pointerInput\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.platform.LocalView\nimport androidx.compose.ui.semantics.Role\nimport androidx.compose.ui.semantics.role\nimport androidx.compose.ui.semantics.selected\nimport androidx.compose.ui.semantics.semantics\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.IntOffset\nimport androidx.compose.ui.unit.dp\nimport kotlin.math.roundToInt\n\n@Composable\nfun PillTabBar(\n    pagerState: PagerState,\n    modifier: Modifier = Modifier,\n    colors: PillTabBarColors = PillTabBarDefaults.colors(),\n    tabs: @Composable RowScope.() -> Unit\n) {\n    val tabCount = pagerState.pageCount.coerceAtLeast(1)\n    val state = rememberPillTabBarState(pagerState, tabCount)\n    val indicatorScale by animatePillTabScale(state.pressedTabIndex == pagerState.currentPage)\n\n    BoxWithConstraints(\n        modifier = modifier\n            .height(PillTabBarDefaults.ContainerHeight)\n            .clip(CircleShape)\n            .background(colors.containerColor)\n            .padding(PillTabBarDefaults.ContainerPadding)\n    ) {\n        val indicatorWidthPx = with(LocalDensity.current) { maxWidth.toPx() } / tabCount\n        val offsetX = (pagerState.currentPage + pagerState.currentPageOffsetFraction) * indicatorWidthPx\n\n        PillTabIndicator(\n            offsetX = offsetX,\n            tabCount = tabCount,\n            currentPage = pagerState.currentPage,\n            scale = indicatorScale,\n            color = colors.indicatorColor\n        )\n\n        CompositionLocalProvider(\n            LocalPillTabBarState provides state,\n            LocalPillTabBarColors provides colors\n        ) {\n            Row(\n                modifier = Modifier.matchParentSize(),\n                horizontalArrangement = Arrangement.SpaceEvenly,\n                verticalAlignment = Alignment.CenterVertically,\n                content = tabs\n            )\n        }\n    }\n}\n\n@Composable\nfun RowScope.PillTab(\n    index: Int,\n    onClick: () -> Unit,\n    text: @Composable () -> Unit,\n    modifier: Modifier = Modifier,\n    icon: (@Composable () -> Unit)? = null\n) {\n    val view = LocalView.current\n    val state = LocalPillTabBarState.current\n    val colors = LocalPillTabBarColors.current\n    val isSelected = state.pagerState.currentPage == index\n    val contentScale by animatePillTabScale(state.pressedTabIndex == index)\n\n    val hasComposed = remember { mutableStateOf(false) }\n    LaunchedEffect(isSelected) {\n        if (!hasComposed.value) {\n            hasComposed.value = true\n            return@LaunchedEffect\n        }\n        if (isSelected) {\n            view.performHapticFeedback(HapticFeedbackConstantsCompat.VIRTUAL_KEY)\n        }\n    }\n\n    Box(\n        modifier = modifier\n            .weight(1f)\n            .fillMaxHeight()\n            .semantics {\n                role = Role.Tab\n                selected = isSelected\n            }\n            .graphicsLayer {\n                scaleX = contentScale\n                scaleY = contentScale\n                transformOrigin = transformOriginForIndex(index, state.tabCount)\n            }\n            .pointerInput(Unit) {\n                detectTapGestures(\n                    onPress = {\n                        state.onPressedTabIndexChange(index)\n                        try {\n                            awaitRelease()\n                        } finally {\n                            state.onPressedTabIndexChange(-1)\n                        }\n                    },\n                    onTap = { onClick() }\n                )\n            },\n        contentAlignment = Alignment.Center\n    ) {\n        PillTabContent(\n            isSelected = isSelected,\n            colors = colors,\n            icon = icon,\n            text = text\n        )\n    }\n}\n\n@Composable\nprivate fun PillTabIndicator(\n    offsetX: Float,\n    tabCount: Int,\n    currentPage: Int,\n    scale: Float,\n    color: Color\n) {\n    Box(\n        modifier = Modifier\n            .fillMaxHeight()\n            .fillMaxWidth(1f / tabCount)\n            .offset { IntOffset(offsetX.roundToInt(), 0) }\n            .graphicsLayer {\n                scaleX = scale\n                scaleY = scale\n                transformOrigin = transformOriginForIndex(currentPage, tabCount)\n            }\n            .clip(CircleShape)\n            .background(color)\n    )\n}\n\n@Composable\nprivate fun PillTabContent(\n    isSelected: Boolean,\n    colors: PillTabBarColors,\n    icon: (@Composable () -> Unit)?,\n    text: @Composable () -> Unit\n) {\n    val contentColor = if (isSelected) colors.selectedContentColor else colors.unselectedContentColor\n    val fontWeight = if (isSelected) FontWeight.SemiBold else FontWeight.Normal\n\n    CompositionLocalProvider(LocalContentColor provides contentColor) {\n        ProvideTextStyle(MaterialTheme.typography.labelLarge.copy(fontWeight = fontWeight)) {\n            Row(\n                verticalAlignment = Alignment.CenterVertically,\n                horizontalArrangement = Arrangement.spacedBy(PillTabBarDefaults.IconTextSpacing)\n            ) {\n                icon?.invoke()\n                text()\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun rememberPillTabBarState(\n    pagerState: PagerState,\n    tabCount: Int\n): PillTabBarState {\n    var pressedTabIndex by remember { mutableIntStateOf(-1) }\n    return remember(pagerState, tabCount, pressedTabIndex) {\n        PillTabBarState(\n            pagerState = pagerState,\n            tabCount = tabCount,\n            pressedTabIndex = pressedTabIndex,\n            onPressedTabIndexChange = { pressedTabIndex = it }\n        )\n    }\n}\n\n@Composable\nprivate fun animatePillTabScale(isPressed: Boolean) = animateFloatAsState(\n    targetValue = if (isPressed) PillTabBarDefaults.PressedScale else 1f,\n    animationSpec = PillTabBarDefaults.PressAnimationSpec,\n    label = \"pillTabScale\"\n)\n\nprivate fun transformOriginForIndex(index: Int, count: Int) = TransformOrigin(\n    pivotFractionX = when (index) {\n        0 -> 0f\n        count - 1 -> 1f\n        else -> 0.5f\n    },\n    pivotFractionY = 0.5f\n)\n\nobject PillTabBarDefaults {\n    val ContainerHeight: Dp = 48.dp\n    val ContainerPadding: Dp = 4.dp\n    val IconTextSpacing: Dp = 6.dp\n\n    internal const val PressedScale = 0.99f\n    internal val PressAnimationSpec = tween<Float>(\n        durationMillis = 80,\n        easing = CubicBezierEasing(0.2f, 0f, 0.4f, 1f)\n    )\n\n    @Composable\n    fun colors(\n        containerColor: Color = MaterialTheme.colorScheme.surfaceContainerLow,\n        indicatorColor: Color = MaterialTheme.colorScheme.primaryContainer,\n        selectedContentColor: Color = MaterialTheme.colorScheme.onPrimaryContainer,\n        unselectedContentColor: Color = MaterialTheme.colorScheme.onSurfaceVariant\n    ) = PillTabBarColors(\n        containerColor = containerColor,\n        indicatorColor = indicatorColor,\n        selectedContentColor = selectedContentColor,\n        unselectedContentColor = unselectedContentColor\n    )\n}\n\n@Immutable\ndata class PillTabBarColors(\n    val containerColor: Color,\n    val indicatorColor: Color,\n    val selectedContentColor: Color,\n    val unselectedContentColor: Color\n)\n\n@Immutable\nprivate data class PillTabBarState(\n    val pagerState: PagerState,\n    val tabCount: Int,\n    val pressedTabIndex: Int,\n    val onPressedTabIndexChange: (Int) -> Unit\n)\n\nprivate val LocalPillTabBarState = staticCompositionLocalOf<PillTabBarState> {\n    error(\"PillTab must be used within PillTabBar\")\n}\n\nprivate val LocalPillTabBarColors = staticCompositionLocalOf<PillTabBarColors> {\n    error(\"PillTab must be used within PillTabBar\")\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/SafeguardDialog.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.annotation.StringRes\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.WarningAmber\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.style.TextAlign\nimport app.revanced.manager.R\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun SafeguardDialog(\n    onDismiss: () -> Unit,\n    @StringRes title: Int,\n    body: String,\n) {\n    AlertDialog(\n        onDismissRequest = onDismiss,\n        confirmButton = {\n            TextButton(onClick = onDismiss, shapes = ButtonDefaults.shapes()) {\n                Text(stringResource(R.string.ok))\n            }\n        },\n        icon = {\n            Icon(Icons.Outlined.WarningAmber, null)\n        },\n        title = {\n            Text(\n                text = stringResource(title),\n                style = MaterialTheme.typography.headlineSmall.copy(textAlign = TextAlign.Center)\n            )\n        },\n        text = {\n            Text(body)\n        }\n    )\n}\n\n@Composable\nfun NonSuggestedVersionDialog(suggestedVersion: String, onDismiss: () -> Unit) {\n    SafeguardDialog(\n        onDismiss = onDismiss,\n        title = R.string.non_suggested_version_warning_title,\n        body = stringResource(R.string.non_suggested_version_warning_description, suggestedVersion),\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/Scrollbar.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.ScrollState\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport com.gigamole.composescrollbars.Scrollbars\nimport com.gigamole.composescrollbars.ScrollbarsState\nimport com.gigamole.composescrollbars.config.ScrollbarsConfig\nimport com.gigamole.composescrollbars.config.ScrollbarsOrientation\nimport com.gigamole.composescrollbars.config.layercontenttype.ScrollbarsLayerContentType\nimport com.gigamole.composescrollbars.config.layersType.ScrollbarsLayersType\nimport com.gigamole.composescrollbars.config.layersType.thicknessType.ScrollbarsThicknessType\nimport com.gigamole.composescrollbars.config.visibilitytype.ScrollbarsVisibilityType\nimport com.gigamole.composescrollbars.scrolltype.ScrollbarsScrollType\nimport com.gigamole.composescrollbars.scrolltype.knobtype.ScrollbarsDynamicKnobType\nimport com.gigamole.composescrollbars.scrolltype.knobtype.ScrollbarsStaticKnobType\n\n@Composable\nfun Scrollbar(scrollState: ScrollState, modifier: Modifier = Modifier) {\n    Scrollbar(\n        ScrollbarsScrollType.Scroll(\n            knobType = ScrollbarsStaticKnobType.Auto(),\n            state = scrollState\n        ),\n        modifier\n    )\n}\n\n@Composable\nfun Scrollbar(lazyListState: LazyListState, modifier: Modifier = Modifier) {\n    Scrollbar(\n        ScrollbarsScrollType.Lazy.List.Dynamic(\n            knobType = ScrollbarsDynamicKnobType.Auto(),\n            state = lazyListState\n        ),\n        modifier\n    )\n}\n\n@Composable\nprivate fun Scrollbar(scrollType: ScrollbarsScrollType, modifier: Modifier = Modifier) {\n    Scrollbars(\n        state = ScrollbarsState(\n            ScrollbarsConfig(\n                orientation = ScrollbarsOrientation.Vertical,\n                paddingValues = PaddingValues(0.dp),\n                layersType = ScrollbarsLayersType.Wrap(ScrollbarsThicknessType.Exact(4.dp)),\n                knobLayerContentType = ScrollbarsLayerContentType.Default.Colored.Idle(\n                    idleColor = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.35f)\n                ),\n                visibilityType = ScrollbarsVisibilityType.Dynamic.Fade(\n                    isVisibleOnTouchDown = true,\n                    isStaticWhenScrollPossible = false\n                )\n            ),\n            scrollType\n        ),\n        modifier = modifier\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/SearchBar.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.ColumnScope\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.sizeIn\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.SearchBar\nimport androidx.compose.material3.SearchBarColors\nimport androidx.compose.material3.SearchBarDefaults\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.focus.FocusRequester\nimport androidx.compose.ui.focus.focusRequester\nimport androidx.compose.ui.platform.LocalSoftwareKeyboardController\nimport androidx.compose.ui.unit.dp\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun SearchBar(\n    query: String,\n    onQueryChange: (String) -> Unit,\n    expanded: Boolean,\n    onExpandedChange: (Boolean) -> Unit,\n    autoFocus: Boolean = false,\n    placeholder: (@Composable () -> Unit)? = null,\n    leadingIcon: @Composable (() -> Unit)? = null,\n    trailingIcon: @Composable (() -> Unit)? = null,\n    windowInsets: WindowInsets = SearchBarDefaults.windowInsets,\n    content: @Composable ColumnScope.() -> Unit\n) {\n    val colors = SearchBarColors(\n        containerColor = MaterialTheme.colorScheme.surfaceContainerHigh,\n        dividerColor = MaterialTheme.colorScheme.outline,\n        inputFieldColors = SearchBarDefaults.inputFieldColors()\n    )\n    val keyboardController = LocalSoftwareKeyboardController.current\n    val focusRequester = remember { FocusRequester() }\n\n    Box(modifier = Modifier.fillMaxWidth()) {\n        SearchBar(\n            modifier = Modifier\n                .align(Alignment.Center)\n                .then(if (autoFocus) Modifier.focusRequester(focusRequester) else Modifier),\n            inputField = {\n                SearchBarDefaults.InputField(\n                    modifier = Modifier.sizeIn(minWidth = 380.dp),\n                    query = query,\n                    onQueryChange = onQueryChange,\n                    onSearch = {\n                        keyboardController?.hide()\n                    },\n                    expanded = expanded,\n                    onExpandedChange = onExpandedChange,\n                    placeholder = placeholder,\n                    leadingIcon = leadingIcon,\n                    trailingIcon = trailingIcon\n                )\n            },\n            expanded = expanded,\n            onExpandedChange = onExpandedChange,\n            colors = colors,\n            windowInsets = windowInsets,\n            content = content\n        )\n    }\n\n    LaunchedEffect(autoFocus, expanded) {\n        if (autoFocus && expanded) {\n            focusRequester.requestFocus()\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/SearchView.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.layout.ColumnScope\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material.icons.filled.Close\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.SearchBar\nimport androidx.compose.material3.SearchBarColors\nimport androidx.compose.material3.SearchBarDefaults\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.focus.FocusRequester\nimport androidx.compose.ui.focus.focusRequester\nimport androidx.compose.ui.platform.LocalSoftwareKeyboardController\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun SearchView(\n    query: String,\n    onQueryChange: (String) -> Unit,\n    onActiveChange: (Boolean) -> Unit,\n    placeholder: (@Composable () -> Unit)? = null,\n    trailingContent: (@Composable () -> Unit)? = null,\n    content: @Composable ColumnScope.() -> Unit\n) {\n    val colors = SearchBarColors(\n        containerColor = MaterialTheme.colorScheme.surfaceContainerHigh,\n        dividerColor = MaterialTheme.colorScheme.outline,\n        inputFieldColors = SearchBarDefaults.inputFieldColors()\n    )\n    val focusRequester = remember { FocusRequester() }\n    val keyboardController = LocalSoftwareKeyboardController.current\n\n    SearchBar(\n        inputField = {\n            SearchBarDefaults.InputField(\n                query = query,\n                onQueryChange = onQueryChange,\n                onSearch = {\n                    keyboardController?.hide()\n                },\n                expanded = true,\n                onExpandedChange = onActiveChange,\n                placeholder = placeholder,\n                leadingIcon = {\n                    TooltipIconButton(\n                        onClick = { onActiveChange(false) },\n                        tooltip = stringResource(R.string.back),\n                    ) { contentDescription ->\n                        Icon(\n                            Icons.AutoMirrored.Filled.ArrowBack,\n                            contentDescription\n                        )\n                    }\n                },\n                trailingIcon = {\n                    Row {\n                        trailingContent?.invoke()\n\n                        if (query.isNotEmpty()) {\n                            TooltipIconButton(\n                                onClick = { onQueryChange(\"\") },\n                                tooltip = stringResource(R.string.clear),\n                            ) { contentDescription ->\n                                Icon(\n                                    Icons.Filled.Close,\n                                    contentDescription = contentDescription\n                                )\n                            }\n                        }\n                    }\n                }\n            )\n        },\n        expanded = true,\n        onExpandedChange = onActiveChange,\n        modifier = Modifier.focusRequester(focusRequester),\n        colors = colors,\n        content = content\n    )\n\n    LaunchedEffect(Unit) {\n        focusRequester.requestFocus()\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/SegmentedButton.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.foundation.ExperimentalFoundationApi\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.basicMarquee\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.surfaceColorAtElevation\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.painter.Painter\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.unit.dp\n\n/**\n * Credits to [Vendetta](https://github.com/vendetta-mod)\n */\n@OptIn(ExperimentalFoundationApi::class)\n@Composable\nfun RowScope.SegmentedButton(\n    icon: Any,\n    text: String,\n    onClick: () -> Unit,\n    iconDescription: String? = null,\n    enabled: Boolean = true\n) {\n    val contentColor = if (enabled)\n        MaterialTheme.colorScheme.primary\n    else\n        MaterialTheme.colorScheme.onSurface.copy(0.38f)\n\n    CompositionLocalProvider(LocalContentColor provides contentColor) {\n        Column(\n            horizontalAlignment = Alignment.CenterHorizontally,\n            verticalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterVertically),\n            modifier = Modifier\n                .clickable(enabled = enabled, onClick = onClick)\n                .background(\n                    if (enabled)\n                        MaterialTheme.colorScheme.surfaceColorAtElevation(2.dp)\n                    else\n                        MaterialTheme.colorScheme.onSurface.copy(0.12f)\n                )\n                .weight(1f)\n                .padding(vertical = 20.dp)\n        ) {\n            when (icon) {\n                is ImageVector -> {\n                    Icon(\n                        imageVector = icon,\n                        contentDescription = iconDescription\n                    )\n                }\n\n                is Painter -> {\n                    Icon(\n                        painter = icon,\n                        contentDescription = iconDescription\n                    )\n                }\n            }\n\n            Text(\n                text = text,\n                style = MaterialTheme.typography.labelLarge,\n                maxLines = 1,\n                modifier = Modifier.basicMarquee()\n            )\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/ShareSheet.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport android.content.ComponentName\nimport android.content.Context\nimport android.content.Intent\nimport android.content.pm.PackageManager\nimport android.content.pm.ResolveInfo\nimport android.graphics.drawable.Drawable\nimport android.net.Uri\nimport android.os.Build\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.lazy.LazyRow\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.shape.CircleShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Android\nimport androidx.compose.material.icons.outlined.ContentCopy\nimport androidx.compose.material.icons.outlined.Download\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItemDefaults\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ModalBottomSheet\nimport androidx.compose.material3.SegmentedListItem\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.rememberModalBottomSheetState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.graphics.Brush\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.font.FontFamily\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport com.google.accompanist.drawablepainter.rememberDrawablePainter\n\nprivate data class ResolvedShareTarget(\n    val key: String,\n    val label: String,\n    val icon: Drawable?,\n    val componentName: ComponentName,\n)\n\nprivate fun resolveShareTargets(context: Context, uri: Uri): List<ResolvedShareTarget> {\n    val packageManager = context.packageManager\n    val sendIntent = Intent(Intent.ACTION_SEND).apply {\n        type = \"text/plain\"\n        putExtra(Intent.EXTRA_STREAM, uri)\n        addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)\n    }\n\n    val resolvedActivities: List<ResolveInfo> = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n        packageManager.queryIntentActivities(\n            sendIntent,\n            PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_DEFAULT_ONLY.toLong())\n        )\n    } else {\n        packageManager.queryIntentActivities(sendIntent, PackageManager.MATCH_DEFAULT_ONLY)\n    }\n\n    return resolvedActivities.mapNotNull { resolved ->\n        val info = resolved.activityInfo ?: return@mapNotNull null\n\n        ResolvedShareTarget(\n            key = \"${info.packageName}:${info.name}\",\n            label = resolved.loadLabel(packageManager).toString(),\n            icon = resolved.loadIcon(packageManager),\n            componentName = ComponentName(info.packageName, info.name),\n        )\n    }\n}\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun ShareSheet(\n    modifier: Modifier = Modifier,\n    onDismissRequest: () -> Unit,\n    title: String,\n    preview: String? = null,\n    shareUri: Uri?,\n    onSaveToFilesClick: () -> Unit,\n    onCopyToClipboard: () -> Unit,\n) {\n    val context = LocalContext.current\n    val shareTargets = remember(shareUri) {\n        shareUri?.let { resolveShareTargets(context, it) } ?: emptyList()\n    }\n\n    ModalBottomSheet(\n        onDismissRequest = onDismissRequest,\n        modifier = modifier,\n        sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true),\n    ) {\n        Column(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(bottom = 16.dp),\n            verticalArrangement = Arrangement.spacedBy(16.dp)\n        ) {\n            Text(\n                text = title,\n                style = MaterialTheme.typography.headlineSmall,\n                color = MaterialTheme.colorScheme.onSurface,\n                modifier = Modifier.padding(horizontal = 16.dp)\n            )\n\n            if (preview != null) {\n                Box(\n                    modifier = Modifier\n                        .fillMaxWidth()\n                        .clip(MaterialTheme.shapes.large)\n                ) {\n                    Surface(\n                        modifier = Modifier.fillMaxWidth(),\n                        shape = MaterialTheme.shapes.large,\n                        color = MaterialTheme.colorScheme.surfaceContainerLow\n                    ) {\n                        Text(\n                            text = preview.ifBlank { stringResource(R.string.loading) },\n                            style = MaterialTheme.typography.bodySmall,\n                            color = MaterialTheme.colorScheme.onSurfaceVariant,\n                            fontFamily = FontFamily.Monospace,\n                            maxLines = 7,\n                            overflow = TextOverflow.Ellipsis,\n                            modifier = Modifier\n                                .fillMaxWidth()\n                                .padding(horizontal = 16.dp, vertical = 14.dp)\n                        )\n                    }\n\n                    Box(\n                        modifier = Modifier\n                            .align(Alignment.BottomCenter)\n                            .fillMaxWidth()\n                            .height(42.dp)\n                            .background(\n                                brush = Brush.verticalGradient(\n                                    colors = listOf(\n                                        Color.Transparent,\n                                        MaterialTheme.colorScheme.surfaceContainerLow\n                                    )\n                                )\n                            )\n                    )\n                }\n            }\n\n            if (shareTargets.isNotEmpty()) {\n                LazyRow(\n                    contentPadding = PaddingValues(horizontal = 16.dp),\n                    horizontalArrangement = Arrangement.spacedBy(16.dp),\n                ) {\n                    items(items = shareTargets, key = { it.key }) { target ->\n                        ShareTarget(\n                            label = target.label,\n                            icon = target.icon,\n                            onClick = {\n                                val intent = Intent(Intent.ACTION_SEND).apply {\n                                    type = \"text/plain\"\n                                    putExtra(Intent.EXTRA_STREAM, shareUri)\n                                    addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)\n                                    component = target.componentName\n                                }\n                                context.startActivity(intent)\n                                onDismissRequest()\n                            }\n                        )\n                    }\n                }\n            }\n\n            ListSection(\n                contentPadding = PaddingValues(horizontal = 16.dp)\n            ) {\n                SegmentedListItem(\n                    onClick = onCopyToClipboard,\n                    shapes = ListItemDefaults.segmentedShapes(index = 0, count = 1),\n                    colors = ListItemDefaults.colors(containerColor = MaterialTheme.colorScheme.surfaceContainer),\n                    leadingContent = {\n                        Icon(\n                            imageVector = Icons.Outlined.ContentCopy,\n                            contentDescription = null\n                        )\n                    }\n                ) {\n                    Text(text = stringResource(R.string.copy_to_clipboard))\n                }\n                SegmentedListItem(\n                    onClick = onSaveToFilesClick,\n                    shapes = ListItemDefaults.segmentedShapes(index = 0, count = 1),\n                    colors = ListItemDefaults.colors(containerColor = MaterialTheme.colorScheme.surfaceContainer),\n                    leadingContent = {\n                        Icon(\n                            imageVector = Icons.Outlined.Download,\n                            contentDescription = null\n                        )\n                    }\n                ) {\n                    Text(text = stringResource(R.string.save_as_file))\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ShareTarget(label: String, icon: Drawable?, onClick: () -> Unit) {\n    Column(\n        modifier = Modifier.width(80.dp),\n        horizontalAlignment = Alignment.CenterHorizontally,\n        verticalArrangement = Arrangement.spacedBy(8.dp)\n    ) {\n        Box(\n            modifier = Modifier\n                .size(62.dp)\n                .clip(CircleShape)\n                .background(MaterialTheme.colorScheme.surfaceContainer)\n                .clickable(onClick = onClick),\n            contentAlignment = Alignment.Center\n        ) {\n            if (icon != null) {\n                Icon(\n                    painter = rememberDrawablePainter(icon),\n                    contentDescription = label,\n                    tint = Color.Unspecified,\n                    modifier = Modifier.size(54.dp)\n                )\n            } else {\n                Icon(\n                    imageVector = Icons.Default.Android,\n                    contentDescription = label,\n                    modifier = Modifier.size(54.dp),\n                    tint = MaterialTheme.colorScheme.onSurfaceVariant\n                )\n            }\n        }\n\n        Text(\n            text = label,\n            style = MaterialTheme.typography.labelLarge,\n            maxLines = 1,\n            overflow = TextOverflow.Ellipsis,\n            textAlign = TextAlign.Center,\n            color = MaterialTheme.colorScheme.onSurfaceVariant\n        )\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/TextInputDialog.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.TextField\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun TextInputDialog(\n    initial: String,\n    title: String,\n    onDismissRequest: () -> Unit,\n    onConfirm: (String) -> Unit,\n    validator: (String) -> Boolean = String::isNotEmpty,\n) {\n    val (value, setValue) = rememberSaveable(initial) {\n        mutableStateOf(initial)\n    }\n    val valid = remember(value, validator) {\n        validator(value)\n    }\n\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(\n                onClick = { onConfirm(value) },\n                enabled = valid,\n                shapes = ButtonDefaults.shapes()\n            ) {\n                Text(stringResource(R.string.ok))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest, shapes = ButtonDefaults.shapes()) {\n                Text(stringResource(R.string.cancel))\n            }\n        },\n        title = {\n            Text(title)\n        },\n        text = {\n            TextField(value = value, onValueChange = setValue)\n        }\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/Tooltip.kt",
    "content": "package app.revanced.manager.ui.component\n\nimport androidx.core.view.HapticFeedbackConstantsCompat\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.IconButton\nimport androidx.compose.material3.IconButtonDefaults\nimport androidx.compose.material3.PlainTooltip\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TooltipAnchorPosition\nimport androidx.compose.material3.TooltipBox\nimport androidx.compose.material3.TooltipDefaults\nimport androidx.compose.material3.rememberTooltipState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.snapshotFlow\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalView\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun TooltipHost(\n    tooltip: String?,\n    modifier: Modifier = Modifier,\n    content: @Composable (Modifier) -> Unit,\n) {\n    if (tooltip.isNullOrBlank()) {\n        content(modifier)\n        return\n    }\n\n    val view = LocalView.current\n    val tooltipState = rememberTooltipState()\n\n    LaunchedEffect(tooltipState, view) {\n        var wasVisible = tooltipState.isVisible\n\n        snapshotFlow { tooltipState.isVisible }.collect { isVisible ->\n            if (isVisible && !wasVisible) {\n                view.performHapticFeedback(HapticFeedbackConstantsCompat.LONG_PRESS)\n            }\n\n            wasVisible = isVisible\n        }\n    }\n\n    TooltipBox(\n        positionProvider = TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Above),\n        tooltip = {\n            PlainTooltip {\n                Text(tooltip)\n            }\n        },\n        state = tooltipState,\n    ) {\n        content(modifier)\n    }\n}\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun TooltipIconButton(\n    onClick: () -> Unit,\n    tooltip: String?,\n    modifier: Modifier = Modifier,\n    enabled: Boolean = true,\n    content: @Composable (String?) -> Unit,\n) {\n    TooltipHost(tooltip = tooltip, modifier = modifier) { tooltipModifier ->\n        IconButton(\n            onClick = onClick,\n            modifier = tooltipModifier,\n            enabled = enabled,\n            shapes = IconButtonDefaults.shapes(),\n        ) {\n            content(tooltip)\n        }\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/bundle/BundleItem.kt",
    "content": "package app.revanced.manager.ui.component.bundle\n\nimport androidx.compose.foundation.ExperimentalFoundationApi\nimport androidx.compose.foundation.combinedClickable\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.ErrorOutline\nimport androidx.compose.material.icons.outlined.Warning\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItem\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.pluralStringResource\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.domain.sources.Extensions.version\nimport app.revanced.manager.domain.sources.PatchBundleSource\nimport app.revanced.manager.domain.sources.Source\nimport app.revanced.manager.ui.component.haptics.HapticCheckbox\n\n@OptIn(ExperimentalFoundationApi::class)\n@Composable\nfun BundleItem(\n    src: PatchBundleSource,\n    patchCount: Int,\n    selectable: Boolean,\n    isBundleSelected: Boolean,\n    toggleSelection: (Boolean) -> Unit,\n    onSelect: () -> Unit,\n    onClick: () -> Unit,\n) {\n    ListItem(\n        modifier = Modifier\n            .height(64.dp)\n            .fillMaxWidth()\n            .combinedClickable(\n                onClick = onClick,\n                onLongClick = onSelect,\n            ),\n        leadingContent = if (selectable) {\n            {\n                HapticCheckbox(\n                    checked = isBundleSelected,\n                    onCheckedChange = toggleSelection,\n                )\n            }\n        } else null,\n\n        headlineContent = { Text(src.name) },\n        supportingContent = {\n            if (src.state is Source.State.Available<*>) {\n                Text(pluralStringResource(R.plurals.patch_count, patchCount, patchCount))\n            }\n        },\n        trailingContent = {\n            Row {\n                val icon = remember(src.state) {\n                    when (src.state) {\n                        is Source.State.Failed -> Icons.Outlined.ErrorOutline to R.string.patches_error\n                        is Source.State.Missing -> Icons.Outlined.Warning to R.string.patches_missing\n                        is Source.State.Available<*> -> null\n                    }\n                }\n\n                icon?.let { (vector, description) ->\n                    Icon(\n                        vector,\n                        contentDescription = stringResource(description),\n                        modifier = Modifier.size(24.dp),\n                        tint = MaterialTheme.colorScheme.error\n                    )\n                }\n\n                src.version?.let { Text(text = it) }\n            }\n        },\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/bundle/BundlePatchesDialog.kt",
    "content": "package app.revanced.manager.ui.component.bundle\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.foundation.BorderStroke\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.*\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material.icons.filled.Search\nimport androidx.compose.material.icons.outlined.Search\nimport androidx.compose.material3.*\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport app.revanced.manager.R\nimport app.revanced.manager.domain.sources.PatchBundleSource\nimport app.revanced.manager.domain.repository.PatchBundleRepository\nimport app.revanced.manager.patcher.patch.PatchInfo\nimport app.revanced.manager.ui.component.ArrowButton\nimport app.revanced.manager.ui.component.FullscreenDialog\nimport app.revanced.manager.ui.component.LazyColumnWithScrollbar\nimport app.revanced.manager.ui.component.SearchView\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport kotlinx.coroutines.flow.mapNotNull\nimport org.koin.compose.koinInject\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun BundlePatchesDialog(\n    onDismissRequest: () -> Unit,\n    src: PatchBundleSource,\n) {\n    val patchBundleRepository: PatchBundleRepository = koinInject()\n    var query by rememberSaveable { mutableStateOf(\"\") }\n    var isSearchActive by rememberSaveable { mutableStateOf(false) }\n    val patches by remember(src.uid) {\n        patchBundleRepository.bundleInfoFlow.mapNotNull { it[src.uid]?.patches }\n    }.collectAsStateWithLifecycle(emptyList())\n    val filteredPatches = remember(patches, query) {\n        if (query.isEmpty()) {\n            patches\n        } else {\n            patches.filter { patch ->\n                patch.name.contains(query, ignoreCase = true) ||\n                patch.description?.contains(query, ignoreCase = true) == true ||\n                patch.compatiblePackages?.any { compatiblePackage ->\n                    compatiblePackage.packageName.contains(query, ignoreCase = true) ||\n                    compatiblePackage.versions?.any { version ->\n                        version.contains(query, ignoreCase = true)\n                    } == true\n                } == true\n            }\n        }\n    }\n\n    FullscreenDialog(\n        onDismissRequest = onDismissRequest,\n    ) {\n        if (isSearchActive) {\n            SearchView(\n                query = query,\n                onQueryChange = { query = it },\n                onActiveChange = {\n                    isSearchActive = it\n                    if (!it) query = \"\"\n                },\n                placeholder = { Text(stringResource(R.string.search)) }\n            ) {\n                when {\n                    query.isEmpty() -> {\n                        Column(\n                            modifier = Modifier.fillMaxSize(),\n                            verticalArrangement = Arrangement.Center,\n                            horizontalAlignment = Alignment.CenterHorizontally\n                        ) {\n                            Icon(\n                                imageVector = Icons.Outlined.Search,\n                                contentDescription = stringResource(R.string.search_patches),\n                                modifier = Modifier.size(64.dp),\n                                tint = MaterialTheme.colorScheme.onSurfaceVariant\n                            )\n                            Text(\n                                text = stringResource(R.string.type_anything),\n                                style = MaterialTheme.typography.bodyLarge,\n                                color = MaterialTheme.colorScheme.onSurfaceVariant\n                            )\n                        }\n                    }\n\n                    filteredPatches.isEmpty() -> {\n                        Box(\n                            modifier = Modifier.fillMaxSize(),\n                            contentAlignment = Alignment.Center\n                        ) {\n                            Text(\n                                text = stringResource(R.string.no_patch_found),\n                                style = MaterialTheme.typography.bodyLarge,\n                                color = MaterialTheme.colorScheme.onSurfaceVariant\n                            )\n                        }\n                    }\n\n                    else -> {\n                        PatchList(\n                            patches = filteredPatches,\n                            modifier = Modifier.fillMaxSize()\n                        )\n                    }\n                }\n            }\n        } else {\n            Scaffold(\n                topBar = {\n                    BundleTopBar(\n                        title = stringResource(R.string.patches),\n                        onBackClick = onDismissRequest,\n                        actions = {\n                            TooltipIconButton(\n                                onClick = { isSearchActive = true },\n                                tooltip = stringResource(R.string.search_patches)\n                            ) {\n                                Icon(\n                                    imageVector = Icons.Filled.Search,\n                                    contentDescription = stringResource(R.string.search_patches)\n                                )\n                            }\n                        },\n                        backIcon = {\n                            Icon(\n                                imageVector = Icons.AutoMirrored.Filled.ArrowBack,\n                                contentDescription = stringResource(R.string.back)\n                            )\n                        },\n                    )\n                },\n            ) { paddingValues ->\n                PatchList(\n                    patches = patches,\n                    modifier = Modifier\n                        .fillMaxWidth()\n                        .padding(paddingValues)\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun PatchList(\n    patches: List<PatchInfo>,\n    modifier: Modifier = Modifier\n) {\n    LazyColumnWithScrollbar(\n        modifier = modifier,\n        verticalArrangement = Arrangement.spacedBy(12.dp),\n        contentPadding = PaddingValues(16.dp)\n    ) {\n        items(items = patches) { patch ->\n            PatchItem(patch)\n        }\n    }\n}\n\n@OptIn(ExperimentalLayoutApi::class)\n@Composable\nfun PatchItem(\n    patch: PatchInfo\n) {\n    var expandedVersionPackages by rememberSaveable { mutableStateOf(setOf<String>()) }\n    var expandOptions by rememberSaveable { mutableStateOf(false) }\n\n    ElevatedCard(\n        modifier = Modifier\n            .fillMaxWidth()\n            .then(\n                if (patch.options.isNullOrEmpty()) Modifier else Modifier\n                    .clip(RoundedCornerShape(8.dp))\n                    .clickable { expandOptions = !expandOptions },\n            )\n    ) {\n        Column(\n            modifier = Modifier.padding(16.dp),\n            verticalArrangement = Arrangement.spacedBy(6.dp)\n        ) {\n            Row(\n                modifier = Modifier.fillMaxWidth(),\n                horizontalArrangement = Arrangement.Absolute.SpaceBetween,\n                verticalAlignment = Alignment.CenterVertically\n            ) {\n                Text(\n                    text = patch.name,\n                    color = MaterialTheme.colorScheme.primary,\n                    style = MaterialTheme.typography.titleLarge,\n                    fontWeight = FontWeight.Bold\n                )\n\n                if (!patch.options.isNullOrEmpty()) {\n                    ArrowButton(expanded = expandOptions, onClick = null)\n                }\n            }\n            patch.description?.let {\n                Text(\n                    text = it,\n                    style = MaterialTheme.typography.bodyMedium\n                )\n            }\n            Column(\n                verticalArrangement = Arrangement.spacedBy(4.dp)\n            ) {\n                if (patch.compatiblePackages.isNullOrEmpty()) {\n                    Row(\n                        horizontalArrangement = Arrangement.spacedBy(4.dp),\n                        verticalAlignment = Alignment.CenterVertically\n                    ) {\n                        PatchInfoChip(\n                            text = \"$PACKAGE_ICON ${stringResource(R.string.patches_view_any_package)}\"\n                        )\n                        PatchInfoChip(\n                            text = \"$VERSION_ICON ${stringResource(R.string.patches_view_any_version)}\"\n                        )\n                    }\n                } else {\n                    patch.compatiblePackages.forEach { compatiblePackage ->\n                        val packageName = compatiblePackage.packageName\n                        val versions = compatiblePackage.versions.orEmpty().reversed()\n                        val expandVersions = packageName in expandedVersionPackages\n\n                        FlowRow(\n                            horizontalArrangement = Arrangement.spacedBy(4.dp),\n                            verticalArrangement = Arrangement.spacedBy(4.dp)\n                        ) {\n                            PatchInfoChip(\n                                modifier = Modifier.align(Alignment.CenterVertically),\n                                text = \"$PACKAGE_ICON $packageName\"\n                            )\n\n                            if (versions.isNotEmpty()) {\n                                if (expandVersions) {\n                                    versions.forEach { version ->\n                                        PatchInfoChip(\n                                            modifier = Modifier.align(Alignment.CenterVertically),\n                                            text = \"$VERSION_ICON $version\"\n                                        )\n                                    }\n                                } else {\n                                    PatchInfoChip(\n                                        modifier = Modifier.align(Alignment.CenterVertically),\n                                        text = \"$VERSION_ICON ${versions.first()}\"\n                                    )\n                                }\n                                if (versions.size > 1) {\n                                    PatchInfoChip(\n                                        onClick = {\n                                            expandedVersionPackages = if (expandVersions) {\n                                                expandedVersionPackages - packageName\n                                            } else {\n                                                expandedVersionPackages + packageName\n                                            }\n                                        },\n                                        text = if (expandVersions) stringResource(R.string.less) else \"+${versions.size - 1}\"\n                                    )\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n            if (!patch.options.isNullOrEmpty()) {\n                AnimatedVisibility(visible = expandOptions) {\n                    val options = patch.options\n\n                    Column {\n                        options.forEachIndexed { i, option ->\n                            OutlinedCard(\n                                modifier = Modifier.fillMaxWidth(),\n                                colors = CardColors(\n                                    containerColor = Color.Transparent,\n                                    contentColor = MaterialTheme.colorScheme.onSurface,\n                                    disabledContainerColor = Color.Transparent,\n                                    disabledContentColor = MaterialTheme.colorScheme.onSurface\n                                ), shape = when {\n                                    options.size == 1 -> RoundedCornerShape(8.dp)\n                                    i == 0 -> RoundedCornerShape(topStart = 8.dp, topEnd = 8.dp)\n                                    i == options.lastIndex -> RoundedCornerShape(\n                                        bottomStart = 8.dp,\n                                        bottomEnd = 8.dp\n                                    )\n\n                                    else -> RoundedCornerShape(0.dp)\n                                }\n                            ) {\n                                Column(\n                                    modifier = Modifier.padding(12.dp),\n                                    verticalArrangement = Arrangement.spacedBy(4.dp),\n                                ) {\n                                    Text(\n                                        text = option.name,\n                                        style = MaterialTheme.typography.titleMedium,\n                                        color = MaterialTheme.colorScheme.primary\n                                    )\n                                    Text(\n                                        text = option.description,\n                                        style = MaterialTheme.typography.bodyMedium\n                                    )\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\nfun PatchInfoChip(\n    modifier: Modifier = Modifier,\n    onClick: (() -> Unit)? = null,\n    text: String,\n    wrapText: Boolean = false\n) {\n    val shape = RoundedCornerShape(8.0.dp)\n    val cardModifier = if (onClick != null) {\n        Modifier\n            .clip(shape)\n            .clickable(onClick = onClick)\n    } else {\n        Modifier\n    }\n\n    OutlinedCard(\n        modifier = modifier.then(cardModifier),\n        colors = CardColors(\n            containerColor = Color.Transparent,\n            contentColor = MaterialTheme.colorScheme.onSurface,\n            disabledContainerColor = Color.Transparent,\n            disabledContentColor = MaterialTheme.colorScheme.onSurface\n        ),\n        shape = shape,\n        border = BorderStroke(1.dp, MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.20f))\n    ) {\n        Row(\n            modifier = Modifier.padding(8.dp),\n            verticalAlignment = Alignment.CenterVertically,\n            horizontalArrangement = Arrangement.Center\n        ) {\n            Text(\n                text,\n                overflow = if (wrapText) TextOverflow.Clip else TextOverflow.Ellipsis,\n                softWrap = wrapText,\n                maxLines = if (wrapText) Int.MAX_VALUE else 1,\n                style = MaterialTheme.typography.labelLarge,\n                color = MaterialTheme.colorScheme.onSurfaceVariant\n            )\n        }\n    }\n}\n\nconst val PACKAGE_ICON = \"\\uD83D\\uDCE6\"\nconst val VERSION_ICON = \"\\uD83C\\uDFAF\""
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/bundle/BundleSelector.kt",
    "content": "package app.revanced.manager.ui.component.bundle\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.ListItemDefaults\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ModalBottomSheet\nimport androidx.compose.material3.SegmentedListItem\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.domain.sources.Extensions.version\nimport app.revanced.manager.domain.sources.PatchBundleSource\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun BundleSelector(\n    sources: List<PatchBundleSource>,\n    title: String? = null,\n    onFinish: (PatchBundleSource?) -> Unit\n) {\n    LaunchedEffect(sources) {\n        if (sources.size == 1) {\n            onFinish(sources[0])\n        }\n    }\n\n    if (sources.size < 2) {\n        return\n    }\n\n    ModalBottomSheet(\n        onDismissRequest = { onFinish(null) }\n    ) {\n        Column(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(bottom = 16.dp),\n            verticalArrangement = Arrangement.spacedBy(16.dp)\n        ) {\n            Text(\n                text = title ?: stringResource(R.string.select),\n                style = MaterialTheme.typography.titleLarge,\n                color = MaterialTheme.colorScheme.onSurface,\n                modifier = Modifier.padding(horizontal = 16.dp)\n            )\n            Column(\n                modifier = Modifier\n                    .padding(horizontal = 16.dp)\n                    .clip(MaterialTheme.shapes.large),\n                verticalArrangement = Arrangement.spacedBy(ListItemDefaults.SegmentedGap)\n            ) {\n                sources.forEachIndexed { index, source ->\n                    SegmentedListItem(\n                        onClick = { onFinish(source) },\n                        colors = ListItemDefaults.colors(\n                            containerColor = MaterialTheme.colorScheme.surfaceContainer\n                        ),\n                        shapes = ListItemDefaults.segmentedShapes(index = index, count = sources.size)\n                    ) {\n                        Text(\n                            \"${source.name} ${source.version}\",\n                            style = MaterialTheme.typography.titleMedium,\n                            color = MaterialTheme.colorScheme.onSurface\n                        )\n                    }\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/bundle/BundleTopBar.kt",
    "content": "package app.revanced.manager.ui.component.bundle\n\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBar\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.TopAppBarScrollBehavior\nimport androidx.compose.material3.surfaceColorAtElevation\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport androidx.compose.ui.res.stringResource\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun BundleTopBar(\n    title: String,\n    onBackClick: (() -> Unit)? = null,\n    actions: @Composable (RowScope.() -> Unit) = {},\n    scrollBehavior: TopAppBarScrollBehavior? = null,\n    backIcon: @Composable () -> Unit,\n) {\n    val containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(3.0.dp)\n\n    TopAppBar(\n        title = {\n            Text(\n                text = title,\n                style = MaterialTheme.typography.titleLarge\n            )\n        },\n        scrollBehavior = scrollBehavior,\n        navigationIcon = {\n            if (onBackClick != null) {\n                TooltipIconButton(\n                    onClick = onBackClick,\n                    tooltip = stringResource(R.string.back),\n                ) {\n                    backIcon()\n                }\n            }\n        },\n        actions = actions,\n        colors = TopAppBarDefaults.topAppBarColors(\n            containerColor = containerColor\n        )\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/haptics/HapticCheckbox.kt",
    "content": "package app.revanced.manager.ui.component.haptics\n\nimport androidx.core.view.HapticFeedbackConstantsCompat\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.material3.Checkbox\nimport androidx.compose.material3.CheckboxColors\nimport androidx.compose.material3.CheckboxDefaults\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport app.revanced.manager.util.withHapticFeedback\n\n@Composable\nfun HapticCheckbox(\n    checked: Boolean,\n    onCheckedChange: ((Boolean) -> Unit)?,\n    modifier: Modifier = Modifier,\n    enabled: Boolean = true,\n    colors: CheckboxColors = CheckboxDefaults.colors(),\n    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }\n) {\n    Checkbox(\n        checked = checked,\n        onCheckedChange = onCheckedChange?.withHapticFeedback(HapticFeedbackConstantsCompat.CLOCK_TICK),\n        modifier = modifier,\n        enabled = enabled,\n        colors = colors,\n        interactionSource = interactionSource\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/haptics/HapticExtendedFloatingActionButton.kt",
    "content": "package app.revanced.manager.ui.component.haptics\n\nimport androidx.core.view.HapticFeedbackConstantsCompat\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.material3.ExtendedFloatingActionButton\nimport androidx.compose.material3.FloatingActionButtonDefaults\nimport androidx.compose.material3.FloatingActionButtonElevation\nimport androidx.compose.material3.contentColorFor\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.Shape\nimport app.revanced.manager.ui.component.TooltipHost\nimport app.revanced.manager.util.withHapticFeedback\n\n@Composable\nfun HapticExtendedFloatingActionButton (\n    text: @Composable () -> Unit,\n    icon: @Composable () -> Unit,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    tooltip: String? = null,\n    expanded: Boolean = true,\n    shape: Shape = FloatingActionButtonDefaults.extendedFabShape,\n    containerColor: Color = FloatingActionButtonDefaults.containerColor,\n    contentColor: Color = contentColorFor(containerColor),\n    elevation: FloatingActionButtonElevation = FloatingActionButtonDefaults.elevation(),\n    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },\n) {\n    TooltipHost(tooltip = tooltip, modifier = modifier) { tooltipModifier ->\n        ExtendedFloatingActionButton(\n            text = text,\n            icon = icon,\n            onClick = onClick.withHapticFeedback(HapticFeedbackConstantsCompat.VIRTUAL_KEY),\n            modifier = tooltipModifier,\n            expanded = expanded,\n            shape = shape,\n            containerColor = containerColor,\n            contentColor = contentColor,\n            elevation = elevation,\n            interactionSource = interactionSource\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/haptics/HapticFloatingActionButton.kt",
    "content": "package app.revanced.manager.ui.component.haptics\n\nimport androidx.core.view.HapticFeedbackConstantsCompat\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.material3.FloatingActionButton\nimport androidx.compose.material3.FloatingActionButtonDefaults\nimport androidx.compose.material3.FloatingActionButtonElevation\nimport androidx.compose.material3.contentColorFor\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.Shape\nimport app.revanced.manager.ui.component.TooltipHost\nimport app.revanced.manager.util.withHapticFeedback\n\n@Composable\nfun HapticFloatingActionButton (\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    tooltip: String? = null,\n    shape: Shape = FloatingActionButtonDefaults.shape,\n    containerColor: Color = FloatingActionButtonDefaults.containerColor,\n    contentColor: Color = contentColorFor(containerColor),\n    elevation: FloatingActionButtonElevation = FloatingActionButtonDefaults.elevation(),\n    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },\n    content: @Composable () -> Unit,\n) {\n    TooltipHost(tooltip = tooltip, modifier = modifier) { tooltipModifier ->\n        FloatingActionButton(\n            onClick = onClick.withHapticFeedback(HapticFeedbackConstantsCompat.VIRTUAL_KEY),\n            modifier = tooltipModifier,\n            shape = shape,\n            containerColor = containerColor,\n            contentColor = contentColor,\n            elevation = elevation,\n            interactionSource = interactionSource,\n            content = content\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/haptics/HapticRadioButton.kt",
    "content": "package app.revanced.manager.ui.component.haptics\n\nimport androidx.core.view.HapticFeedbackConstantsCompat\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.material3.RadioButton\nimport androidx.compose.material3.RadioButtonColors\nimport androidx.compose.material3.RadioButtonDefaults\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalView\n\n@Composable\nfun HapticRadioButton(\n    selected: Boolean,\n    onClick: (() -> Unit)?,\n    modifier: Modifier = Modifier,\n    enabled: Boolean = true,\n    colors: RadioButtonColors = RadioButtonDefaults.colors(),\n    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }\n) {\n    val view = LocalView.current\n\n    RadioButton(\n        selected = selected,\n        onClick = onClick?.let {\n            {\n                // Perform haptic feedback\n                if (!selected) view.performHapticFeedback(HapticFeedbackConstantsCompat.CLOCK_TICK)\n                it()\n            }\n        },\n        modifier = modifier,\n        enabled = enabled,\n        colors = colors,\n        interactionSource = interactionSource\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/haptics/HapticSwitch.kt",
    "content": "package app.revanced.manager.ui.component.haptics\n\nimport androidx.core.view.HapticFeedbackConstantsCompat\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.material3.Switch\nimport androidx.compose.material3.SwitchColors\nimport androidx.compose.material3.SwitchDefaults\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalView\n\n@Composable\nfun HapticSwitch(\n    checked: Boolean,\n    onCheckedChange: (Boolean) -> Unit,\n    modifier: Modifier = Modifier,\n    thumbContent: (@Composable () -> Unit)? = null,\n    enabled: Boolean = true,\n    colors: SwitchColors = SwitchDefaults.colors(),\n    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },\n) {\n    val view = LocalView.current\n    Switch(\n        checked = checked,\n        onCheckedChange = { newChecked ->\n            view.performHapticFeedback(\n                if (newChecked) HapticFeedbackConstantsCompat.TOGGLE_ON else HapticFeedbackConstantsCompat.TOGGLE_OFF\n            )\n            onCheckedChange(newChecked)\n        },\n        modifier = modifier,\n        thumbContent = thumbContent,\n        enabled = enabled,\n        colors = colors,\n        interactionSource = interactionSource,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/haptics/HapticTab.kt",
    "content": "package app.revanced.manager.ui.component.haptics\n\nimport androidx.core.view.HapticFeedbackConstantsCompat\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.Tab\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport app.revanced.manager.util.withHapticFeedback\n\n@Composable\nfun HapticTab (\n    selected: Boolean,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    enabled: Boolean = true,\n    text: @Composable (() -> Unit)? = null,\n    icon: @Composable (() -> Unit)? = null,\n    selectedContentColor: Color = LocalContentColor.current,\n    unselectedContentColor: Color = selectedContentColor,\n    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }\n) {\n    Tab(\n        selected = selected,\n        onClick = onClick.withHapticFeedback(HapticFeedbackConstantsCompat.VIRTUAL_KEY),\n        modifier = modifier,\n        enabled = enabled,\n        text = text,\n        icon = icon,\n        selectedContentColor = selectedContentColor,\n        unselectedContentColor = unselectedContentColor,\n        interactionSource = interactionSource\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/haptics/HapticTriStateCheckbox.kt",
    "content": "package app.revanced.manager.ui.component.haptics\n\nimport androidx.core.view.HapticFeedbackConstantsCompat\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.material3.CheckboxColors\nimport androidx.compose.material3.CheckboxDefaults\nimport androidx.compose.material3.TriStateCheckbox\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.state.ToggleableState\nimport app.revanced.manager.util.withHapticFeedback\n\n@Composable\nfun HapticTriStateCheckbox(\n    state: ToggleableState,\n    onClick: (() -> Unit)?,\n    modifier: Modifier = Modifier,\n    enabled: Boolean = true,\n    colors: CheckboxColors = CheckboxDefaults.colors(),\n    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }\n) {\n    TriStateCheckbox(\n        state = state,\n        onClick = onClick?.withHapticFeedback(HapticFeedbackConstantsCompat.CLOCK_TICK),\n        modifier = modifier,\n        enabled = enabled,\n        colors = colors,\n        interactionSource = interactionSource\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/onboarding/OnboardingAppCard.kt",
    "content": "package app.revanced.manager.ui.component.onboarding\r\n\r\nimport android.content.Context\r\nimport android.content.pm.PackageInfo\r\nimport android.graphics.Bitmap\r\nimport android.renderscript.Allocation\r\nimport android.renderscript.Element\r\nimport android.renderscript.RenderScript\r\nimport android.renderscript.ScriptIntrinsicBlur\r\nimport androidx.annotation.FloatRange\r\nimport androidx.compose.animation.Crossfade\r\nimport androidx.compose.animation.ExitTransition\r\nimport androidx.compose.animation.core.tween\r\nimport androidx.compose.animation.fadeIn\r\nimport androidx.compose.foundation.Image\r\nimport androidx.compose.foundation.MarqueeSpacing\r\nimport androidx.compose.foundation.background\r\nimport androidx.compose.foundation.basicMarquee\r\nimport androidx.compose.foundation.clickable\r\nimport androidx.compose.foundation.layout.Arrangement\r\nimport androidx.compose.foundation.layout.Box\r\nimport androidx.compose.foundation.layout.Column\r\nimport androidx.compose.foundation.layout.Row\r\nimport androidx.compose.foundation.layout.fillMaxSize\r\nimport androidx.compose.foundation.layout.fillMaxWidth\r\nimport androidx.compose.foundation.layout.padding\r\nimport androidx.compose.foundation.layout.size\r\nimport androidx.compose.foundation.shape.CircleShape\r\nimport androidx.compose.foundation.shape.RoundedCornerShape\r\nimport androidx.compose.material.icons.Icons\r\nimport androidx.compose.material.icons.filled.Android\r\nimport androidx.compose.material3.Card\r\nimport androidx.compose.material3.CardDefaults\r\nimport androidx.compose.material3.MaterialTheme\r\nimport androidx.compose.material3.Text\r\nimport androidx.compose.runtime.Composable\r\nimport androidx.compose.runtime.LaunchedEffect\r\nimport androidx.compose.runtime.getValue\r\nimport androidx.compose.runtime.mutableStateOf\r\nimport androidx.compose.runtime.remember\r\nimport androidx.compose.runtime.setValue\r\nimport androidx.compose.ui.Alignment\r\nimport androidx.compose.ui.Modifier\r\nimport androidx.compose.ui.draw.clip\r\nimport androidx.compose.ui.draw.clipToBounds\r\nimport androidx.compose.ui.graphics.Color\r\nimport androidx.compose.ui.graphics.ColorFilter\r\nimport androidx.compose.ui.graphics.ImageBitmap\r\nimport androidx.compose.ui.graphics.asAndroidBitmap\r\nimport androidx.compose.ui.graphics.asImageBitmap\r\nimport androidx.compose.ui.graphics.vector.rememberVectorPainter\r\nimport androidx.compose.ui.layout.ContentScale\r\nimport androidx.compose.ui.platform.LocalContext\r\nimport androidx.compose.ui.res.pluralStringResource\r\nimport androidx.compose.ui.res.stringResource\r\nimport androidx.compose.ui.text.font.FontWeight\r\nimport androidx.compose.ui.unit.dp\r\nimport androidx.core.graphics.scale\r\nimport app.revanced.manager.R\r\nimport app.revanced.manager.util.blurBackground\r\n\r\n@Composable\r\nfun OnboardingAppCard(\r\n    packageName: String,\r\n    patchCount: Int,\r\n    packageInfo: PackageInfo?,\r\n    suggestedVersion: String?,\r\n    loadAppLabel: () -> String?,\r\n    loadAppIcon: () -> ImageBitmap?,\r\n    onClick: () -> Unit,\r\n    modifier: Modifier = Modifier\r\n) {\r\n    val context = LocalContext.current\r\n\r\n    val isInstalled = packageInfo != null\r\n    val versionName = remember(packageName) { packageInfo?.versionName }\r\n\r\n    // Extra app data is loaded async\r\n    var appLabel by remember(packageName) { mutableStateOf<String?>(null) }\r\n    var appIcon by remember { mutableStateOf<ImageBitmap?>(null) }\r\n    var appIconBlur by remember { mutableStateOf<ImageBitmap?>(null) }\r\n    LaunchedEffect(packageName) {\r\n        appLabel = loadAppLabel()\r\n        appIcon = loadAppIcon()\r\n        appIconBlur = appIcon?.let {\r\n            blurBackground(context, it.asAndroidBitmap(), 18f).asImageBitmap()\r\n        }\r\n    }\r\n\r\n    Card(\r\n        modifier = modifier\r\n            .fillMaxWidth()\r\n            .clip(RoundedCornerShape(24.dp))\r\n            .clickable(onClick = onClick),\r\n        shape = RoundedCornerShape(24.dp),\r\n        colors = CardDefaults.cardColors(\r\n            containerColor = MaterialTheme.colorScheme.surfaceContainerHigh,\r\n        )\r\n    ) {\r\n        Box {\r\n            // https://stackoverflow.com/a/68742173/13964629\r\n            androidx.compose.animation.AnimatedVisibility(\r\n                visible = appIconBlur != null,\r\n                enter = fadeIn(),\r\n                exit = ExitTransition.None,\r\n                modifier = Modifier.matchParentSize(),\r\n            ) {\r\n                Box(\r\n                    modifier = Modifier\r\n                        .fillMaxSize()\r\n                        .clipToBounds(),\r\n                ) {\r\n                    Image(\r\n                        bitmap = appIconBlur!!,\r\n                        contentDescription = null,\r\n                        contentScale = ContentScale.Crop,\r\n                        modifier = Modifier\r\n                            .fillMaxSize()\r\n                    )\r\n                    Box(\r\n                        Modifier\r\n                            .fillMaxSize()\r\n                            .background(MaterialTheme.colorScheme.surfaceContainerHigh.copy(alpha = 0.75f))\r\n                    )\r\n                }\r\n            }\r\n\r\n            Row(\r\n                modifier = Modifier\r\n                    .fillMaxWidth()\r\n                    .padding(16.dp),\r\n                verticalAlignment = Alignment.CenterVertically,\r\n                horizontalArrangement = Arrangement.spacedBy(12.dp),\r\n            ) {\r\n                Crossfade(\r\n                    targetState = appIcon,\r\n                    animationSpec = tween(durationMillis = 100),\r\n                ) { appIcon ->\r\n                    Box(\r\n                        modifier = Modifier\r\n                            .size(48.dp)\r\n                            .clip(CircleShape)\r\n                            .background(MaterialTheme.colorScheme.surfaceVariant),\r\n                        contentAlignment = Alignment.Center\r\n                    ) {\r\n                        if (appIcon != null) {\r\n                            Image(\r\n                                bitmap = appIcon,\r\n                                contentDescription = null,\r\n                                modifier = Modifier.size(48.dp)\r\n                            )\r\n                        } else {\r\n                            Image(\r\n                                painter = rememberVectorPainter(Icons.Default.Android),\r\n                                contentDescription = null,\r\n                                modifier = Modifier.size(24.dp),\r\n                                colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onSurfaceVariant)\r\n                            )\r\n                        }\r\n                    }\r\n                }\r\n\r\n                Column(Modifier.weight(1f)) {\r\n                    Text(\r\n                        text = appLabel ?: packageName,\r\n                        modifier = Modifier.basicMarquee(\r\n                            iterations = Int.MAX_VALUE,\r\n                            repeatDelayMillis = 1500,\r\n                            initialDelayMillis = 2500,\r\n                            spacing = MarqueeSpacing.fractionOfContainer(1f / 5f),\r\n                            velocity = 55.dp,\r\n                        ),\r\n                        fontWeight = FontWeight.SemiBold,\r\n                        style = if (isInstalled) {\r\n                            MaterialTheme.typography.titleMedium\r\n                        } else {\r\n                            MaterialTheme.typography.titleSmall\r\n                        },\r\n                        color = if (isInstalled) {\r\n                            MaterialTheme.colorScheme.onSurface\r\n                        } else {\r\n                            MaterialTheme.colorScheme.onSurfaceVariant\r\n                        }\r\n                    )\r\n                    Text(\r\n                        text = versionName\r\n                            ?: suggestedVersion?.let {\r\n                                stringResource(R.string.onboarding_recommended_version, it)\r\n                            }\r\n                            ?: stringResource(R.string.not_installed),\r\n                        style = MaterialTheme.typography.bodySmall,\r\n                        color = MaterialTheme.colorScheme.onSurfaceVariant,\r\n                    )\r\n                }\r\n\r\n                Text(\r\n                    text = pluralStringResource(R.plurals.patch_count, patchCount, patchCount),\r\n                    style = MaterialTheme.typography.labelMedium,\r\n                    color = if (isInstalled) {\r\n                        MaterialTheme.colorScheme.onSurface\r\n                    } else {\r\n                        MaterialTheme.colorScheme.onSurfaceVariant\r\n                    }\r\n                )\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/onboarding/OnboardingAppList.kt",
    "content": "package app.revanced.manager.ui.component.onboarding\n\nimport android.content.pm.PackageInfo\nimport android.graphics.Bitmap\nimport androidx.compose.foundation.ExperimentalFoundationApi\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.lazy.layout.LazyLayoutCacheWindow\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.ListItemDefaults\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.ImageBitmap\nimport androidx.compose.ui.graphics.asImageBitmap\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.unit.dp\nimport androidx.core.graphics.drawable.toBitmap\nimport app.revanced.manager.ui.component.LazyColumnWithScrollbarEdgeShadow\nimport app.revanced.manager.util.AppInfo\nimport java.util.Optional\nimport java.util.concurrent.ConcurrentHashMap\nimport kotlin.jvm.optionals.getOrNull\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class, ExperimentalFoundationApi::class)\n@Composable\nfun OnboardingAppList(\n    modifier: Modifier = Modifier,\n    apps: List<AppInfo>,\n    suggestedVersions: Map<String, String?>,\n    onAppClick: (String) -> Unit,\n) {\n    val pm = LocalContext.current.packageManager\n    val appIcons = remember { ConcurrentHashMap<String, Optional<ImageBitmap>>() }\n    val appLabels = remember { ConcurrentHashMap<String, String>() }\n\n    fun getAppIcon(packageInfo: PackageInfo): ImageBitmap? {\n        return appIcons.computeIfAbsent(packageInfo.packageName) {\n            val icon = packageInfo.applicationInfo\n                ?.loadIcon(pm)\n                ?.toBitmap(width = 128, height = 128, Bitmap.Config.ARGB_8888)\n                ?.asImageBitmap()\n\n            Optional.ofNullable(icon)\n        }.getOrNull()\n    }\n\n    fun getAppLabel(packageInfo: PackageInfo): String {\n        return appLabels.computeIfAbsent(packageInfo.packageName) {\n            packageInfo.applicationInfo!!.loadLabel(pm).toString()\n        }\n    }\n\n    LazyColumnWithScrollbarEdgeShadow(\n        modifier = modifier.fillMaxSize(),\n        state = rememberLazyListState(\n            cacheWindow = LazyLayoutCacheWindow(ahead = 100.dp, behind = 250.dp),\n        ),\n        verticalArrangement = Arrangement.spacedBy(ListItemDefaults.SegmentedGap)\n    ) {\n        items(\n            items = apps,\n            key = { app -> app.packageName }\n        ) { app ->\n            OnboardingAppCard(\n                packageName = app.packageName,\n                patchCount = app.patches ?: 0,\n                packageInfo = app.packageInfo,\n                suggestedVersion = suggestedVersions[app.packageName],\n                loadAppLabel = { app.packageInfo?.let(::getAppLabel) },\n                loadAppIcon = { app.packageInfo?.let(::getAppIcon) },\n                onClick = { onAppClick(app.packageName) },\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patcher/InstallPickerDialog.kt",
    "content": "package app.revanced.manager.ui.component.patcher\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material3.*\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\nimport app.revanced.manager.data.room.apps.installed.InstallType\nimport app.revanced.manager.ui.component.haptics.HapticRadioButton\nimport app.revanced.manager.util.transparentListItemColors\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun InstallPickerDialog(\n    onDismiss: () -> Unit,\n    onConfirm: (InstallType) -> Unit\n) {\n    var selectedInstallType by rememberSaveable { mutableStateOf(InstallType.DEFAULT) }\n\n    AlertDialog(\n        onDismissRequest = onDismiss,\n        dismissButton = {\n            TextButton(onClick = onDismiss, shapes = ButtonDefaults.shapes()) {\n                Text(stringResource(R.string.cancel))\n            }\n        },\n        confirmButton = {\n            Button(\n                onClick = {\n                    onConfirm(selectedInstallType)\n                    onDismiss()\n                },\n                shapes = ButtonDefaults.shapes()\n            ) {\n                Text(stringResource(R.string.install_app))\n            }\n        },\n        title = { Text(stringResource(R.string.select_install_type)) },\n        text = {\n            Column(modifier = Modifier.verticalScroll(rememberScrollState())) {\n                InstallType.entries.forEach {\n                    ListItem(\n                        modifier = Modifier.clickable { selectedInstallType = it },\n                        leadingContent = {\n                            HapticRadioButton(\n                                selected = selectedInstallType == it,\n                                onClick = null\n                            )\n                        },\n                        headlineContent = { Text(stringResource(it.stringResource)) },\n                        colors = transparentListItemColors\n                    )\n                }\n            }\n        }\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patcher/Steps.kt",
    "content": "package app.revanced.manager.ui.component.patcher\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.Crossfade\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Cancel\nimport androidx.compose.material.icons.filled.CheckCircle\nimport androidx.compose.material.icons.outlined.Circle\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.semantics.contentDescription\nimport androidx.compose.ui.semantics.semantics\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.ArrowButton\nimport app.revanced.manager.ui.component.LoadingIndicator\nimport app.revanced.manager.ui.model.State\nimport app.revanced.manager.ui.model.StepCategory\nimport app.revanced.manager.ui.model.Step\nimport java.util.Locale\nimport kotlin.math.floor\n\n// Credits: https://github.com/Aliucord/AliucordManager/blob/main/app/src/main/kotlin/com/aliucord/manager/ui/component/installer/InstallGroup.kt\n@Composable\nfun Steps(\n    category: StepCategory,\n    steps: List<Step>,\n    isExpanded: Boolean = false,\n    onExpand: () -> Unit,\n    onClick: () -> Unit\n) {\n    val state = remember(steps) {\n        when {\n            steps.all { it.state == State.COMPLETED } -> State.COMPLETED\n            steps.any { it.state == State.FAILED } -> State.FAILED\n            steps.any { it.state == State.RUNNING } -> State.RUNNING\n            else -> State.WAITING\n        }\n    }\n\n    val filteredSteps = remember(steps) {\n        val failedCount = steps.count { it.state == State.FAILED }\n\n        steps.filter { step ->\n            // Show hidden steps if it's the only failed step.\n            !step.hide || (step.state == State.FAILED && failedCount == 1)\n        }\n    }\n\n    LaunchedEffect(state) {\n        if (state == State.RUNNING || state == State.FAILED)\n            onExpand()\n    }\n\n    Column(\n        modifier = Modifier\n            .clip(MaterialTheme.shapes.large)\n            .fillMaxWidth()\n            .background(MaterialTheme.colorScheme.surfaceContainerLow)\n    ) {\n        Row(\n            verticalAlignment = Alignment.CenterVertically,\n            horizontalArrangement = Arrangement.spacedBy(14.dp),\n            modifier = Modifier\n                .clickable(true, onClick = onClick)\n                .fillMaxWidth()\n                .padding(20.dp)\n        ) {\n            StepIcon(state = state, size = 24.dp)\n\n            Text(stringResource(category.displayName))\n\n            Spacer(modifier = Modifier.weight(1f))\n\n            Text(\n                text = \"${filteredSteps.count { it.state == State.COMPLETED }}/${filteredSteps.size}\",\n                style = MaterialTheme.typography.labelSmall\n            )\n\n            ArrowButton(modifier = Modifier.size(24.dp), expanded = isExpanded, onClick = null)\n        }\n\n        AnimatedVisibility(visible = isExpanded) {\n            Column(\n                modifier = Modifier\n                    .background(MaterialTheme.colorScheme.background.copy(0.6f))\n                    .fillMaxWidth()\n                    .padding(top = 10.dp)\n            ) {\n                filteredSteps.forEachIndexed { index, step ->\n                    val (progress, progressText) = step.progress?.let { (current, total) ->\n                        if (total != null) current.toFloat() / total.toFloat() to \"${current.megaBytes}/${total.megaBytes} MB\"\n                        else null to \"${current.megaBytes} MB\"\n                    } ?: (null to null)\n\n                    SubStep(\n                        name = step.title,\n                        state = step.state,\n                        message = step.message,\n                        progress = progress,\n                        progressText = progressText,\n                        isFirst = index == 0,\n                        isLast = index == filteredSteps.lastIndex,\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nfun SubStep(\n    name: String,\n    state: State,\n    message: String? = null,\n    progress: Float? = null,\n    progressText: String? = null,\n    isFirst: Boolean = false,\n    isLast: Boolean = false,\n) {\n    var messageExpanded by rememberSaveable { mutableStateOf(true) }\n\n    Column(\n        modifier = Modifier\n            .run {\n                if (message != null)\n                    clickable { messageExpanded = !messageExpanded }\n                else this\n            }\n            .padding(top = if (isFirst) 10.dp else 8.dp, bottom = if (isLast) 20.dp else 8.dp)\n            .padding(horizontal = 20.dp)\n    ) {\n        Row(\n            verticalAlignment = Alignment.CenterVertically,\n            horizontalArrangement = Arrangement.spacedBy(16.dp),\n        ) {\n            StepIcon(\n                size = 18.dp,\n                state = state,\n                progress = progress,\n            )\n\n            Text(\n                text = name,\n                style = MaterialTheme.typography.labelLarge,\n                maxLines = 1,\n                overflow = TextOverflow.Ellipsis,\n                modifier = Modifier.weight(1f, true),\n            )\n\n            when {\n                message != null -> Box(\n                    modifier = Modifier.size(24.dp),\n                    contentAlignment = Alignment.Center\n                ) {\n                    ArrowButton(\n                        modifier = Modifier.size(20.dp),\n                        expanded = messageExpanded,\n                        onClick = null\n                    )\n                }\n\n                progressText != null -> Text(\n                    progressText,\n                    style = MaterialTheme.typography.labelSmall\n                )\n            }\n        }\n\n        AnimatedVisibility(visible = messageExpanded && message != null) {\n            Text(\n                text = message.orEmpty(),\n                style = MaterialTheme.typography.labelMedium,\n                color = MaterialTheme.colorScheme.secondary,\n                modifier = Modifier.padding(horizontal = 36.dp, vertical = 8.dp)\n            )\n        }\n    }\n}\n\n@Composable\nfun StepIcon(state: State, progress: Float? = null, size: Dp) {\n    val strokeWidth = Dp(floor(size.value / 10) + 1)\n\n    Crossfade(targetState = state, label = \"State CrossFade\") { state ->\n        when (state) {\n            State.COMPLETED -> Icon(\n                Icons.Filled.CheckCircle,\n                contentDescription = stringResource(R.string.step_completed),\n                tint = Color(0xFF59B463),\n                modifier = Modifier.size(size)\n            )\n\n            State.FAILED -> Icon(\n                Icons.Filled.Cancel,\n                contentDescription = stringResource(R.string.step_failed),\n                tint = MaterialTheme.colorScheme.error,\n                modifier = Modifier.size(size)\n            )\n\n            State.WAITING -> Icon(\n                Icons.Outlined.Circle,\n                contentDescription = stringResource(R.string.step_waiting),\n                tint = MaterialTheme.colorScheme.onSurface.copy(.2f),\n                modifier = Modifier.size(size)\n            )\n\n            State.RUNNING -> {\n                LoadingIndicator(\n                    modifier = stringResource(R.string.step_running).let { description ->\n                        Modifier\n                            .size(size)\n                            .semantics {\n                                contentDescription = description\n                            }\n                    },\n\n                    progress = { progress },\n                    strokeWidth = strokeWidth\n                )\n            }\n        }\n    }\n}\n\nprivate val Long.megaBytes get() = \"%.1f\".format(locale = Locale.ROOT, toDouble() / 1_000_000)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patches/ActionItem.kt",
    "content": "package app.revanced.manager.ui.component.patches\n\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItemDefaults\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.SegmentedListItem\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.graphics.vector.ImageVector\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun ActionItem(\n    icon: ImageVector,\n    text: String,\n    onClick: () -> Unit\n) {\n    SegmentedListItem(\n        onClick = onClick,\n        shapes = ListItemDefaults.segmentedShapes(index = 0, count = 1),\n        colors = ListItemDefaults.colors(\n            containerColor = MaterialTheme.colorScheme.surfaceContainer\n        ),\n        leadingContent = { Icon(icon, contentDescription = null) },\n    ) { Text(text) }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patches/IncompatiblePatchDialog.kt",
    "content": "package app.revanced.manager.ui.component.patches\n\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.WarningAmber\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun IncompatiblePatchDialog(\n    appVersion: String,\n    compatibleVersions: Set<String>,\n    onDismissRequest: () -> Unit\n) = AlertDialog(\n    icon = {\n        Icon(Icons.Outlined.WarningAmber, null)\n    },\n    onDismissRequest = onDismissRequest,\n    confirmButton = {\n        TextButton(onClick = onDismissRequest, shapes = ButtonDefaults.shapes()) {\n            Text(stringResource(R.string.ok))\n        }\n    },\n    title = { Text(stringResource(R.string.incompatible_patch)) },\n    text = {\n        Text(\n            stringResource(\n                R.string.app_version_not_compatible,\n                appVersion,\n                compatibleVersions.joinToString(\", \")\n            )\n        )\n    }\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patches/IncompatiblePatchesDialog.kt",
    "content": "package app.revanced.manager.ui.component.patches\n\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.WarningAmber\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun IncompatiblePatchesDialog(\n    appVersion: String,\n    onDismissRequest: () -> Unit\n) = AlertDialog(\n    icon = {\n        Icon(Icons.Outlined.WarningAmber, null)\n    },\n    onDismissRequest = onDismissRequest,\n    confirmButton = {\n        TextButton(onClick = onDismissRequest, shapes = ButtonDefaults.shapes()) {\n            Text(stringResource(R.string.ok))\n        }\n    },\n    title = { Text(stringResource(R.string.incompatible_patches)) },\n    text = {\n        Text(\n            stringResource(\n                R.string.incompatible_patches_dialog,\n                appVersion\n            )\n        )\n    }\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patches/OptionFields.kt",
    "content": "package app.revanced.manager.ui.component.patches\n\nimport android.app.Application\nimport android.os.Parcelable\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.compose.foundation.ExperimentalFoundationApi\nimport androidx.compose.foundation.LocalIndication\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.combinedClickable\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.lazy.itemsIndexed\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material.icons.filled.Check\nimport androidx.compose.material.icons.filled.Close\nimport androidx.compose.material.icons.filled.Delete\nimport androidx.compose.material.icons.filled.DragHandle\nimport androidx.compose.material.icons.filled.Restore\nimport androidx.compose.material.icons.filled.SelectAll\nimport androidx.compose.material.icons.outlined.Add\nimport androidx.compose.material.icons.outlined.Edit\nimport androidx.compose.material.icons.outlined.Folder\nimport androidx.compose.material.icons.outlined.MoreVert\nimport androidx.compose.material.icons.outlined.Visibility\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.DropdownMenu\nimport androidx.compose.material3.DropdownMenuItem\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItem\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.OutlinedTextField\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.SwitchDefaults\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.DisallowComposableCalls\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateListOf\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.runtime.toMutableStateList\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.pluralStringResource\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.font.FontStyle\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.data.platform.Filesystem\nimport app.revanced.manager.patcher.patch.Option\nimport app.revanced.manager.ui.component.AlertDialogExtended\nimport app.revanced.manager.ui.component.AppTopBar\nimport app.revanced.manager.ui.component.FloatInputDialog\nimport app.revanced.manager.ui.component.FullscreenDialog\nimport app.revanced.manager.ui.component.IntInputDialog\nimport app.revanced.manager.ui.component.LongInputDialog\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.haptics.HapticExtendedFloatingActionButton\nimport app.revanced.manager.ui.component.haptics.HapticRadioButton\nimport app.revanced.manager.ui.component.haptics.HapticSwitch\nimport app.revanced.manager.util.isScrollingUp\nimport app.revanced.manager.util.mutableStateSetOf\nimport app.revanced.manager.util.saver.snapshotStateListSaver\nimport app.revanced.manager.util.saver.snapshotStateSetSaver\nimport app.revanced.manager.util.toast\nimport app.revanced.manager.util.transparentListItemColors\nimport kotlinx.parcelize.Parcelize\nimport org.koin.compose.koinInject\nimport org.koin.core.component.KoinComponent\nimport org.koin.core.component.get\nimport sh.calvin.reorderable.ReorderableItem\nimport sh.calvin.reorderable.rememberReorderableLazyListState\nimport java.io.Serializable\nimport kotlin.random.Random\nimport kotlin.reflect.typeOf\n\nprivate class OptionEditorScope<T : Any>(\n    private val editor: OptionEditor<T>,\n    val option: Option<T>,\n    val openDialog: () -> Unit,\n    val dismissDialog: () -> Unit,\n    val selectionWarningEnabled: Boolean,\n    val showSelectionWarning: () -> Unit,\n    val value: T?,\n    val setValue: (T?) -> Unit,\n    val readOnly: Boolean\n) {\n    fun submitDialog(value: T?) {\n        setValue(value)\n        dismissDialog()\n    }\n\n    fun checkSafeguard(block: () -> Unit) {\n        if (readOnly)\n            block()\n        else if (!option.required && selectionWarningEnabled)\n            showSelectionWarning()\n        else\n            block()\n    }\n\n    fun clickAction() {\n        checkSafeguard {\n            editor.clickAction(this)\n        }\n    }\n\n    @Composable\n    fun ListItemTrailingContent() = editor.ListItemTrailingContent(this)\n\n    @Composable\n    fun Dialog() = editor.Dialog(this)\n}\n\nprivate interface OptionEditor<T : Any> {\n    fun clickAction(scope: OptionEditorScope<T>) = scope.openDialog()\n\n    @OptIn(ExperimentalMaterial3ExpressiveApi::class)\n    @Composable\n    fun ListItemTrailingContent(scope: OptionEditorScope<T>) {\n        TooltipIconButton(\n            onClick = { scope.checkSafeguard { clickAction(scope) } },\n            tooltip = stringResource(if (scope.readOnly) R.string.show else R.string.edit)\n        ) {\n            Icon(\n                if (scope.readOnly) Icons.Outlined.Visibility else Icons.Outlined.Edit,\n                stringResource(if (scope.readOnly) R.string.show else R.string.edit)\n            )\n        }\n    }\n\n    @Composable\n    fun Dialog(scope: OptionEditorScope<T>)\n}\n\nprivate inline fun <reified T : Serializable> OptionEditor<T>.toMapEditorElements() = arrayOf(\n    typeOf<T>() to this,\n    typeOf<List<T>>() to ListOptionEditor(this)\n)\n\nprivate val optionEditors = mapOf(\n    *BooleanOptionEditor.toMapEditorElements(),\n    *StringOptionEditor.toMapEditorElements(),\n    *IntOptionEditor.toMapEditorElements(),\n    *LongOptionEditor.toMapEditorElements(),\n    *FloatOptionEditor.toMapEditorElements()\n)\n\n@Composable\nprivate inline fun <T : Any> WithOptionEditor(\n    editor: OptionEditor<T>,\n    option: Option<T>,\n    value: T?,\n    noinline setValue: (T?) -> Unit,\n    selectionWarningEnabled: Boolean,\n    readOnly: Boolean,\n    crossinline onDismissDialog: @DisallowComposableCalls () -> Unit = {},\n    block: OptionEditorScope<T>.() -> Unit\n) {\n    var showDialog by rememberSaveable { mutableStateOf(false) }\n    var showSelectionWarningDialog by rememberSaveable { mutableStateOf(false) }\n\n    val scope = remember(editor, option, value, setValue, selectionWarningEnabled, readOnly) {\n        OptionEditorScope(\n            editor,\n            option,\n            openDialog = { showDialog = true },\n            dismissDialog = {\n                showDialog = false\n                onDismissDialog()\n            },\n            selectionWarningEnabled,\n            showSelectionWarning = { showSelectionWarningDialog = true },\n            value,\n            setValue,\n            readOnly\n        )\n    }\n\n    if (showSelectionWarningDialog)\n        SelectionWarningDialog(\n            onDismiss = { showSelectionWarningDialog = false }\n        )\n\n    if (showDialog) scope.Dialog()\n\n    scope.block()\n}\n\n@Composable\nfun <T : Any> OptionItem(\n    option: Option<T>,\n    value: T?,\n    setValue: (T?) -> Unit,\n    selectionWarningEnabled: Boolean,\n    readOnly: Boolean = false\n) {\n    val editor = remember(option.type, option.presets) {\n        @Suppress(\"UNCHECKED_CAST\")\n        val baseOptionEditor =\n            optionEditors.getOrDefault(option.type, UnknownTypeEditor) as OptionEditor<T>\n\n        if (option.type != typeOf<Boolean>() && option.presets != null) PresetOptionEditor(\n            baseOptionEditor\n        )\n        else baseOptionEditor\n    }\n\n    WithOptionEditor(editor, option, value, setValue, selectionWarningEnabled, readOnly) {\n        ListItem(\n            modifier = Modifier.clickable(onClick = ::clickAction),\n            headlineContent = { Text(option.name) },\n            supportingContent = {\n                Column {\n                    Text(option.description)\n                    if (option.required && value == null) Text(\n                        stringResource(R.string.option_required),\n                        color = MaterialTheme.colorScheme.error\n                    )\n                }\n            },\n            trailingContent = { ListItemTrailingContent() }\n        )\n    }\n}\n\nprivate fun <T> optionValueLabelPlain(\n     option: Option<T>,\n     value: T?,\n     fallBackToDefault: Boolean = true,\n     unsetLabel: String\n ): String {\n     val resolved = if (fallBackToDefault) value ?: option.default else value\n     val presetLabel = option.presets?.entries?.firstOrNull { it.value == resolved }?.key\n\n     return when {\n         presetLabel != null && resolved != null -> \"$presetLabel ($resolved)\"\n         presetLabel != null -> presetLabel\n        resolved == null -> unsetLabel\n         else -> resolved.toString()\n     }\n }\n\n@Composable\nprivate fun <T> optionValueLabel(\n    option: Option<T>,\n    value: T?,\n    fallBackToDefault: Boolean = true\n) = optionValueLabelPlain(\n    option = option,\n    value = value,\n    fallBackToDefault = fallBackToDefault,\n    unsetLabel = stringResource(R.string.field_not_set)\n)\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nprivate fun ReadonlyOptionDialog(\n    title: String,\n    onDismissRequest: () -> Unit,\n    content: @Composable () -> Unit\n) = AlertDialog(\n    onDismissRequest = onDismissRequest,\n    title = { Text(title) },\n    text = content,\n    confirmButton = {\n        TextButton(onClick = onDismissRequest, shapes = ButtonDefaults.shapes()) {\n            Text(stringResource(R.string.ok))\n        }\n    }\n)\n\nprivate object StringOptionEditor : OptionEditor<String> {\n    @OptIn(ExperimentalMaterial3ExpressiveApi::class)\n    @Composable\n    override fun Dialog(scope: OptionEditorScope<String>) {\n        if (scope.readOnly) {\n            ReadonlyOptionDialog(\n                title = scope.option.name,\n                onDismissRequest = scope.dismissDialog,\n            ) {\n                OutlinedTextField(\n                    value = optionValueLabel(scope.option, scope.value),\n                    onValueChange = {},\n                    enabled = false,\n                    modifier = Modifier.fillMaxWidth()\n                )\n            }\n            return\n        }\n\n        var showFileDialog by rememberSaveable { mutableStateOf(false) }\n        var fieldValue by rememberSaveable(scope.value) {\n            mutableStateOf(scope.value.orEmpty())\n        }\n        val validatorFailed by remember {\n            derivedStateOf { !scope.option.validator(fieldValue) }\n        }\n\n        val fs: Filesystem = koinInject()\n        val (contract, permissionName) = fs.permissionContract()\n        val permissionLauncher = rememberLauncherForActivityResult(contract = contract) {\n            showFileDialog = it\n        }\n\n        if (showFileDialog) {\n            PathSelectorDialog(\n                root = fs.externalFilesDir()\n            ) {\n                showFileDialog = false\n                it?.let { path ->\n                    fieldValue = path.toString()\n                }\n            }\n        }\n\n        AlertDialog(\n            onDismissRequest = scope.dismissDialog,\n            title = { Text(scope.option.name) },\n            text = {\n                OutlinedTextField(\n                    value = fieldValue,\n                    onValueChange = { fieldValue = it },\n                    placeholder = {\n                        Text(stringResource(R.string.dialog_input_placeholder))\n                    },\n                    isError = validatorFailed,\n                    supportingText = {\n                        if (validatorFailed) {\n                            Text(\n                                stringResource(R.string.input_dialog_value_invalid),\n                                modifier = Modifier.fillMaxWidth(),\n                                color = MaterialTheme.colorScheme.error\n                            )\n                        }\n                    },\n                    trailingIcon = {\n                        var showDropdownMenu by rememberSaveable { mutableStateOf(false) }\n                        TooltipIconButton(\n                            onClick = { showDropdownMenu = true },\n                            tooltip = stringResource(R.string.string_option_menu_description)\n                        ) {\n                            Icon(\n                                Icons.Outlined.MoreVert,\n                                stringResource(R.string.string_option_menu_description)\n                            )\n                        }\n\n                        DropdownMenu(\n                            expanded = showDropdownMenu,\n                            onDismissRequest = { showDropdownMenu = false }\n                        ) {\n                            DropdownMenuItem(\n                                leadingIcon = {\n                                    Icon(Icons.Outlined.Folder, null)\n                                },\n                                text = {\n                                    Text(stringResource(R.string.path_selector))\n                                },\n                                onClick = {\n                                    showDropdownMenu = false\n                                    if (fs.hasStoragePermission()) {\n                                        showFileDialog = true\n                                    } else {\n                                        permissionLauncher.launch(permissionName)\n                                    }\n                                }\n                            )\n                        }\n                    }\n                )\n            },\n            confirmButton = {\n                TextButton(\n                    enabled = !validatorFailed,\n                    onClick = { scope.submitDialog(fieldValue) },\n                    shapes = ButtonDefaults.shapes()\n                ) {\n                    Text(stringResource(R.string.save))\n                }\n            },\n            dismissButton = {\n                TextButton(onClick = scope.dismissDialog, shapes = ButtonDefaults.shapes()) {\n                    Text(stringResource(R.string.cancel))\n                }\n            },\n        )\n    }\n}\n\nprivate abstract class NumberOptionEditor<T : Number> : OptionEditor<T> {\n    @Composable\n    abstract fun NumberDialog(\n        title: String,\n        current: T?,\n        validator: (T?) -> Boolean,\n        onSubmit: (T?) -> Unit\n    )\n\n    @Composable\n    override fun Dialog(scope: OptionEditorScope<T>) {\n        if (scope.readOnly) {\n            ReadonlyOptionDialog(\n                title = scope.option.name,\n                onDismissRequest = scope.dismissDialog,\n            ) {\n                OutlinedTextField(\n                    value = optionValueLabel(scope.option, scope.value),\n                    onValueChange = {},\n                    enabled = false,\n                    modifier = Modifier.fillMaxWidth()\n                )\n            }\n            return\n        }\n\n        NumberDialog(scope.option.name, scope.value, scope.option.validator) {\n            if (it == null) return@NumberDialog scope.dismissDialog()\n\n            scope.submitDialog(it)\n        }\n    }\n}\n\nprivate object IntOptionEditor : NumberOptionEditor<Int>() {\n    @Composable\n    override fun NumberDialog(\n        title: String,\n        current: Int?,\n        validator: (Int?) -> Boolean,\n        onSubmit: (Int?) -> Unit\n    ) = IntInputDialog(current, title, unit = null, validator, onSubmit)\n}\n\nprivate object LongOptionEditor : NumberOptionEditor<Long>() {\n    @Composable\n    override fun NumberDialog(\n        title: String,\n        current: Long?,\n        validator: (Long?) -> Boolean,\n        onSubmit: (Long?) -> Unit\n    ) = LongInputDialog(current, title, unit = null, validator, onSubmit)\n}\n\nprivate object FloatOptionEditor : NumberOptionEditor<Float>() {\n    @Composable\n    override fun NumberDialog(\n        title: String,\n        current: Float?,\n        validator: (Float?) -> Boolean,\n        onSubmit: (Float?) -> Unit\n    ) = FloatInputDialog(current, title, unit = null, validator, onSubmit)\n}\n\nprivate object BooleanOptionEditor : OptionEditor<Boolean> {\n    override fun clickAction(scope: OptionEditorScope<Boolean>) {\n        if (scope.readOnly) return\n        scope.setValue(!scope.current)\n    }\n\n    @Composable\n    override fun ListItemTrailingContent(scope: OptionEditorScope<Boolean>) {\n        HapticSwitch(\n            checked = scope.current,\n            onCheckedChange = { value ->\n                scope.checkSafeguard {\n                    scope.setValue(value)\n                }\n            },\n            enabled = !scope.readOnly,\n            thumbContent = if (scope.current) {\n                {\n                    Icon(\n                        imageVector = Icons.Filled.Check,\n                        contentDescription = null,\n                        modifier = Modifier.size(SwitchDefaults.IconSize)\n                    )\n                }\n            } else {\n                {\n                    Icon(\n                        imageVector = Icons.Filled.Close,\n                        contentDescription = null,\n                        modifier = Modifier.size(SwitchDefaults.IconSize)\n                    )\n                }\n            }\n        )\n    }\n\n    @Composable\n    override fun Dialog(scope: OptionEditorScope<Boolean>) {\n    }\n\n    private val OptionEditorScope<Boolean>.current get() = value ?: false\n}\n\nprivate object UnknownTypeEditor : OptionEditor<Any>, KoinComponent {\n    override fun clickAction(scope: OptionEditorScope<Any>) =\n        get<Application>().toast(\"Unknown type: ${scope.option.type}\")\n\n    @Composable\n    override fun Dialog(scope: OptionEditorScope<Any>) {\n    }\n}\n\n/**\n * A wrapper for [OptionEditor]s that shows selectable presets.\n *\n * @param innerEditor The [OptionEditor] for [T].\n */\nprivate class PresetOptionEditor<T : Any>(private val innerEditor: OptionEditor<T>) :\n    OptionEditor<T> {\n    @OptIn(ExperimentalMaterial3ExpressiveApi::class)\n    @Composable\n    override fun Dialog(scope: OptionEditorScope<T>) {\n        var selectedPreset by rememberSaveable(scope.value, scope.option.presets) {\n            val presets = scope.option.presets!!\n\n            mutableStateOf(presets.entries.find { it.value == scope.value }?.key)\n        }\n\n        if (scope.readOnly) {\n            AlertDialogExtended(\n                onDismissRequest = scope.dismissDialog,\n                confirmButton = {\n                    TextButton(onClick = scope.dismissDialog, shapes = ButtonDefaults.shapes()) {\n                        Text(stringResource(R.string.ok))\n                    }\n                },\n                title = { Text(scope.option.name) },\n                textHorizontalPadding = PaddingValues(horizontal = 0.dp),\n                text = {\n                    val presets = remember(scope.option.presets) {\n                        scope.option.presets?.entries?.toList().orEmpty()\n                    }\n\n                    LazyColumn {\n                        @Composable\n                        fun Item(title: String, value: Any?, presetKey: String?) {\n                            ListItem(\n                                headlineContent = { Text(title) },\n                                supportingContent = value?.toString()?.let { { Text(it) } },\n                                leadingContent = {\n                                    HapticRadioButton(\n                                        selected = selectedPreset == presetKey,\n                                        onClick = null,\n                                        enabled = false\n                                    )\n                                },\n                                colors = transparentListItemColors\n                            )\n                        }\n\n                        items(presets, key = { it.key }) {\n                            Item(it.key, it.value, it.key)\n                        }\n\n                        item(key = null) {\n                            Item(\n                                stringResource(R.string.option_preset_custom_value),\n                                scope.value,\n                                null\n                            )\n                        }\n                    }\n                }\n            )\n            return\n        }\n\n        WithOptionEditor(\n            innerEditor,\n            scope.option,\n            scope.value,\n            scope.setValue,\n            scope.selectionWarningEnabled,\n            readOnly = false,\n            onDismissDialog = scope.dismissDialog\n         ) inner@{\n            var hidePresetsDialog by rememberSaveable {\n                mutableStateOf(false)\n            }\n            if (hidePresetsDialog) return@inner\n\n            // TODO: add a divider for scrollable content\n            AlertDialogExtended(\n                onDismissRequest = scope.dismissDialog,\n                confirmButton = {\n                    TextButton(\n                        onClick = {\n                            if (selectedPreset != null) scope.submitDialog(\n                                scope.option.presets?.get(\n                                    selectedPreset\n                                )\n                            )\n                            else {\n                                this@inner.openDialog()\n                                // Hide the presets dialog so it doesn't show up in the background.\n                                hidePresetsDialog = true\n                            }\n                        },\n                        shapes = ButtonDefaults.shapes()\n                    ) {\n                        Text(stringResource(if (selectedPreset != null) R.string.save else R.string.continue_))\n                    }\n                },\n                dismissButton = {\n                    TextButton(onClick = scope.dismissDialog, shapes = ButtonDefaults.shapes()) {\n                        Text(stringResource(R.string.cancel))\n                    }\n                },\n                title = { Text(scope.option.name) },\n                textHorizontalPadding = PaddingValues(horizontal = 0.dp),\n                text = {\n                    val presets = remember(scope.option.presets) {\n                        scope.option.presets?.entries?.toList().orEmpty()\n                    }\n\n                    LazyColumn {\n                        @Composable\n                        fun Item(title: String, value: Any?, presetKey: String?) {\n                            ListItem(\n                                modifier = Modifier.clickable { selectedPreset = presetKey },\n                                headlineContent = { Text(title) },\n                                supportingContent = value?.toString()?.let { { Text(it) } },\n                                leadingContent = {\n                                    HapticRadioButton(\n                                        selected = selectedPreset == presetKey,\n                                        onClick = { selectedPreset = presetKey }\n                                    )\n                                },\n                                colors = transparentListItemColors\n                            )\n                        }\n\n                        items(presets, key = { it.key }) {\n                            Item(it.key, it.value, it.key)\n                        }\n\n                        item(key = null) {\n                            Item(stringResource(R.string.option_preset_custom_value), null, null)\n                        }\n                    }\n                }\n            )\n        }\n    }\n}\n\nprivate class ListOptionEditor<T : Serializable>(private val elementEditor: OptionEditor<T>) :\n    OptionEditor<List<T>> {\n    private fun createElementOption(option: Option<List<T>>) = Option<T>(\n        option.name,\n        option.description,\n        option.required,\n        option.type.arguments.first().type!!,\n        null,\n        null\n    ) { true }\n\n    @OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class,\n        ExperimentalMaterial3ExpressiveApi::class\n    )\n    @Composable\n    override fun Dialog(scope: OptionEditorScope<List<T>>) {\n        if (scope.readOnly) {\n            FullscreenDialog(\n                onDismissRequest = scope.dismissDialog,\n            ) {\n                Scaffold(\n                    topBar = {\n                        AppTopBar(\n                            title = scope.option.name,\n                            onBackClick = scope.dismissDialog,\n                        )\n                    }\n                ) { paddingValues ->\n                    LazyColumn(\n                        modifier = Modifier\n                            .fillMaxHeight()\n                            .padding(paddingValues),\n                    ) {\n                        val items = scope.value.orEmpty()\n                        if (items.isEmpty()) {\n                            item {\n                                ListItem(\n                                    headlineContent = {\n                                        Text(\n                                            stringResource(R.string.empty),\n                                            fontStyle = FontStyle.Italic\n                                        )\n                                    },\n                                    colors = transparentListItemColors\n                                )\n                            }\n                        } else {\n                            items(items) { item ->\n                                ListItem(\n                                    headlineContent = { Text(item.toString()) },\n                                    colors = transparentListItemColors\n                                )\n                            }\n                        }\n                    }\n                }\n            }\n            return\n        }\n\n        val items =\n            rememberSaveable(scope.value, saver = snapshotStateListSaver()) {\n                // We need a key for each element in order to support dragging.\n                scope.value?.map(::Item)?.toMutableStateList() ?: mutableStateListOf()\n            }\n        val listIsDirty by remember {\n            derivedStateOf {\n                val current = scope.value.orEmpty()\n                if (current.size != items.size) return@derivedStateOf true\n\n                current.forEachIndexed { index, value ->\n                    if (value != items[index].value) return@derivedStateOf true\n                }\n\n                false\n            }\n        }\n\n        val lazyListState = rememberLazyListState()\n        val reorderableLazyColumnState =\n            rememberReorderableLazyListState(lazyListState) { from, to ->\n                items.add(to.index, items.removeAt(from.index))\n            }\n\n        var deleteMode by rememberSaveable {\n            mutableStateOf(false)\n        }\n        val deletionTargets = rememberSaveable(saver = snapshotStateSetSaver()) {\n            mutableStateSetOf<Int>()\n        }\n\n        val back = back@{\n            if (deleteMode) {\n                deletionTargets.clear()\n                deleteMode = false\n                return@back\n            }\n\n            if (!listIsDirty) {\n                scope.dismissDialog()\n                return@back\n            }\n\n            scope.submitDialog(items.mapNotNull { it.value })\n        }\n\n        FullscreenDialog(\n            onDismissRequest = back,\n        ) {\n            Scaffold(\n                topBar = {\n                    AppTopBar(\n                        title = if (deleteMode) pluralStringResource(\n                            R.plurals.selected_count,\n                            deletionTargets.size,\n                            deletionTargets.size\n                        ) else scope.option.name,\n                        onBackClick = back,\n                        backIcon = {\n                            if (deleteMode) {\n                                return@AppTopBar Icon(\n                                    Icons.Filled.Close,\n                                    stringResource(R.string.cancel)\n                                )\n                            }\n\n                            Icon(Icons.AutoMirrored.Filled.ArrowBack, stringResource(R.string.back))\n                        },\n                        actions = {\n                            if (deleteMode) {\n                                TooltipIconButton(\n                                    onClick = {\n                                        if (items.size == deletionTargets.size) deletionTargets.clear()\n                                        else deletionTargets.addAll(items.map { it.key })\n                                    },\n                                    tooltip = stringResource(R.string.select_deselect_all)\n                                ) {\n                                    Icon(\n                                        Icons.Filled.SelectAll,\n                                        stringResource(R.string.select_deselect_all)\n                                    )\n                                }\n                                TooltipIconButton(\n                                    onClick = {\n                                        items.removeIf { it.key in deletionTargets }\n                                        deletionTargets.clear()\n                                        deleteMode = false\n                                    },\n                                    tooltip = stringResource(R.string.delete)\n                                ) {\n                                    Icon(\n                                        Icons.Filled.Delete,\n                                        stringResource(R.string.delete)\n                                    )\n                                }\n                            } else {\n                                TooltipIconButton(\n                                    onClick = items::clear,\n                                    tooltip = stringResource(R.string.reset)\n                                ) {\n                                    Icon(\n                                        Icons.Filled.Restore,\n                                        stringResource(R.string.reset)\n                                    )\n                                }\n                            }\n                        }\n                    )\n                },\n                floatingActionButton = {\n                    if (deleteMode) return@Scaffold\n\n                    HapticExtendedFloatingActionButton(\n                        text = { Text(stringResource(R.string.add)) },\n                        icon = {\n                            Icon(\n                                Icons.Outlined.Add,\n                                stringResource(R.string.add)\n                            )\n                        },\n                        expanded = lazyListState.isScrollingUp,\n                        onClick = { items.add(Item(null)) }\n                    )\n                }\n            ) { paddingValues ->\n                val elementOption = remember(scope.option) { createElementOption(scope.option) }\n\n                LazyColumn(\n                    state = lazyListState,\n                    modifier = Modifier\n                        .fillMaxHeight()\n                        .padding(paddingValues),\n                ) {\n                    itemsIndexed(items, key = { _, item -> item.key }) { index, item ->\n                        val interactionSource = remember { MutableInteractionSource() }\n\n                        ReorderableItem(reorderableLazyColumnState, key = item.key) {\n                            WithOptionEditor(\n                                elementEditor,\n                                elementOption,\n                                value = item.value,\n                                setValue = { items[index] = item.copy(value = it) },\n                                selectionWarningEnabled = scope.selectionWarningEnabled,\n                                readOnly = false\n                            ) {\n                                ListItem(\n                                    modifier = Modifier.combinedClickable(\n                                        indication = LocalIndication.current,\n                                        interactionSource = interactionSource,\n                                        onLongClickLabel = stringResource(R.string.select),\n                                        onLongClick = {\n                                            if (!deleteMode) {\n                                                deletionTargets.add(item.key)\n                                                deleteMode = true\n                                            }\n                                        },\n                                        onClick = {\n                                            if (!deleteMode) {\n                                                clickAction()\n                                                return@combinedClickable\n                                            }\n\n                                            if (item.key in deletionTargets) {\n                                                deletionTargets.remove(\n                                                    item.key\n                                                )\n                                                deleteMode = deletionTargets.isNotEmpty()\n                                            } else deletionTargets.add(item.key)\n                                        },\n                                    ),\n                                    tonalElevation = if (deleteMode && item.key in deletionTargets) 8.dp else 0.dp,\n                                    leadingContent = {\n                                        TooltipIconButton(\n                                            modifier = Modifier.draggableHandle(interactionSource = interactionSource),\n                                            onClick = {},\n                                            tooltip = stringResource(R.string.drag_handle),\n                                        ) {\n                                            Icon(\n                                                Icons.Filled.DragHandle,\n                                                stringResource(R.string.drag_handle)\n                                            )\n                                        }\n                                    },\n                                    headlineContent = {\n                                        if (item.value == null) return@ListItem Text(\n                                            stringResource(R.string.empty),\n                                            fontStyle = FontStyle.Italic\n                                        )\n\n                                        Text(item.value.toString())\n                                    },\n                                    trailingContent = {\n                                        ListItemTrailingContent()\n                                    }\n                                )\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    @Parcelize\n    private data class Item<T : Serializable>(val value: T?, val key: Int = Random.nextInt()) :\n        Parcelable\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patches/OptionsDialog.kt",
    "content": "package app.revanced.manager.ui.component.patches\n\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Restore\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\nimport app.revanced.manager.patcher.patch.Option\nimport app.revanced.manager.patcher.patch.PatchInfo\nimport app.revanced.manager.ui.component.AppTopBar\nimport app.revanced.manager.ui.component.FullscreenDialog\nimport app.revanced.manager.ui.component.LazyColumnWithScrollbar\nimport app.revanced.manager.ui.component.TooltipIconButton\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun OptionsDialog(\n    patch: PatchInfo,\n    values: Map<String, Any?>?,\n    reset: () -> Unit,\n    set: (String, Any?) -> Unit,\n    onDismissRequest: () -> Unit,\n    selectionWarningEnabled: Boolean,\n    readOnly: Boolean\n) = FullscreenDialog(onDismissRequest = onDismissRequest) {\n    Scaffold(\n        topBar = {\n            AppTopBar(\n                title = patch.name,\n                onBackClick = onDismissRequest,\n                actions = {\n                    if (!readOnly) {\n                        TooltipIconButton(\n                            onClick = reset,\n                            tooltip = stringResource(R.string.reset)\n                        ) {\n                            Icon(Icons.Filled.Restore, stringResource(R.string.reset))\n                        }\n                    }\n                }\n            )\n        }\n    ) { paddingValues ->\n        LazyColumnWithScrollbar(\n            modifier = Modifier.padding(paddingValues)\n        ) {\n            if (patch.options == null) return@LazyColumnWithScrollbar\n\n            items(patch.options, key = { it.name }) { option ->\n                val name = option.name\n                val value =\n                    if (values == null || !values.contains(name)) option.default else values[name]\n\n                @Suppress(\"UNCHECKED_CAST\")\n                OptionItem(\n                    option = option as Option<Any>,\n                    value = value,\n                    setValue = {\n                        set(name, it)\n                    },\n                    selectionWarningEnabled = selectionWarningEnabled,\n                    readOnly = readOnly\n                )\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patches/PatchItem.kt",
    "content": "package app.revanced.manager.ui.component.patches\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.FlowRow\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Settings\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItem\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.alpha\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport app.revanced.manager.R\nimport app.revanced.manager.patcher.patch.PatchInfo\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.haptics.HapticCheckbox\nimport app.revanced.manager.util.transparentListItemColors\nimport kotlin.collections.firstOrNull\nimport kotlin.collections.map\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun PatchItem(\n    patch: PatchInfo,\n    onOptionsDialog: () -> Unit,\n    selected: Boolean,\n    onToggle: () -> Unit,\n    compatible: Boolean = true,\n    readOnly: Boolean = false,\n    scopedPackageName: String? = null\n) {\n    val anyVersionLabel = stringResource(R.string.patches_view_any_version)\n    val anyAppLabel = stringResource(R.string.universal)\n\n    val chipLabels = remember(patch.compatiblePackages, scopedPackageName, anyVersionLabel, anyAppLabel) {\n        val pkgs = patch.compatiblePackages\n        when {\n            pkgs == null -> if (scopedPackageName == null) listOf(anyAppLabel) else emptyList()\n            scopedPackageName != null -> {\n                val pkg = pkgs.firstOrNull { it.packageName == scopedPackageName }\n                    ?: return@remember emptyList()\n                val versions = pkg.versions\n                if (versions.isNullOrEmpty()) listOf(anyVersionLabel) else versions.toList()\n            }\n            else -> {\n                pkgs.map { pkg ->\n                    val versions = pkg.versions\n                    if (versions.isNullOrEmpty()) {\n                        \"${pkg.packageName} ($anyVersionLabel)\"\n                    } else {\n                        \"${pkg.packageName} (${versions.joinToString(\", \")})\"\n                    }\n                }\n            }\n        }\n    }\n\n    ListItem(\n        modifier = Modifier\n            .let { if (!compatible) it.alpha(0.5f) else it }\n            .clickable(enabled = !readOnly, onClick = onToggle)\n            .fillMaxSize(),\n        leadingContent = {\n            HapticCheckbox(\n                checked = selected,\n                onCheckedChange = { onToggle() },\n                enabled = compatible && !readOnly\n            )\n        },\n        headlineContent = { Text(patch.name) },\n        supportingContent = {\n            Column(verticalArrangement = Arrangement.spacedBy(4.dp)) {\n                patch.description?.let { Text(it) }\n                if (chipLabels.isNotEmpty()) {\n                    FlowRow(\n                        horizontalArrangement = Arrangement.spacedBy(4.dp),\n                        verticalArrangement = Arrangement.spacedBy(4.dp)\n                    ) {\n                        chipLabels.forEach { label ->\n                            Surface(\n                                color = MaterialTheme.colorScheme.surfaceContainerHigh,\n                                shape = RoundedCornerShape(6.dp)\n                            ) {\n                                Text(\n                                    text = label,\n                                    style = MaterialTheme.typography.labelSmall,\n                                    fontSize = 11.sp,\n                                    modifier = Modifier.padding(horizontal = 6.dp, vertical = 2.dp)\n                                )\n                            }\n                        }\n                    }\n                }\n            }\n        },\n        trailingContent = {\n            if (patch.options?.isNotEmpty() == true) {\n                TooltipIconButton(\n                    onClick = onOptionsDialog,\n                    enabled = compatible || readOnly,\n                    tooltip = stringResource(R.string.settings)\n                ) {\n                    Icon(\n                        imageVector = Icons.Outlined.Settings,\n                        contentDescription = stringResource(R.string.settings)\n                    )\n                }\n            }\n        },\n        colors = transparentListItemColors\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patches/PatchesFilterBottomSheet.kt",
    "content": "package app.revanced.manager.ui.component.patches\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.FlowRow\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Deselect\nimport androidx.compose.material.icons.outlined.Restore\nimport androidx.compose.material.icons.outlined.SwapHoriz\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ModalBottomSheet\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.rememberModalBottomSheetState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport app.revanced.manager.R\nimport app.revanced.manager.patcher.patch.PatchBundleInfo\nimport app.revanced.manager.ui.component.CheckedFilterChip\nimport app.revanced.manager.ui.component.ListSection\nimport app.revanced.manager.ui.viewmodel.PatchesSelectorViewModel.Companion.SHOW_INCOMPATIBLE\nimport app.revanced.manager.ui.viewmodel.PatchesSelectorViewModel.Companion.SHOW_UNIVERSAL\nimport app.revanced.manager.util.PM\nimport org.koin.compose.koinInject\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun PatchesFilterBottomSheet(\n    onDismissRequest: () -> Unit,\n    sections: List<BundleSection>,\n    patchLazyListState: LazyListState,\n    bundles: List<PatchBundleInfo.Scoped>,\n    filter: Int,\n    onToggleFlag: (Int) -> Unit,\n    packageName: String? = null,\n    readOnly: Boolean,\n    selectionWarningEnabled: Boolean,\n    onShowSelectionWarning: () -> Unit,\n    onRestoreDefaults: (Int?) -> Unit,\n    onDeselectAll: (Int?) -> Unit,\n    onInvertSelection: (Int?) -> Unit,\n    onDeselectAllExcept: (List<PatchBundleInfo.Scoped>, Int) -> Unit,\n    selectedPackageFilters: Set<String> = emptySet(),\n    onTogglePackageFilter: (String) -> Unit = {},\n) {\n    val modalBottomSheetState = rememberModalBottomSheetState(skipPartiallyExpanded = false)\n\n    val pm: PM = koinInject()\n    val pmAppList by pm.appList.collectAsStateWithLifecycle(initialValue = emptyList())\n\n    var pendingScopeAction by remember { mutableStateOf<((Int?) -> Unit)?>(null) }\n\n    val sectionLayouts = remember(sections) { buildSectionLayouts(sections) }\n    val currentBundle by remember(sectionLayouts, patchLazyListState) {\n        derivedStateOf {\n            sectionLayouts.lastOrNull { it.headerIndex <= patchLazyListState.firstVisibleItemIndex }?.bundle\n                ?: bundles.firstOrNull()\n        }\n    }\n\n    val packagePatchCounts = remember(bundles) {\n        bundles.asSequence()\n            .flatMap { it.patches.asSequence() }\n            .flatMap { it.compatiblePackages.orEmpty().asSequence() }\n            .groupingBy { it.packageName }\n            .eachCount()\n    }\n\n    val installedPackageLabels = remember(pmAppList) {\n        pmAppList.filter { it.packageInfo != null }\n            .associate { appInfo ->\n                appInfo.packageName to pm.run { appInfo.packageInfo!!.label() }\n            }\n    }\n\n    fun executeScopedAction(action: (Int?) -> Unit) {\n        if (bundles.size > 1) {\n            pendingScopeAction = action\n        } else {\n            action(bundles.firstOrNull()?.uid)\n        }\n    }\n\n    pendingScopeAction?.let { action ->\n        val activeBundle = currentBundle ?: return@let\n\n        ScopeDialog(\n            bundleName = activeBundle.name,\n            onDismissRequest = { pendingScopeAction = null },\n            onAllPatches = {\n                action(null)\n                pendingScopeAction = null\n            },\n            onBundleOnly = {\n                action(activeBundle.uid)\n                pendingScopeAction = null\n            }\n        )\n    }\n\n    ModalBottomSheet(\n        onDismissRequest = onDismissRequest,\n        sheetState = modalBottomSheetState\n    ) {\n        Column(\n            modifier = Modifier\n                .fillMaxWidth()\n                .verticalScroll(rememberScrollState())\n                .padding(bottom = 16.dp),\n            verticalArrangement = Arrangement.spacedBy(16.dp)\n        ) {\n            Text(\n                text = stringResource(R.string.patch_selector_sheet_filter_title),\n                style = MaterialTheme.typography.titleLarge,\n                modifier = Modifier.padding(horizontal = 16.dp)\n            )\n\n            Column(\n                modifier = Modifier.padding(horizontal = 16.dp),\n                verticalArrangement = Arrangement.spacedBy(4.dp)\n            ) {\n                Text(\n                    text = stringResource(R.string.patch_selector_sheet_filter_compat_title),\n                    style = MaterialTheme.typography.titleMedium\n                )\n\n                FlowRow(\n                    modifier = Modifier.fillMaxWidth(),\n                    horizontalArrangement = Arrangement.spacedBy(8.dp),\n                    verticalArrangement = Arrangement.spacedBy(12.dp)\n                ) {\n                    packageName?.let {\n                        CheckedFilterChip(\n                            selected = filter and SHOW_INCOMPATIBLE == 0,\n                            onClick = { onToggleFlag(SHOW_INCOMPATIBLE) },\n                            label = { Text(stringResource(R.string.this_version)) }\n                        )\n                    }\n\n                    CheckedFilterChip(\n                        selected = filter and SHOW_UNIVERSAL != 0,\n                        onClick = { onToggleFlag(SHOW_UNIVERSAL) },\n                        label = { Text(stringResource(R.string.universal)) }\n                    )\n                }\n\n                if (readOnly && packagePatchCounts.isNotEmpty()) {\n                    Text(\n                        text = stringResource(R.string.patch_selector_sheet_filter_packages_title),\n                        style = MaterialTheme.typography.titleMedium,\n                        modifier = Modifier.padding(top = 12.dp)\n                    )\n\n                    FlowRow(\n                        modifier = Modifier.fillMaxWidth(),\n                        horizontalArrangement = Arrangement.spacedBy(8.dp),\n                        verticalArrangement = Arrangement.spacedBy(12.dp)\n                    ) {\n                        packagePatchCounts\n                            .toList()\n                            .sortedWith(compareByDescending<Pair<String, Int>> { it.second }.thenBy { it.first })\n                            .forEach { (pkg, count) ->\n                                val label = installedPackageLabels[pkg] ?: pkg\n                                CheckedFilterChip(\n                                    selected = pkg in selectedPackageFilters,\n                                    onClick = { onTogglePackageFilter(pkg) },\n                                    label = { Text(\"$label ($count)\") }\n                                )\n                            }\n                    }\n                }\n            }\n\n            fun guardedAction(action: () -> Unit) {\n                onDismissRequest()\n                if (selectionWarningEnabled) {\n                    onShowSelectionWarning()\n                } else {\n                    action()\n                }\n            }\n\n            if (!readOnly) {\n                HorizontalDivider(modifier = Modifier.padding(horizontal = 16.dp))\n\n                Text(\n                    text = stringResource(R.string.patch_selector_sheet_actions_title),\n                    style = MaterialTheme.typography.titleLarge,\n                    modifier = Modifier.padding(horizontal = 16.dp)\n                )\n\n                ListSection(\n                    modifier = Modifier.padding(horizontal = 16.dp),\n                    contentPadding = PaddingValues(0.dp)\n                ) {\n                    ActionItem(\n                        icon = Icons.Outlined.Restore,\n                        text = stringResource(R.string.restore_default_selection),\n                        onClick = {\n                            guardedAction {\n                                executeScopedAction { uid ->\n                                    onRestoreDefaults(uid)\n                                }\n                            }\n                        }\n                    )\n\n                    ActionItem(\n                        icon = Icons.Outlined.Deselect,\n                        text = stringResource(R.string.deselect_all),\n                        onClick = {\n                            guardedAction {\n                                executeScopedAction { uid ->\n                                    onDeselectAll(uid)\n                                }\n                            }\n                        }\n                    )\n\n                    ActionItem(\n                        icon = Icons.Outlined.SwapHoriz,\n                        text = stringResource(R.string.invert_selection),\n                        onClick = {\n                            guardedAction {\n                                executeScopedAction { uid ->\n                                    onInvertSelection(uid)\n                                }\n                            }\n                        }\n                    )\n\n                    currentBundle?.let { bundle ->\n                        ActionItem(\n                            icon = Icons.Outlined.Deselect,\n                            text = stringResource(R.string.deselect_all_except, bundle.name),\n                            onClick = {\n                                guardedAction {\n                                    onDeselectAllExcept(bundles, bundle.uid)\n                                }\n                            }\n                        )\n                    }\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patches/PatchesListHeader.kt",
    "content": "package app.revanced.manager.ui.component.patches\n\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.HelpOutline\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItem\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.util.transparentListItemColors\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun PatchesListHeader(\n    title: String,\n    onHelpClick: (() -> Unit)? = null\n) {\n    ListItem(\n        headlineContent = {\n            Text(\n                text = title,\n                color = MaterialTheme.colorScheme.primary,\n                style = MaterialTheme.typography.labelLarge\n            )\n        },\n        trailingContent = onHelpClick?.let {\n            {\n                TooltipIconButton(onClick = it, tooltip = stringResource(R.string.help)) {\n                    Icon(\n                        Icons.AutoMirrored.Outlined.HelpOutline,\n                        stringResource(R.string.help)\n                    )\n                }\n            }\n        },\n        colors = transparentListItemColors\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patches/PathSelectorDialog.kt",
    "content": "package app.revanced.manager.ui.component.patches\n\nimport androidx.activity.compose.BackHandler\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.ArrowBack\nimport androidx.compose.material.icons.automirrored.outlined.InsertDriveFile\nimport androidx.compose.material.icons.filled.Close\nimport androidx.compose.material.icons.outlined.Folder\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItem\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.AppTopBar\nimport app.revanced.manager.ui.component.FullscreenDialog\nimport app.revanced.manager.ui.component.GroupHeader\nimport app.revanced.manager.ui.component.LazyColumnWithScrollbar\nimport app.revanced.manager.util.saver.PathSaver\nimport java.nio.file.Path\nimport kotlin.io.path.absolutePathString\nimport kotlin.io.path.isDirectory\nimport kotlin.io.path.isReadable\nimport kotlin.io.path.listDirectoryEntries\nimport kotlin.io.path.name\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun PathSelectorDialog(root: Path, onSelect: (Path?) -> Unit) {\n    var currentDirectory by rememberSaveable(root, stateSaver = PathSaver) { mutableStateOf(root) }\n    val notAtRootDir = remember(currentDirectory) {\n        currentDirectory != root\n    }\n    val (directories, files) = remember(currentDirectory) {\n        currentDirectory.listDirectoryEntries().filter(Path::isReadable).partition(Path::isDirectory)\n    }\n\n    FullscreenDialog(\n        onDismissRequest = { onSelect(null) },\n    ) {\n        Scaffold(\n            topBar = {\n                AppTopBar(\n                    title = stringResource(R.string.path_selector),\n                    onBackClick = { onSelect(null) },\n                    backIcon = {\n                        Icon(Icons.Filled.Close, contentDescription = stringResource(R.string.close))\n                    }\n                )\n            },\n        ) { paddingValues ->\n            BackHandler(enabled = notAtRootDir) {\n                currentDirectory = currentDirectory.parent\n            }\n\n            LazyColumnWithScrollbar(\n                modifier = Modifier.padding(paddingValues)\n            ) {\n                item(key = \"current\") {\n                    PathItem(\n                        onClick = { onSelect(currentDirectory) },\n                        icon = Icons.Outlined.Folder,\n                        name = currentDirectory.toString()\n                    )\n                }\n\n                if (notAtRootDir) {\n                    item(key = \"parent\") {\n                        PathItem(\n                            onClick = { currentDirectory = currentDirectory.parent },\n                            icon = Icons.AutoMirrored.Outlined.ArrowBack,\n                            name = stringResource(R.string.path_selector_parent_dir)\n                        )\n                    }\n                }\n\n                if (directories.isNotEmpty()) {\n                    item(key = \"dirs_header\") {\n                        GroupHeader(title = stringResource(R.string.path_selector_dirs))\n                    }\n                }\n                items(directories, key = { it.absolutePathString() }) {\n                    PathItem(\n                        onClick = { currentDirectory = it },\n                        icon = Icons.Outlined.Folder,\n                        name = it.name\n                    )\n                }\n\n                if (files.isNotEmpty()) {\n                    item(key = \"files_header\") {\n                        GroupHeader(title = stringResource(R.string.path_selector_files))\n                    }\n                }\n                items(files, key = { it.absolutePathString() }) {\n                    PathItem(\n                        onClick = { onSelect(it) },\n                        icon = Icons.AutoMirrored.Outlined.InsertDriveFile,\n                        name = it.name\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun PathItem(\n    onClick: () -> Unit,\n    icon: ImageVector,\n    name: String\n) {\n    ListItem(\n        modifier = Modifier.clickable(onClick = onClick),\n        headlineContent = { Text(name) },\n        leadingContent = { Icon(icon, contentDescription = null) }\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patches/ScopeDialog.kt",
    "content": "package app.revanced.manager.ui.component.patches\n\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun ScopeDialog(\n    bundleName: String,\n    onDismissRequest: () -> Unit,\n    onAllPatches: () -> Unit,\n    onBundleOnly: () -> Unit\n) = AlertDialog(\n    onDismissRequest = onDismissRequest,\n    title = { Text(stringResource(R.string.scope_dialog_title)) },\n    confirmButton = {\n        TextButton(onClick = onAllPatches, shapes = ButtonDefaults.shapes()) {\n            Text(stringResource(R.string.scope_all_patches))\n        }\n    },\n    dismissButton = {\n        TextButton(onClick = onBundleOnly, shapes = ButtonDefaults.shapes()) {\n            Text(stringResource(R.string.scope_bundle_patches, bundleName))\n        }\n    }\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patches/SelectionWarningDialog.kt",
    "content": "package app.revanced.manager.ui.component.patches\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.SafeguardDialog\n\n@Composable\nfun SelectionWarningDialog(\n    onDismiss: () -> Unit\n) {\n    SafeguardDialog(\n        onDismiss = onDismiss,\n        title = R.string.warning,\n        body = stringResource(R.string.selection_warning_description),\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patches/SourceSectionHeader.kt",
    "content": "package app.revanced.manager.ui.component.patches\n\nimport androidx.compose.animation.core.EaseInOut\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.animation.core.tween\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Delete\nimport androidx.compose.material.icons.filled.KeyboardArrowDown\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItem\nimport androidx.compose.material3.ListItemDefaults\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.rotate\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.state.ToggleableState\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.patcher.patch.PatchBundleInfo\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.haptics.HapticTriStateCheckbox\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun SourceSectionHeader(\n    bundle: PatchBundleInfo.Scoped,\n    expanded: Boolean,\n    selectionState: Boolean?,\n    onClick: () -> Unit,\n    onSelectionClick: () -> Unit,\n    onExpandToggle: () -> Unit,\n    onDeleteClick: () -> Unit,\n    sourceEditMode: Boolean,\n    readOnly: Boolean,\n    loadIssue: String?\n) {\n    val toggleableState = when (selectionState) {\n        true -> ToggleableState.On\n        false -> ToggleableState.Off\n        null -> ToggleableState.Indeterminate\n    }\n    val arrowRotation by animateFloatAsState(\n        targetValue = if (expanded) 0f else -90f,\n        animationSpec = tween(durationMillis = 250, easing = EaseInOut),\n        label = \"Bundle section expand state\"\n    )\n\n    Column {\n        ListItem(\n            modifier = Modifier\n                .fillMaxWidth()\n                .clickable(onClick = onClick),\n            leadingContent = {\n                HapticTriStateCheckbox(\n                    state = toggleableState,\n                    onClick = onSelectionClick,\n                    enabled = !readOnly\n                )\n            },\n            headlineContent = {\n                Text(text = bundle.name)\n            },\n            supportingContent = {\n                val version = bundle.version?.takeIf { it.isNotBlank() }\n                if (version == null && loadIssue == null) return@ListItem\n\n                Column(verticalArrangement = Arrangement.spacedBy(2.dp)) {\n                    version?.let {\n                        Text(\n                            text = it,\n                            color = MaterialTheme.colorScheme.onSurfaceVariant\n                        )\n                    }\n\n                    loadIssue?.let {\n                        Text(\n                            text = it,\n                            color = MaterialTheme.colorScheme.error\n                        )\n                    }\n                }\n            },\n            trailingContent = {\n                if (sourceEditMode) {\n                    TooltipIconButton(\n                        onClick = onDeleteClick,\n                        enabled = bundle.uid != 0,\n                        tooltip = stringResource(R.string.delete)\n                    ) {\n                        Icon(\n                            imageVector = Icons.Filled.Delete,\n                            contentDescription = stringResource(R.string.delete)\n                        )\n                    }\n                } else {\n                    TooltipIconButton(\n                        onClick = onExpandToggle,\n                        tooltip = stringResource(\n                            if (expanded) R.string.collapse_content else R.string.expand_content\n                        )\n                    ) {\n                        Icon(\n                            imageVector = Icons.Filled.KeyboardArrowDown,\n                            contentDescription = stringResource(\n                                if (expanded) R.string.collapse_content else R.string.expand_content\n                            ),\n                            modifier = Modifier.rotate(arrowRotation)\n                        )\n                    }\n                }\n            },\n            colors = ListItemDefaults.colors(\n                containerColor = MaterialTheme.colorScheme.surface\n            )\n        )\n        HorizontalDivider()\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patches/UniversalPatchWarningDialog.kt",
    "content": "package app.revanced.manager.ui.component.patches\n\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.SafeguardDialog\n\n@Composable\nfun UniversalPatchWarningDialog(\n    onDismiss: () -> Unit\n) {\n    SafeguardDialog(\n        onDismiss = onDismiss,\n        title = R.string.warning,\n        body = stringResource(R.string.universal_patch_warning_description),\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patches/buildBundleSections.kt",
    "content": "package app.revanced.manager.ui.component.patches\n\nimport app.revanced.manager.patcher.patch.PatchBundleInfo\nimport app.revanced.manager.patcher.patch.PatchInfo\nimport app.revanced.manager.ui.viewmodel.PatchesSelectorViewModel.Companion.SHOW_INCOMPATIBLE\nimport app.revanced.manager.ui.viewmodel.PatchesSelectorViewModel.Companion.SHOW_UNIVERSAL\n\nfun buildBundleSections(\n    bundles: List<PatchBundleInfo.Scoped>,\n    query: String = \"\",\n    filter: Int,\n    collapsedBundleUids: List<Int>,\n    selectedPackageNames: Set<String> = emptySet(),\n    forceExpanded: Boolean = false\n): List<BundleSection> {\n    fun PatchInfo.matchesPackageFilter(): Boolean {\n        if (selectedPackageNames.isEmpty()) return true\n        val packages = compatiblePackages ?: return true\n        return packages.any { it.packageName in selectedPackageNames }\n    }\n\n    fun PatchInfo.matchesSearchQuery(): Boolean {\n        if (query.isBlank()) return true\n\n        return name.contains(query, ignoreCase = true) ||\n                description?.contains(query, ignoreCase = true) == true ||\n                compatiblePackages?.any { pkg ->\n                    pkg.packageName.contains(query, ignoreCase = true)\n                } == true\n    }\n\n    fun List<PatchInfo>.searched() = filter {\n        if (query.isBlank()) it.matchesPackageFilter() else it.matchesSearchQuery() && it.matchesPackageFilter()\n    }\n\n    return bundles.mapNotNull { bundle ->\n        BundleSection(\n            bundle = bundle,\n            compatible = bundle.compatible.searched(),\n            universal = if (filter and SHOW_UNIVERSAL != 0) bundle.universal.searched() else emptyList(),\n            incompatible = if (filter and SHOW_INCOMPATIBLE != 0) bundle.incompatible.searched() else emptyList(),\n            expanded = forceExpanded || bundle.uid !in collapsedBundleUids\n        ).takeIf { query.isBlank() || it.hasVisiblePatches }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/patches/buildSectionLayouts.kt",
    "content": "package app.revanced.manager.ui.component.patches\n\nimport app.revanced.manager.patcher.patch.PatchBundleInfo\nimport app.revanced.manager.patcher.patch.PatchInfo\n\nfun buildSectionLayouts(sections: List<BundleSection>) = buildList {\n    var itemIndex = 0\n\n    sections.forEach { section ->\n        add(BundleSectionLayout(section.bundle, itemIndex))\n        itemIndex += 1\n\n        if (!section.expanded) return@forEach\n\n        itemIndex += section.compatible.size\n        if (section.universal.isNotEmpty()) {\n            itemIndex += 1 + section.universal.size\n        }\n        if (section.incompatible.isNotEmpty()) {\n            itemIndex += 1 + section.incompatible.size\n        }\n    }\n}\n\ndata class BundleSection(\n    val bundle: PatchBundleInfo.Scoped,\n    val compatible: List<PatchInfo>,\n    val universal: List<PatchInfo>,\n    val incompatible: List<PatchInfo>,\n    val expanded: Boolean\n) {\n    val hasVisiblePatches: Boolean\n        get() = compatible.isNotEmpty() || universal.isNotEmpty() || incompatible.isNotEmpty()\n}\n\ndata class BundleSectionLayout(\n    val bundle: PatchBundleInfo.Scoped,\n    val headerIndex: Int\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/scaffold/BannerScaffold.kt",
    "content": "package app.revanced.manager.ui.component.scaffold\n\nimport android.os.Build\nimport androidx.compose.foundation.LocalOverscrollFactory\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.gestures.Orientation\nimport androidx.compose.foundation.gestures.rememberScrollableState\nimport androidx.compose.foundation.gestures.scrollable\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.BoxWithConstraints\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.WindowInsetsSides\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.only\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.systemBars\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.layout.windowInsetsPadding\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBar\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.contentColorFor\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.CompositionLocalProvider\nimport androidx.compose.runtime.Immutable\nimport androidx.compose.runtime.SideEffect\nimport androidx.compose.runtime.Stable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableFloatStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.saveable.Saver\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.draw.clipToBounds\nimport androidx.compose.ui.geometry.Offset\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.input.nestedscroll.NestedScrollConnection\nimport androidx.compose.ui.input.nestedscroll.NestedScrollSource\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.platform.LocalDensity\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.util.lerp\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport kotlin.math.roundToInt\n\n@Stable\nclass BannerScope internal constructor(\n    val collapseFraction: Float,\n    val isLandscape: Boolean,\n    val contentColor: Color,\n)\n\n@Stable\nclass BannerScrollState(initialCollapsedFraction: Float = 0f) {\n    private var collapseOffsetPx by mutableFloatStateOf(0f)\n    private var collapseRangePx by mutableFloatStateOf(0f)\n\n    var collapsedFraction by mutableFloatStateOf(initialCollapsedFraction.coerceIn(0f, 1f))\n        private set\n\n    internal var offsetLimitPx: Float\n        get() = collapseRangePx\n        set(value) {\n            collapseRangePx = value.coerceAtLeast(0f)\n            if (collapseRangePx == 0f) {\n                collapseOffsetPx = 0f\n                collapsedFraction = 0f\n                return\n            }\n\n            collapseOffsetPx = (collapsedFraction * collapseRangePx).coerceIn(0f, collapseRangePx)\n            collapsedFraction = collapseOffsetPx / collapseRangePx\n        }\n\n    internal fun consumeScrollDelta(deltaPx: Float): Float {\n        if (collapseRangePx <= 0f || deltaPx == 0f) return 0f\n\n        val previousOffset = collapseOffsetPx\n        collapseOffsetPx = (collapseOffsetPx - deltaPx).coerceIn(0f, collapseRangePx)\n        collapsedFraction = collapseOffsetPx / collapseRangePx\n\n        return -(collapseOffsetPx - previousOffset)\n    }\n}\n\n@Stable\nclass BannerScrollBehavior internal constructor(\n    val state: BannerScrollState,\n    private val canCollapse: () -> Boolean,\n    private val dispatchSheetRawDelta: ((Float) -> Float)?,\n) {\n    val nestedScrollConnection: NestedScrollConnection = object : NestedScrollConnection {\n        override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {\n            val consumed = if (available.y < 0f) consumeBannerDelta(available.y) else 0f\n            return Offset(0f, consumed)\n        }\n\n        override fun onPostScroll(\n            consumed: Offset,\n            available: Offset,\n            source: NestedScrollSource,\n        ): Offset {\n            val consumedByBanner = if (available.y > 0f) consumeBannerDelta(available.y) else 0f\n            return Offset(0f, consumedByBanner)\n        }\n    }\n\n    internal fun consumeDirectDragDelta(deltaPx: Float): Float {\n        if (deltaPx == 0f) return 0f\n\n        return if (deltaPx < 0f) {\n            val bannerConsumed = consumeBannerDelta(deltaPx)\n            val remaining = deltaPx - bannerConsumed\n            bannerConsumed + consumeSheetDelta(remaining)\n        } else {\n            val sheetConsumed = consumeSheetDelta(deltaPx)\n            val remaining = deltaPx - sheetConsumed\n            sheetConsumed + consumeBannerDelta(remaining)\n        }\n    }\n\n    private fun consumeBannerDelta(deltaPx: Float): Float {\n        if (deltaPx < 0f && !canCollapse()) return 0f\n        return state.consumeScrollDelta(deltaPx)\n    }\n\n    private fun consumeSheetDelta(gestureDeltaPx: Float): Float {\n        if (gestureDeltaPx == 0f) return 0f\n        val consumedRaw = dispatchSheetRawDelta?.invoke(-gestureDeltaPx) ?: 0f\n        return -consumedRaw\n    }\n}\n\nprivate val BannerScrollStateSaver: Saver<BannerScrollState, Float> = Saver(\n    save = { it.collapsedFraction },\n    restore = { BannerScrollState(initialCollapsedFraction = it) },\n)\n\n@Composable\nprivate fun rememberBannerScrollState(\n    initialCollapsedFraction: Float = 0f,\n): BannerScrollState = rememberSaveable(saver = BannerScrollStateSaver) {\n    BannerScrollState(initialCollapsedFraction)\n}\n\n@Composable\nfun rememberBannerScrollBehavior(\n    state: BannerScrollState = rememberBannerScrollState(),\n    canCollapse: () -> Boolean = { true },\n): BannerScrollBehavior = remember(state, canCollapse) {\n    BannerScrollBehavior(state = state, canCollapse = canCollapse, dispatchSheetRawDelta = null)\n}\n\n@Composable\nfun rememberBannerScrollBehavior(\n    sheetLazyListState: LazyListState,\n    state: BannerScrollState = rememberBannerScrollState(),\n    canCollapse: () -> Boolean = { true },\n): BannerScrollBehavior {\n    return remember(state, sheetLazyListState, canCollapse) {\n        BannerScrollBehavior(\n            state = state,\n            canCollapse = {\n                canCollapse() &&\n                    (sheetLazyListState.canScrollForward || sheetLazyListState.canScrollBackward)\n            },\n            dispatchSheetRawDelta = sheetLazyListState::dispatchRawDelta,\n        )\n    }\n}\n\nobject BannerScaffoldDefaults {\n    val SheetCornerRadius: Dp = 28.dp\n\n    @Composable\n    fun colors(\n        sheetBackgroundColor: Color = MaterialTheme.colorScheme.surfaceContainerLow,\n        bannerContentColor: Color = MaterialTheme.colorScheme.onSurface,\n    ) = BannerScaffoldColors(\n        sheetBackgroundColor = sheetBackgroundColor,\n        bannerContentColor = bannerContentColor,\n        sheetContentColor = contentColorFor(sheetBackgroundColor),\n    )\n}\n\n@ConsistentCopyVisibility\n@Immutable\ndata class BannerScaffoldColors internal constructor(\n    val sheetBackgroundColor: Color,\n    val bannerContentColor: Color,\n    val sheetContentColor: Color,\n)\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun BannerScaffold(\n    modifier: Modifier = Modifier,\n    title: String = \"\",\n    onBackClick: (() -> Unit)? = null,\n    actions: @Composable RowScope.() -> Unit = {},\n    colors: BannerScaffoldColors = BannerScaffoldDefaults.colors(),\n    scrollBehavior: BannerScrollBehavior? = null,\n    bannerBackground: @Composable BannerScope.() -> Unit = {},\n    bannerContent: @Composable BannerScope.() -> Unit,\n    sheetContent: @Composable (PaddingValues) -> Unit,\n) {\n    BoxWithConstraints(modifier.fillMaxSize()) {\n        val density = LocalDensity.current\n        val isLandscape = maxWidth > maxHeight\n        val axisFraction = if (isLandscape) 0.5f else 0.35f\n        val collapsedAxisFraction = if (isLandscape) axisFraction else 0.15f\n\n        val topBarHeight = if (isLandscape) 0.dp else 64.dp\n        val topBarPx = with(density) { topBarHeight.roundToPx() }\n\n        val totalMainAxisPx = with(density) {\n            if (isLandscape) maxWidth.roundToPx() else maxHeight.roundToPx()\n        }\n        val availableMainAxisPx = (totalMainAxisPx - if (isLandscape) 0 else topBarPx).coerceAtLeast(0)\n        val expandedBannerPx = (availableMainAxisPx * axisFraction).roundToInt()\n        val collapsedBannerPx = (availableMainAxisPx * collapsedAxisFraction)\n            .roundToInt()\n            .coerceAtMost(expandedBannerPx)\n\n        val collapseFraction = if (isLandscape) 0f else scrollBehavior?.state?.collapsedFraction ?: 0f\n\n        SideEffect {\n            scrollBehavior?.state?.offsetLimitPx =\n                if (isLandscape) 0f else (expandedBannerPx - collapsedBannerPx).toFloat()\n        }\n\n        val bannerPx = if (isLandscape) expandedBannerPx else {\n            lerp(expandedBannerPx.toFloat(), collapsedBannerPx.toFloat(), collapseFraction).roundToInt()\n        }\n\n        val bannerSize = with(density) {\n            bannerPx.coerceIn(0, availableMainAxisPx).toDp()\n        }\n\n        val cornerRadius = BannerScaffoldDefaults.SheetCornerRadius\n        val cornerPx = with(density) { cornerRadius.roundToPx() }\n        val backgroundExtent = with(density) {\n            val maxPx = if (isLandscape) maxWidth.roundToPx() else maxHeight.roundToPx()\n            val extentPx = bannerPx + cornerPx + if (isLandscape) 0 else topBarPx\n            extentPx.coerceAtMost(maxPx).toDp()\n        }\n\n        val bannerScope = remember(collapseFraction, isLandscape, colors.bannerContentColor) {\n            BannerScope(collapseFraction, isLandscape, colors.bannerContentColor)\n        }\n\n        val scaffoldScrollModifier = if (!isLandscape && scrollBehavior != null) {\n            Modifier\n                .nestedScroll(scrollBehavior.nestedScrollConnection)\n                .scrollable(\n                    state = rememberScrollableState { scrollBehavior.consumeDirectDragDelta(it) },\n                    orientation = Orientation.Vertical,\n                )\n        } else {\n            Modifier\n        }\n\n        Box(Modifier.fillMaxSize().then(scaffoldScrollModifier)) {\n            val bannerBackgroundModifier = Modifier.align(Alignment.TopStart).then(\n                if (isLandscape) {\n                    Modifier.width(backgroundExtent).fillMaxHeight()\n                } else {\n                    Modifier.fillMaxWidth().height(backgroundExtent)\n                }\n            )\n\n            CompositionLocalProvider(LocalContentColor provides colors.bannerContentColor) {\n                Box(modifier = bannerBackgroundModifier) {\n                    bannerScope.bannerBackground()\n                }\n            }\n\n            val bannerContentModifier = Modifier.align(Alignment.TopStart).then(\n                if (isLandscape) {\n                    Modifier.width(bannerSize).fillMaxHeight()\n                } else {\n                    Modifier.padding(top = topBarHeight).fillMaxWidth().height(bannerSize)\n                }\n            )\n\n            CompositionLocalProvider(LocalContentColor provides colors.bannerContentColor) {\n                Box(modifier = bannerContentModifier.clipToBounds()) {\n                    bannerScope.bannerContent()\n                }\n            }\n\n            val sheetShape = if (isLandscape) {\n                RoundedCornerShape(topStart = cornerRadius, bottomStart = cornerRadius)\n            } else {\n                RoundedCornerShape(topStart = cornerRadius, topEnd = cornerRadius)\n            }\n\n            val sheetBackgroundModifier = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                Modifier\n                    .clip(sheetShape)\n                    .background(colors.sheetBackgroundColor)\n            } else {\n                Modifier.background(colors.sheetBackgroundColor, sheetShape)\n            }\n\n            val sheetContainerModifier = Modifier\n                .fillMaxSize()\n                .padding(\n                    start = if (isLandscape) bannerSize else 0.dp,\n                    top = if (isLandscape) 0.dp else topBarHeight + bannerSize,\n                )\n\n            CompositionLocalProvider(\n                LocalContentColor provides colors.sheetContentColor,\n                LocalOverscrollFactory provides null,\n            ) {\n                Box(\n                    modifier = sheetContainerModifier\n                        .then(sheetBackgroundModifier)\n                        .then(\n                            if (isLandscape) {\n                                Modifier.windowInsetsPadding(\n                                    WindowInsets.systemBars.only(\n                                        WindowInsetsSides.End + WindowInsetsSides.Vertical,\n                                    )\n                                )\n                            } else {\n                                Modifier\n                            }\n                        )\n                ) {\n                    val insetPadding = if (isLandscape) {\n                        PaddingValues(start = cornerRadius)\n                    } else {\n                        PaddingValues(top = cornerRadius)\n                    }\n                    sheetContent(insetPadding)\n                }\n            }\n\n            TopAppBar(\n                modifier = Modifier\n                    .align(Alignment.TopStart)\n                    .then(if (isLandscape) Modifier.width(bannerSize) else Modifier.fillMaxWidth()),\n                title = { Text(title) },\n                navigationIcon = {\n                    if (onBackClick != null) {\n                        TooltipIconButton(\n                            onClick = onBackClick,\n                            tooltip = stringResource(R.string.back)\n                        ) {\n                            Icon(\n                                Icons.AutoMirrored.Filled.ArrowBack,\n                                contentDescription = stringResource(R.string.back),\n                            )\n                        }\n                    }\n                },\n                actions = actions,\n                colors = TopAppBarDefaults.topAppBarColors(\n                    containerColor = Color.Transparent,\n                    titleContentColor = colors.bannerContentColor,\n                    navigationIconContentColor = colors.bannerContentColor,\n                    actionIconContentColor = colors.bannerContentColor,\n                ),\n                windowInsets = WindowInsets.systemBars.only(\n                    if (isLandscape) {\n                        WindowInsetsSides.Top + WindowInsetsSides.Start\n                    } else {\n                        WindowInsetsSides.Top + WindowInsetsSides.Horizontal\n                    }\n                ),\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/settings/BooleanItem.kt",
    "content": "package app.revanced.manager.ui.component.settings\n\nimport androidx.annotation.StringRes\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Check\nimport androidx.compose.material.icons.filled.Close\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.SwitchDefaults\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.foundation.layout.size\nimport app.revanced.manager.domain.manager.base.Preference\nimport app.revanced.manager.ui.component.haptics.HapticSwitch\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.launch\n\n@Composable\nfun BooleanItem(\n    modifier: Modifier = Modifier,\n    preference: Preference<Boolean>,\n    coroutineScope: CoroutineScope = rememberCoroutineScope(),\n    @StringRes headline: Int,\n    @StringRes description: Int\n) {\n    val value by preference.getAsState()\n\n    BooleanItem(\n        modifier = modifier,\n        value = value,\n        onValueChange = { coroutineScope.launch { preference.update(it) } },\n        headline = headline,\n        description = description\n    )\n}\n\n@Composable\nfun BooleanItem(\n    modifier: Modifier = Modifier,\n    value: Boolean,\n    onValueChange: (Boolean) -> Unit,\n    @StringRes headline: Int,\n    @StringRes description: Int\n) = BooleanItem(\n    modifier = modifier,\n    value = value,\n    onValueChange = onValueChange,\n    headline = headline,\n    description = stringResource(description)\n)\n\n@Composable\nfun BooleanItem(\n    modifier: Modifier = Modifier,\n    value: Boolean,\n    onValueChange: (Boolean) -> Unit,\n    @StringRes headline: Int,\n    description: String\n) = SettingsListItem(\n    modifier = modifier,\n    headlineContent = stringResource(headline),\n    supportingContent = description,\n    onClick = { onValueChange(!value) },\n    trailingContent = {\n        HapticSwitch(\n            checked = value,\n            onCheckedChange = onValueChange,\n            thumbContent = if (value) {\n                {\n                    Icon(\n                        imageVector = Icons.Filled.Check,\n                        contentDescription = null,\n                        modifier = Modifier.size(SwitchDefaults.IconSize)\n                    )\n                }\n            } else {\n                {\n                    Icon(\n                        imageVector = Icons.Filled.Close,\n                        contentDescription = null,\n                        modifier = Modifier.size(SwitchDefaults.IconSize)\n                    )\n                }\n            }\n        )\n    }\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/settings/Changelog.kt",
    "content": "package app.revanced.manager.ui.component.settings\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.NewReleases\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.ui.component.Markdown\n\n@Composable\nfun Changelog(\n    markdown: String,\n    version: String,\n    publishDate: String\n) {\n    Column(verticalArrangement = Arrangement.spacedBy(4.dp)) {\n        Row(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(bottom = 0.dp),\n            horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.Start),\n            verticalAlignment = Alignment.CenterVertically\n        ) {\n            Icon(\n                imageVector = Icons.Outlined.NewReleases,\n                contentDescription = null,\n                tint = MaterialTheme.colorScheme.primary,\n                modifier = Modifier\n                    .size(32.dp)\n            )\n            Text(\n                \"${version.removePrefix(\"v\")} ($publishDate)\",\n                style = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight(800)),\n                color = MaterialTheme.colorScheme.primary,\n            )\n        }\n    }\n    Markdown(\n        markdown,\n    )\n}\n\n@Composable\nprivate fun Tag(icon: ImageVector, text: String) {\n    Row(\n        horizontalArrangement = Arrangement.spacedBy(6.dp),\n        verticalAlignment = Alignment.CenterVertically\n    ) {\n        Icon(\n            imageVector = icon,\n            contentDescription = null,\n            modifier = Modifier.size(16.dp),\n            tint = MaterialTheme.colorScheme.outline,\n        )\n        Text(\n            text,\n            style = MaterialTheme.typography.bodyMedium,\n            color = MaterialTheme.colorScheme.outline,\n        )\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/settings/ExpressiveListIcon.kt",
    "content": "package app.revanced.manager.ui.component.settings\n\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.shape.CircleShape\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\n\n@Composable\nfun ExpressiveListIcon(\n    icon: ImageVector,\n    modifier: Modifier = Modifier,\n    containerColor: Color = MaterialTheme.colorScheme.secondaryContainer,\n    iconColor: Color = MaterialTheme.colorScheme.onSecondaryContainer,\n    size: Dp = 42.dp,\n    iconSize: Dp = 24.dp,\n    contentDescription: String? = null,\n) {\n    Surface(\n        modifier = modifier.size(size),\n        shape = CircleShape,\n        color = containerColor\n    ) {\n        Box(\n            modifier = Modifier.fillMaxSize(),\n            contentAlignment = Alignment.Center\n        ) {\n            Icon(\n                imageVector = icon,\n                contentDescription = contentDescription,\n                modifier = Modifier.size(iconSize),\n                tint = iconColor\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/settings/IntegerItem.kt",
    "content": "package app.revanced.manager.ui.component.settings\n\nimport androidx.annotation.StringRes\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Edit\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\nimport app.revanced.manager.domain.manager.base.Preference\nimport app.revanced.manager.ui.component.IntInputDialog\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.launch\n\n@Composable\nfun IntegerItem(\n    modifier: Modifier = Modifier,\n    preference: Preference<Int>,\n    coroutineScope: CoroutineScope = rememberCoroutineScope(),\n    @StringRes headline: Int,\n    @StringRes description: Int,\n    unit: String? = null,\n) {\n    val value by preference.getAsState()\n\n    IntegerItem(\n        modifier = modifier,\n        value = value,\n        onValueChange = { coroutineScope.launch { preference.update(it) } },\n        headline = headline,\n        description = description,\n        unit = unit\n    )\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun IntegerItem(\n    modifier: Modifier = Modifier,\n    value: Int,\n    onValueChange: (Int) -> Unit,\n    @StringRes headline: Int,\n    @StringRes description: Int,\n    unit: String? = null,\n) {\n    var dialogOpen by rememberSaveable {\n        mutableStateOf(false)\n    }\n\n    if (dialogOpen) {\n        IntInputDialog(\n            current = value,\n            unit = unit,\n            name = stringResource(headline)\n        ) { new ->\n            dialogOpen = false\n            new?.let(onValueChange)\n        }\n    }\n\n    SettingsListItem(\n        modifier = modifier,\n        headlineContent = stringResource(headline),\n        supportingContent = stringResource(description),\n        trailingContent = {\n            TooltipIconButton(\n                onClick = { dialogOpen = true },\n                tooltip = stringResource(R.string.edit)\n            ) {\n                Icon(\n                    Icons.Outlined.Edit,\n                    contentDescription = stringResource(R.string.edit)\n                )\n            }\n        },\n        onClick = { dialogOpen = true }\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/settings/SafeguardBooleanItem.kt",
    "content": "package app.revanced.manager.ui.component.settings\n\nimport androidx.annotation.StringRes\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.WarningAmber\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.domain.manager.base.Preference\nimport app.revanced.manager.ui.component.ConfirmDialog\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.launch\n\n@Composable\nfun SafeguardBooleanItem(\n    modifier: Modifier = Modifier,\n    preference: Preference<Boolean>,\n    coroutineScope: CoroutineScope = rememberCoroutineScope(),\n    @StringRes headline: Int,\n    @StringRes description: Int,\n    @StringRes dialogTitle: Int,\n    @StringRes confirmationText: Int,\n    onValueChange: ((Boolean) -> Unit)? = null\n) = SafeguardBooleanItem(\n    modifier = modifier,\n    preference = preference,\n    coroutineScope = coroutineScope,\n    headline = headline,\n    description = stringResource(description),\n    dialogTitle = dialogTitle,\n    confirmationText = confirmationText,\n    onValueChange = onValueChange\n)\n\n@Composable\nfun SafeguardBooleanItem(\n    modifier: Modifier = Modifier,\n    preference: Preference<Boolean>,\n    coroutineScope: CoroutineScope = rememberCoroutineScope(),\n    @StringRes headline: Int,\n    description: String,\n    @StringRes dialogTitle: Int,\n    @StringRes confirmationText: Int,\n    onValueChange: ((Boolean) -> Unit)? = null\n) {\n    val value by preference.getAsState()\n    var showSafeguardWarning by rememberSaveable {\n        mutableStateOf(false)\n    }\n\n    val update = onValueChange ?: { coroutineScope.launch { preference.update(it) } }\n\n    if (showSafeguardWarning) {\n        ConfirmDialog(\n            onDismiss = { showSafeguardWarning = false },\n            onConfirm = {\n                update(!value)\n                showSafeguardWarning = false\n            },\n            title = stringResource(id = dialogTitle),\n            description = stringResource(confirmationText),\n            icon = Icons.Outlined.WarningAmber\n        )\n    }\n\n    BooleanItem(\n        modifier = modifier,\n        value = value,\n        onValueChange = {\n            if (it != preference.default) {\n                showSafeguardWarning = true\n            } else {\n                update(it)\n            }\n        },\n        headline = headline,\n        description = description\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/settings/SettingsListItem.kt",
    "content": "package app.revanced.manager.ui.component.settings\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.expandVertically\nimport androidx.compose.animation.shrinkVertically\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.ExpandLess\nimport androidx.compose.material.icons.filled.ExpandMore\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItemDefaults\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.SegmentedListItem\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.semantics.semantics\nimport androidx.compose.ui.semantics.stateDescription\nimport androidx.compose.ui.unit.dp\nimport androidx.core.view.HapticFeedbackConstantsCompat\nimport app.revanced.manager.util.withHapticFeedback\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun SettingsListItem(\n    headlineContent: String,\n    modifier: Modifier = Modifier,\n    onClick: (() -> Unit)? = null,\n    onLongClick: (() -> Unit)? = null,\n    onLongClickLabel: String? = null,\n    overlineContent: @Composable (() -> Unit)? = null,\n    supportingContent: String? = null,\n    supportingContentColor: Color = Color.Unspecified,\n    leadingContent: @Composable (() -> Unit)? = null,\n    trailingContent: @Composable (() -> Unit)? = null,\n) {\n    val shapes = ListItemDefaults.segmentedShapes(index = 0, count = 1)\n    val colors = ListItemDefaults.colors(\n        containerColor = MaterialTheme.colorScheme.surfaceContainerLow\n    )\n\n    SegmentedListItem(\n        onClick = onClick?.withHapticFeedback(HapticFeedbackConstantsCompat.CLOCK_TICK) ?: { }.withHapticFeedback(HapticFeedbackConstantsCompat.CLOCK_TICK),\n        onLongClick = onLongClick,\n        onLongClickLabel = onLongClickLabel,\n        shapes = shapes,\n        colors = colors,\n        modifier = modifier,\n        overlineContent = overlineContent,\n        leadingContent = leadingContent,\n        trailingContent = trailingContent?.let {\n            {\n                Box(modifier = Modifier.padding(start = 4.dp)) {\n                    trailingContent()\n                }\n            }\n        },\n        supportingContent = supportingContent?.let {\n            {\n                Text(\n                    text = it,\n                    color = supportingContentColor\n                )\n            }\n        },\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        Text(headlineContent)\n    }\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun SettingsListItem(\n    headlineContent: @Composable () -> Unit,\n    modifier: Modifier = Modifier,\n    onClick: (() -> Unit)? = null,\n    onLongClick: (() -> Unit)? = null,\n    onLongClickLabel: String? = null,\n    overlineContent: @Composable (() -> Unit)? = null,\n    supportingContent: String? = null,\n    supportingContentColor: Color = Color.Unspecified,\n    leadingContent: @Composable (() -> Unit)? = null,\n    trailingContent: @Composable (() -> Unit)? = null,\n) {\n    val shapes = ListItemDefaults.segmentedShapes(index = 0, count = 1)\n    val colors = ListItemDefaults.colors(\n        containerColor = MaterialTheme.colorScheme.surfaceContainerLow\n    )\n\n    SegmentedListItem(\n        onClick = onClick?.withHapticFeedback(HapticFeedbackConstantsCompat.CLOCK_TICK) ?: { }.withHapticFeedback(HapticFeedbackConstantsCompat.CLOCK_TICK),\n        onLongClick = onLongClick,\n        onLongClickLabel = onLongClickLabel,\n        shapes = shapes,\n        colors = colors,\n        modifier = modifier,\n        overlineContent = overlineContent,\n        leadingContent = leadingContent,\n        trailingContent = trailingContent,\n        supportingContent = supportingContent?.let {\n            {\n                Text(\n                    text = it,\n                    color = supportingContentColor\n                )\n            }\n        },\n        content = headlineContent\n    )\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun ExpandableSettingsListItem(\n    headlineContent: String,\n    supportingContent: String,\n    expandableContent: @Composable () -> Unit\n) {\n    var expanded by rememberSaveable { mutableStateOf(false) }\n\n    Column(modifier = Modifier.fillMaxWidth()) {\n        SettingsListItem(\n            modifier = Modifier.semantics {\n                stateDescription = if (expanded) \"Expanded\" else \"Collapsed\"\n            },\n            headlineContent = headlineContent,\n            supportingContent = supportingContent,\n            onClick = { expanded = !expanded },\n            trailingContent = {\n                Icon(\n                    imageVector = if (expanded) Icons.Default.ExpandLess else Icons.Default.ExpandMore,\n                    contentDescription = null\n                )\n            }\n        )\n\n        AnimatedVisibility(\n            visible = expanded,\n            enter = expandVertically(MaterialTheme.motionScheme.fastSpatialSpec()),\n            exit = shrinkVertically(MaterialTheme.motionScheme.fastSpatialSpec()),\n        ) {\n            Column(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .padding(top = ListItemDefaults.SegmentedGap),\n                verticalArrangement = Arrangement.spacedBy(ListItemDefaults.SegmentedGap)\n            ) {\n                expandableContent()\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/settings/ThemeSelector.kt",
    "content": "package app.revanced.manager.ui.component.settings\n\nimport androidx.core.view.HapticFeedbackConstantsCompat\nimport androidx.compose.animation.animateColorAsState\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.interaction.MutableInteractionSource\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.shape.CircleShape\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.BrightnessAuto\nimport androidx.compose.material.icons.filled.DarkMode\nimport androidx.compose.material.icons.filled.LightMode\nimport androidx.compose.material.icons.outlined.BrightnessAuto\nimport androidx.compose.material.icons.outlined.DarkMode\nimport androidx.compose.material.icons.outlined.LightMode\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.FilledTonalIconToggleButton\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.IconToggleButtonColors\nimport androidx.compose.material3.IconToggleButtonShapes\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.semantics.Role\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.theme.Theme\nimport app.revanced.manager.util.withHapticFeedback\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun ThemeSelector(\n    currentTheme: Theme,\n    onThemeSelected: (Theme) -> Unit,\n    modifier: Modifier = Modifier\n) {\n    Surface(\n        modifier = modifier.fillMaxWidth(),\n        shape = RoundedCornerShape(4.dp),\n        color = animateColorAsState(MaterialTheme.colorScheme.surfaceContainerLow, MaterialTheme.motionScheme.defaultEffectsSpec(), \"surfaceContainerLow\").value,\n    ) {\n        Row(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(vertical = 24.dp),\n            horizontalArrangement = Arrangement.SpaceEvenly,\n            verticalAlignment = Alignment.CenterVertically\n        ) {\n            ThemeOption(\n                icon = Icons.Outlined.BrightnessAuto,\n                selectedIcon = Icons.Filled.BrightnessAuto,\n                label = stringResource(R.string.system),\n                isSelected = currentTheme == Theme.SYSTEM,\n                onClick = { onThemeSelected(Theme.SYSTEM) },\n                modifier = Modifier.weight(1f)\n            )\n            ThemeOption(\n                icon = Icons.Outlined.LightMode,\n                selectedIcon = Icons.Filled.LightMode,\n                label = stringResource(R.string.light),\n                isSelected = currentTheme == Theme.LIGHT,\n                onClick = { onThemeSelected(Theme.LIGHT) },\n                modifier = Modifier.weight(1f)\n            )\n            ThemeOption(\n                icon = Icons.Outlined.DarkMode,\n                selectedIcon = Icons.Filled.DarkMode,\n                label = stringResource(R.string.dark),\n                isSelected = currentTheme == Theme.DARK,\n                onClick = { onThemeSelected(Theme.DARK) },\n                modifier = Modifier.weight(1f)\n            )\n        }\n    }\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nprivate fun ThemeOption(\n    icon: ImageVector,\n    selectedIcon: ImageVector,\n    label: String,\n    isSelected: Boolean,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier\n) {\n    val onClickHaptic = onClick.withHapticFeedback(HapticFeedbackConstantsCompat.VIRTUAL_KEY)\n    Column(\n        horizontalAlignment = Alignment.CenterHorizontally,\n        verticalArrangement = Arrangement.spacedBy(8.dp),\n        modifier = modifier\n            .clickable(\n                onClick = onClickHaptic,\n                role = Role.Button,\n                interactionSource = remember { MutableInteractionSource() },\n                indication = null\n            )\n            .padding(vertical = 4.dp)\n    ) {\n        FilledTonalIconToggleButton(\n            checked = isSelected,\n            onCheckedChange = { onClickHaptic() },\n            modifier = Modifier.size(56.dp),\n            shapes = IconToggleButtonShapes(\n                shape = CircleShape,\n                pressedShape = RoundedCornerShape(16.dp),\n                checkedShape = RoundedCornerShape(16.dp)\n            ),\n            colors = IconToggleButtonColors(\n                containerColor = MaterialTheme.colorScheme.surfaceContainerHighest,\n                contentColor = MaterialTheme.colorScheme.onSurfaceVariant,\n                disabledContainerColor = MaterialTheme.colorScheme.surfaceContainerHighest,\n                disabledContentColor = MaterialTheme.colorScheme.onSurfaceVariant,\n                checkedContainerColor = MaterialTheme.colorScheme.secondaryContainer,\n                checkedContentColor = MaterialTheme.colorScheme.onSecondaryContainer\n            )\n        ) {\n            Icon(\n                imageVector = if (isSelected) selectedIcon else icon,\n                contentDescription = label,\n                modifier = Modifier.size(28.dp)\n            )\n        }\n        Text(\n            text = label,\n            style = MaterialTheme.typography.labelMedium,\n            color = if (isSelected) {\n                MaterialTheme.colorScheme.onSurface\n            } else {\n                MaterialTheme.colorScheme.onSurfaceVariant\n            }\n        )\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/component/sources/ImportSourceDialog.kt",
    "content": "package app.revanced.manager.ui.component.sources\n\nimport android.net.Uri\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Topic\nimport androidx.compose.material3.*\nimport androidx.compose.runtime.*\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.semantics.Role\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.AlertDialogExtended\nimport app.revanced.manager.ui.component.TextHorizontalPadding\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.haptics.HapticCheckbox\nimport app.revanced.manager.ui.component.haptics.HapticRadioButton\nimport app.revanced.manager.util.APK_MIMETYPE\nimport app.revanced.manager.util.BIN_MIMETYPE\nimport app.revanced.manager.util.transparentListItemColors\n\nprivate enum class SourceType {\n    Local,\n    Remote\n}\n\nenum class ImportSourceDialogStrings(\n    val title: Int,\n    val type_description: Int,\n    val type_remote_description: Int,\n    val type_local_description: Int,\n    val import_local: Int,\n    val import_remote: Int\n) {\n    PATCHES(\n        R.string.add_patches,\n        R.string.select_patches_type_dialog_description,\n        R.string.remote_patches_description,\n        R.string.local_patches_description,\n        R.string.patches,\n        R.string.patches_url\n    ),\n    DOWNLOADERS(\n        R.string.downloader_add,\n        R.string.select_downloader_type_dialog_description,\n        R.string.remote_downloaders_description,\n        R.string.local_downloaders_description,\n        R.string.downloaders,\n        R.string.downloader_url\n    ),\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun ImportSourceDialog(\n    strings: ImportSourceDialogStrings,\n    onDismiss: () -> Unit,\n    onRemoteSubmit: (String, Boolean) -> Unit,\n    onLocalSubmit: (Uri) -> Unit\n) {\n    var currentStep by rememberSaveable { mutableIntStateOf(0) }\n    var sourceType by rememberSaveable { mutableStateOf(SourceType.Remote) }\n    var local by rememberSaveable { mutableStateOf<Uri?>(null) }\n    var remoteUrl by rememberSaveable { mutableStateOf(\"\") }\n    var autoUpdate by rememberSaveable { mutableStateOf(true) }\n\n    val fileActivityLauncher =\n        rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { uri ->\n            uri?.let { local = it }\n        }\n\n    fun launchFileActivity() {\n        when(strings) {\n            ImportSourceDialogStrings.PATCHES -> fileActivityLauncher.launch(BIN_MIMETYPE)\n            ImportSourceDialogStrings.DOWNLOADERS -> fileActivityLauncher.launch(APK_MIMETYPE)\n        }\n    }\n\n    val steps = listOf<@Composable () -> Unit>(\n        {\n            SelectSourceTypeStep(strings, sourceType) { selectedType ->\n                sourceType = selectedType\n            }\n        },\n        {\n            ImportSourceStep(\n                strings,\n                sourceType,\n                local,\n                remoteUrl,\n                autoUpdate,\n                ::launchFileActivity,\n                { remoteUrl = it },\n                { autoUpdate = it }\n            )\n        }\n    )\n\n    val inputsAreValid by remember {\n        derivedStateOf {\n            (sourceType == SourceType.Local && local != null) ||\n                    (sourceType == SourceType.Remote && remoteUrl.isNotEmpty())\n        }\n    }\n\n    AlertDialogExtended(\n        onDismissRequest = onDismiss,\n        title = {\n            Text(stringResource(if (currentStep == 0) R.string.select else strings.title))\n        },\n        text = {\n            steps[currentStep]()\n        },\n        confirmButton = {\n            if (currentStep == steps.lastIndex) {\n                TextButton(\n                    enabled = inputsAreValid,\n                    onClick = {\n                        when (sourceType) {\n                            SourceType.Local -> local?.let(onLocalSubmit)\n                            SourceType.Remote -> onRemoteSubmit(remoteUrl, autoUpdate)\n                        }\n                    },\n                    shapes = ButtonDefaults.shapes()\n                ) {\n                    Text(stringResource(R.string.add))\n                }\n            } else {\n                TextButton(onClick = { currentStep++ }, shapes = ButtonDefaults.shapes()) {\n                    Text(stringResource(R.string.next))\n                }\n            }\n        },\n        dismissButton = {\n            if (currentStep > 0) {\n                TextButton(onClick = { currentStep-- }, shapes = ButtonDefaults.shapes()) {\n                    Text(stringResource(R.string.back))\n                }\n            } else {\n                TextButton(onClick = onDismiss, shapes = ButtonDefaults.shapes()) {\n                    Text(stringResource(R.string.cancel))\n                }\n            }\n        },\n        textHorizontalPadding = PaddingValues(0.dp)\n    )\n}\n\n@Composable\nprivate fun SelectSourceTypeStep(\n    strings: ImportSourceDialogStrings,\n    sourceType: SourceType,\n    onSourceTypeSelected: (SourceType) -> Unit\n) {\n    Column(\n        modifier = Modifier.verticalScroll(rememberScrollState()),\n        verticalArrangement = Arrangement.spacedBy(24.dp)\n    ) {\n        Text(\n            modifier = Modifier.padding(horizontal = 24.dp),\n            text = stringResource(strings.type_description)\n        )\n        Column {\n            ListItem(\n                modifier = Modifier.clickable(\n                    role = Role.RadioButton,\n                    onClick = { onSourceTypeSelected(SourceType.Remote) }\n                ),\n                headlineContent = { Text(stringResource(R.string.enter_url)) },\n                overlineContent = { Text(stringResource(R.string.recommended)) },\n                supportingContent = { Text(stringResource(strings.type_remote_description)) },\n                leadingContent = {\n                    HapticRadioButton(\n                        selected = sourceType == SourceType.Remote,\n                        onClick = null\n                    )\n                },\n                colors = transparentListItemColors\n            )\n            HorizontalDivider(modifier = Modifier.padding(horizontal = 16.dp))\n            ListItem(\n                modifier = Modifier.clickable(\n                    role = Role.RadioButton,\n                    onClick = { onSourceTypeSelected(SourceType.Local) }\n                ),\n                headlineContent = { Text(stringResource(R.string.select_from_storage)) },\n                supportingContent = { Text(stringResource(strings.type_local_description)) },\n                overlineContent = { },\n                leadingContent = {\n                    HapticRadioButton(\n                        selected = sourceType == SourceType.Local,\n                        onClick = null\n                    )\n                },\n                colors = transparentListItemColors\n            )\n        }\n    }\n}\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nprivate fun ImportSourceStep(\n    strings: ImportSourceDialogStrings,\n    sourceType: SourceType,\n    local: Uri?,\n    remoteUrl: String,\n    autoUpdate: Boolean,\n    launchFileActivity: () -> Unit,\n    onRemoteUrlChange: (String) -> Unit,\n    onAutoUpdateChange: (Boolean) -> Unit\n) {\n    Column(modifier = Modifier.verticalScroll(rememberScrollState())) {\n        when (sourceType) {\n            SourceType.Local -> {\n                Column(\n                    modifier = Modifier.padding(horizontal = 8.dp)\n                ) {\n                    ListItem(\n                        headlineContent = {\n                            Text(stringResource(strings.import_local))\n                        },\n                        supportingContent = { Text(stringResource(if (local != null) R.string.file_field_set else R.string.file_field_not_set)) },\n                        trailingContent = {\n                            TooltipIconButton(\n                                onClick = launchFileActivity,\n                                tooltip = stringResource(strings.import_local)\n                            ) {\n                                Icon(imageVector = Icons.Default.Topic, contentDescription = null)\n                            }\n                        },\n                        modifier = Modifier.clickable { launchFileActivity() },\n                        colors = transparentListItemColors\n                    )\n                }\n            }\n\n            SourceType.Remote -> {\n                Column(\n                    modifier = Modifier.padding(TextHorizontalPadding)\n                ) {\n                    OutlinedTextField(\n                        value = remoteUrl,\n                        onValueChange = onRemoteUrlChange,\n                        label = { Text(stringResource(strings.import_remote)) }\n                    )\n                }\n                Column(\n                    modifier = Modifier.padding(horizontal = 8.dp, vertical = 5.dp)\n                ) {\n                    ListItem(\n                        modifier = Modifier.clickable(\n                            role = Role.Checkbox,\n                            onClick = { onAutoUpdateChange(!autoUpdate) }\n                        ),\n                        headlineContent = { Text(stringResource(R.string.auto_update)) },\n                        leadingContent = {\n                            CompositionLocalProvider(LocalMinimumInteractiveComponentSize provides Dp.Unspecified) {\n                                HapticCheckbox(\n                                    checked = autoUpdate,\n                                    onCheckedChange = {\n                                        onAutoUpdateChange(!autoUpdate)\n                                    }\n                                )\n                            }\n                        },\n                        colors = transparentListItemColors\n                    )\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/model/InstallerModel.kt",
    "content": "package app.revanced.manager.ui.model\n\ninterface InstallerModel {\n    fun reinstall()\n    fun install()\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/model/PatcherStep.kt",
    "content": "package app.revanced.manager.ui.model\n\nimport android.os.Parcelable\nimport androidx.annotation.StringRes\nimport app.revanced.manager.R\nimport app.revanced.manager.patcher.StepId\nimport kotlinx.parcelize.Parcelize\n\nenum class StepCategory(@param:StringRes val displayName: Int) {\n    PREPARING(R.string.patcher_step_group_preparing),\n    PATCHING(R.string.patcher_step_group_patching),\n    SAVING(R.string.patcher_step_group_saving)\n}\n\nenum class State {\n    WAITING, RUNNING, FAILED, COMPLETED\n}\n\n@Parcelize\ndata class Step(\n    val id: StepId,\n    val title: String,\n    val category: StepCategory,\n    val state: State = State.WAITING,\n    val message: String? = null,\n    val progress: Pair<Long, Long?>? = null,\n    val hide: Boolean = false,\n) : Parcelable\n\n\nfun Step.withState(\n    state: State = this.state,\n    message: String? = this.message,\n    progress: Pair<Long, Long?>? = this.progress\n) = copy(state = state, message = message, progress = progress)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/model/SelectedApp.kt",
    "content": "package app.revanced.manager.ui.model\n\nimport android.os.Parcelable\nimport app.revanced.manager.network.downloader.ParceledDownloaderData\nimport kotlinx.parcelize.Parcelize\nimport java.io.File\n\nsealed interface SelectedApp : Parcelable {\n    val packageName: String\n    val version: String?\n\n    @Parcelize\n    data class Download(\n        override val packageName: String,\n        override val version: String?,\n        val data: ParceledDownloaderData\n    ) : SelectedApp\n\n    @Parcelize\n    data class Search(override val packageName: String, override val version: String?) : SelectedApp\n\n    @Parcelize\n    data class Local(\n        override val packageName: String,\n        override val version: String,\n        val file: File,\n        val temporary: Boolean\n    ) : SelectedApp\n\n    @Parcelize\n    data class Installed(\n        override val packageName: String,\n        override val version: String\n    ) : SelectedApp\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/model/navigation/Nav.kt",
    "content": "package app.revanced.manager.ui.model.navigation\n\nimport android.os.Parcelable\nimport app.revanced.manager.network.dto.ReVancedAnnouncement\nimport app.revanced.manager.ui.model.SelectedApp\nimport app.revanced.manager.util.Options\nimport app.revanced.manager.util.PatchSelection\nimport kotlinx.parcelize.Parcelize\nimport kotlinx.parcelize.RawValue\nimport kotlinx.serialization.Serializable\n\ninterface ComplexParameter<T : Parcelable>\n\n@Serializable\nobject Onboarding\n\n@Serializable\nobject Dashboard\n\n@Serializable\nobject AppSelector\n\n@Serializable\ndata class InstalledApplicationInfo(val packageName: String)\n\n@Serializable\ndata class BundleInformation(val uid: Int)\n\n@Serializable\ndata class Update(val downloadOnScreenEntry: Boolean = false)\n\n@Serializable\ndata object Announcements\n\n@Serializable\ndata object Announcement : ComplexParameter<ReVancedAnnouncement>\n\n@Serializable\ndata object SelectedApplicationInfo : ComplexParameter<SelectedApplicationInfo.ViewModelParams> {\n    @Parcelize\n    data class ViewModelParams(\n        val app: SelectedApp,\n        val patches: PatchSelection? = null\n    ) : Parcelable\n\n    @Serializable\n    object Main\n\n    @Serializable\n    data object PatchesSelector : ComplexParameter<PatchesSelector.ViewModelParams> {\n        @Parcelize\n        data class ViewModelParams(\n            val app: SelectedApp,\n            val currentSelection: PatchSelection?,\n            val options: @RawValue Options,\n            val readOnly: Boolean = false,\n            val browseAllBundles: Boolean = false,\n        ) : Parcelable\n    }\n\n    @Serializable\n    data object RequiredOptions : ComplexParameter<PatchesSelector.ViewModelParams>\n}\n\n@Serializable\ndata object Patcher : ComplexParameter<Patcher.ViewModelParams> {\n    @Parcelize\n    data class ViewModelParams(\n        val selectedApp: SelectedApp,\n        val selectedPatches: PatchSelection,\n        val options: @RawValue Options\n    ) : Parcelable\n}\n\n@Serializable\nobject Settings {\n    sealed interface Destination\n\n    @Serializable\n    data object Main : Destination\n\n    @Serializable\n    data object General : Destination\n\n    @Serializable\n    data object Advanced : Destination\n\n    @Serializable\n    data object Updates : Destination\n\n    @Serializable\n    data object Downloads : Destination\n\n    @Serializable\n    data class DownloadersInfo(val uid: Int) : Destination\n\n    @Serializable\n    data object ImportExport : Destination\n\n    @Serializable\n    data object About : Destination\n\n    @Serializable\n    data object Changelogs : Destination\n\n    @Serializable\n    data object Contributors : Destination\n\n    @Serializable\n    data object Licenses : Destination\n\n    @Serializable\n    data object Developer : Destination\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/AnnouncementScreen.kt",
    "content": "package app.revanced.manager.ui.screen\n\nimport android.annotation.SuppressLint\nimport android.view.MotionEvent\nimport android.webkit.WebView\nimport android.widget.FrameLayout\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.TwoRowsTopAppBar\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.viewinterop.AndroidView\nimport androidx.core.view.children\nimport app.revanced.manager.R\nimport app.revanced.manager.network.dto.ReVancedAnnouncement\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.util.relativeTime\nimport kotlinx.datetime.TimeZone\nimport kotlinx.datetime.toLocalDateTime\nimport org.intellij.lang.annotations.Language\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun AnnouncementScreen(\n    onBackClick: () -> Unit,\n    announcement: ReVancedAnnouncement\n) {\n    val scrollState = rememberScrollState()\n    val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(\n        canScroll = {\n            scrollState.canScrollBackward || scrollState.canScrollForward\n        }\n    )\n    val textColor = MaterialTheme.colorScheme.onSurface\n    val linkColor = MaterialTheme.colorScheme.primary\n\n    Scaffold(\n        topBar = {\n            TwoRowsTopAppBar(\n                title = { expanded ->\n                    Text(\n                        text = announcement.title,\n                        style = if (expanded) MaterialTheme.typography.headlineSmall else MaterialTheme.typography.titleMedium\n                    )\n                },\n                subtitle = {\n                    val createDate = announcement.createdAt.toLocalDateTime(TimeZone.UTC).relativeTime(LocalContext.current)\n                    Text(\"$createDate · ${announcement.author}\")\n                },\n                navigationIcon = {\n                    TooltipIconButton(\n                        onClick = onBackClick,\n                        tooltip = stringResource(R.string.back)\n                    ) {\n                        Icon(\n                            Icons.AutoMirrored.Filled.ArrowBack,\n                            contentDescription = stringResource(R.string.back)\n                        )\n                    }\n                },\n                scrollBehavior = scrollBehavior\n            )\n        }\n    ) { paddingValues ->\n        Column(\n            modifier = Modifier\n                .fillMaxSize()\n                .nestedScroll(scrollBehavior.nestedScrollConnection)\n                .verticalScroll(scrollState)\n                .padding(paddingValues)\n        ) {\n            AnnouncementTag(\n                tags = announcement.tags,\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .padding(horizontal = 10.dp, vertical = 8.dp)\n            )\n            AndroidView(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .padding(horizontal = 10.dp),\n                factory = {\n                    val webView = WebView(it).apply {\n                        setBackgroundColor(0)\n                        isVerticalScrollBarEnabled = false\n                        isHorizontalScrollBarEnabled = false\n                        isLongClickable = false\n                        setOnLongClickListener { true }\n                        isHapticFeedbackEnabled = false\n\n                        // Disable WebView's internal scrolling\n                        @SuppressLint(\"ClickableViewAccessibility\")\n                        setOnTouchListener { _, event ->\n                            event.action == MotionEvent.ACTION_MOVE\n                        }\n                    }\n                    FrameLayout(it).apply {\n                        addView(webView)\n                    }\n                },\n                update = {\n                    val webView = it.children.first() as WebView\n                    @Language(\"HTML\")\n                    val style = \"\"\"\n                    <html>\n                      <head>\n                        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n                        <style>\n                          body {\n                            color: ${textColor.toCss()};\n                          }\n                          a {\n                            color: ${linkColor.toCss()};\n                          }\n                        </style>\n                      </head>\n                      <body>\n                        ${announcement.content}\n                      </body>\n                    </html>\n                \"\"\".trimIndent()\n                    webView.loadData(style, \"text/html\", \"UTF-8\")\n                },\n                onRelease = {\n                    val webView = it.children.first() as WebView\n                    webView.destroy()\n                }\n            )\n        }\n    }\n}\n\nprivate fun Color.toCss(): String {\n    return \"rgba(${red * 255f}, ${green * 255f}, ${blue * 255f}, $alpha)\"\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/AnnouncementsScreen.kt",
    "content": "package app.revanced.manager.ui.screen\n\nimport androidx.compose.animation.core.animateFloatAsState\nimport androidx.compose.foundation.MarqueeSpacing\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.basicMarquee\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.FlowRow\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.shape.CircleShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight\nimport androidx.compose.material.icons.filled.ExpandMore\nimport androidx.compose.material.icons.filled.FilterAlt\nimport androidx.compose.material.icons.outlined.History\nimport androidx.compose.material.icons.outlined.Inventory2\nimport androidx.compose.material3.Badge\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.FilterChip\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.LocalContentColor\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.ModalBottomSheet\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.draw.rotate\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.SpanStyle\nimport androidx.compose.ui.text.buildAnnotatedString\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.withStyle\nimport androidx.compose.ui.unit.dp\nimport androidx.core.view.HapticFeedbackConstantsCompat\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport app.revanced.manager.R\nimport app.revanced.manager.network.dto.ReVancedAnnouncement\nimport app.revanced.manager.ui.component.AppTopBar\nimport app.revanced.manager.ui.component.LazyColumnWithScrollbar\nimport app.revanced.manager.ui.component.ListSection\nimport app.revanced.manager.ui.component.LoadingIndicator\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.settings.SettingsListItem\nimport app.revanced.manager.ui.viewmodel.AnnouncementsViewModel\nimport app.revanced.manager.util.relativeTime\nimport app.revanced.manager.util.withHapticFeedback\nimport kotlinx.datetime.TimeZone\nimport kotlinx.datetime.toLocalDateTime\nimport org.koin.androidx.compose.koinViewModel\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun AnnouncementsScreen(\n    onBackClick: () -> Unit,\n    onAnnouncementClick: (ReVancedAnnouncement) -> Unit,\n    vm: AnnouncementsViewModel = koinViewModel(),\n) {\n    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()\n    var showFilterSheet by rememberSaveable { mutableStateOf(false) }\n    var archivedExpanded by rememberSaveable { mutableStateOf(false) }\n    val tags by vm.tags.collectAsStateWithLifecycle(null)\n    val selectedTags by vm.selectedTags.getAsState()\n    val announcementSections by vm.announcementSections.collectAsStateWithLifecycle(null)\n\n    if (showFilterSheet) {\n        FilterBottomSheet(\n            onDismissRequest = { showFilterSheet = false },\n            tags = tags.orEmpty(),\n            selectedTags = selectedTags,\n            onReset = vm::resetTagSelection,\n            changeSelection = vm::changeTagSelection\n        )\n    }\n\n    Scaffold(\n        topBar = {\n            AppTopBar(\n                title = { Text(stringResource(R.string.announcements)) },\n                onBackClick = onBackClick,\n                actions = {\n                    if (tags != null) {\n                        TooltipIconButton(\n                            onClick = { showFilterSheet = true },\n                            tooltip = stringResource(R.string.announcements_filter_tag)\n                        ) {\n                            Icon(\n                                imageVector = Icons.Filled.FilterAlt,\n                                contentDescription = stringResource(R.string.announcements_filter_tag)\n                            )\n                        }\n                    }\n                },\n                scrollBehavior = scrollBehavior\n            )\n        }\n    ) { paddingValues ->\n        val readAnnouncements by vm.readAnnouncements.getAsState()\n        LazyColumnWithScrollbar(\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(paddingValues)\n                .nestedScroll(scrollBehavior.nestedScrollConnection),\n            verticalArrangement = if (announcementSections?.isEmpty != false) {\n                Arrangement.Center\n            } else {\n                Arrangement.spacedBy(8.dp)\n            },\n            horizontalAlignment = Alignment.CenterHorizontally,\n        ) {\n            announcementSections?.let { sections ->\n                if (sections.isEmpty) {\n                    item {\n                        Text(\n                            text = stringResource(id = R.string.no_announcements_found),\n                            style = MaterialTheme.typography.titleLarge\n                        )\n                    }\n                } else {\n                    val activeAnnouncements = sections.activeAnnouncements\n                    val archivedAnnouncements = sections.archivedAnnouncements\n\n                    if (activeAnnouncements.isNotEmpty()) {\n                        item {\n                            ListSection {\n                                activeAnnouncements.forEach { announcement ->\n                                    AnnouncementListItem(\n                                        onClick = {\n                                            vm.markAnnouncementRead(announcement.id)\n                                            onAnnouncementClick(announcement)\n                                        },\n                                        title = announcement.title,\n                                        date = announcement.createdAt.toLocalDateTime(TimeZone.UTC)\n                                            .relativeTime(LocalContext.current),\n                                        author = announcement.author,\n                                        tags = announcement.tags,\n                                        unread = announcement.id !in readAnnouncements,\n                                        archived = false\n                                    )\n                                }\n                            }\n                        }\n                    }\n\n                    if (archivedAnnouncements.isNotEmpty()) {\n                        item {\n                            ArchivedAnnouncementsHeader(\n                                expanded = archivedExpanded,\n                                onToggle = { archivedExpanded = !archivedExpanded },\n                                modifier = Modifier\n                                    .fillMaxWidth()\n                            )\n                        }\n                    }\n\n                    if (archivedAnnouncements.isNotEmpty() && archivedExpanded) {\n                        item {\n                            ListSection {\n                                archivedAnnouncements.forEach { announcement ->\n                                    AnnouncementListItem(\n                                        onClick = {\n                                            vm.markAnnouncementRead(announcement.id)\n                                            onAnnouncementClick(announcement)\n                                        },\n                                        title = announcement.title,\n                                        date = announcement.createdAt.toLocalDateTime(TimeZone.UTC)\n                                            .relativeTime(LocalContext.current),\n                                        author = announcement.author,\n                                        tags = announcement.tags,\n                                        unread = announcement.id !in readAnnouncements,\n                                        archived = true\n                                    )\n                                }\n                            }\n                        }\n                    }\n                }\n            } ?: item {\n                Row(\n                    modifier = Modifier.fillMaxWidth(),\n                    horizontalArrangement = Arrangement.Center\n                ) {\n                    LoadingIndicator()\n                }\n            }\n        }\n    }\n}\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nprivate fun FilterBottomSheet(\n    onDismissRequest: () -> Unit,\n    tags: Set<String>,\n    selectedTags: Set<String>,\n    onReset: () -> Unit,\n    changeSelection: (String) -> Unit\n) {\n    ModalBottomSheet(onDismissRequest = onDismissRequest) {\n        Column(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(bottom = 16.dp),\n            verticalArrangement = Arrangement.spacedBy(16.dp)\n        ) {\n            Text(\n                text = stringResource(R.string.announcements_filter_tag),\n                style = MaterialTheme.typography.titleLarge,\n                color = MaterialTheme.colorScheme.onSurface,\n                modifier = Modifier.padding(horizontal = 16.dp)\n            )\n            FlowRow(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .padding(horizontal = 16.dp),\n                horizontalArrangement = Arrangement.spacedBy(8.dp)\n            ) {\n                tags.forEach { tag ->\n                    FilterChip(\n                        selected = tag in selectedTags,\n                        onClick = {\n                            changeSelection(tag)\n                        }.withHapticFeedback(HapticFeedbackConstantsCompat.CONFIRM),\n                        label = { Text(tag) }\n                    )\n                }\n            }\n\n            TextButton(\n                modifier = Modifier\n                    .align(Alignment.End)\n                    .padding(horizontal = 16.dp),\n                onClick = onReset,\n                shapes = ButtonDefaults.shapes()\n            ) {\n                Text(stringResource(R.string.reset))\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ArchivedAnnouncementsHeader(\n    expanded: Boolean,\n    onToggle: () -> Unit,\n    modifier: Modifier = Modifier\n) {\n    val rotation by animateFloatAsState(\n        targetValue = if (expanded) 0f else 180f,\n        label = \"archivedChevronRotation\"\n    )\n    Row(\n        modifier = modifier\n            .padding(horizontal = 8.dp)\n            .clip(MaterialTheme.shapes.small)\n            .clickable(onClick = onToggle)\n            .padding(16.dp),\n        verticalAlignment = Alignment.CenterVertically\n    ) {\n        Icon(\n            imageVector = Icons.Outlined.History,\n            contentDescription = null,\n            modifier = Modifier\n                .size(24.dp)\n                .padding(end = 8.dp)\n        )\n        Text(\n            text = stringResource(R.string.announcements_show_archived),\n            style = MaterialTheme.typography.titleMedium,\n            modifier = Modifier.weight(1f)\n        )\n        Icon(\n            imageVector = Icons.Default.ExpandMore,\n            contentDescription = if (expanded) stringResource(R.string.collapse_content) else stringResource(\n                R.string.expand_content\n            ),\n            modifier = Modifier.rotate(rotation)\n        )\n    }\n}\n\n@Composable\nprivate fun AnnouncementListItem(\n    onClick: () -> Unit,\n    title: String,\n    date: String,\n    author: String,\n    tags: List<String>,\n    unread: Boolean,\n    archived: Boolean\n) {\n    SettingsListItem(\n        onClick = onClick,\n        headlineContent = {\n            Column(verticalArrangement = Arrangement.spacedBy(4.dp)) {\n                Text(\n                    text = title,\n                    modifier = Modifier.basicMarquee(\n                        iterations = Int.MAX_VALUE,\n                        repeatDelayMillis = 1500,\n                        initialDelayMillis = 2500,\n                        spacing = MarqueeSpacing.fractionOfContainer(1f / 5f),\n                        velocity = 55.dp,\n                    ),\n                    style = MaterialTheme.typography.titleSmall,\n                    fontWeight = if (unread) FontWeight.Bold else null,\n                    maxLines = 1\n                )\n                Row(\n                    verticalAlignment = Alignment.CenterVertically,\n                    horizontalArrangement = Arrangement.spacedBy(4.dp)\n                ) {\n                    val dot = \"\\u2022\"          // •\n                    val emSpace = \"\\u2002\"      // en space, roughly half character width\n                    val separator = \"$emSpace$dot$emSpace\"\n                    Text(\"$date$separator$author\",\n                        style = MaterialTheme.typography.labelSmall.copy(\n                            fontWeight = if (unread) FontWeight.Bold else FontWeight.Normal\n                        )\n                    )\n                    if (unread) {\n                        Badge(modifier = Modifier.size(6.dp))\n                    }\n                }\n                AnnouncementTag(\n                    tags = tags,\n                    modifier = Modifier.fillMaxWidth()\n                )\n            }\n        },\n    )\n}\n\n//private fun Color.toCss(): String {\n//    return \"rgba(${red * 255f}, ${green * 255f}, ${blue * 255f}, $alpha)\"\n//}\n\n@Composable\nfun AnnouncementTag(\n    tags: List<String>,\n    modifier: Modifier = Modifier\n) {\n    if (tags.isEmpty()) return\n\n    FlowRow(\n        modifier = modifier,\n        horizontalArrangement = Arrangement.spacedBy(4.dp),\n        verticalArrangement = Arrangement.spacedBy(4.dp)\n    ) {\n        tags.forEach { tag ->\n            Surface(\n                shape = MaterialTheme.shapes.large,\n                color = MaterialTheme.colorScheme.surface\n            ) {\n                Text(\n                    text = tag,\n                    style = MaterialTheme.typography.labelMedium,\n                    color = MaterialTheme.colorScheme.onSurfaceVariant,\n                    modifier = Modifier.padding(horizontal = 6.dp, vertical = 2.dp)\n                )\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/AppSelectorScreen.kt",
    "content": "package app.revanced.manager.ui.screen\n\nimport android.content.ActivityNotFoundException\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Search\nimport androidx.compose.material.icons.filled.Storage\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItem\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.rememberTopAppBarState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.collectAsState\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.res.pluralStringResource\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.AppIcon\nimport app.revanced.manager.ui.component.AppLabel\nimport app.revanced.manager.ui.component.AppTopBar\nimport app.revanced.manager.ui.component.LazyColumnWithScrollbar\nimport app.revanced.manager.ui.component.LoadingIndicator\nimport app.revanced.manager.ui.component.NonSuggestedVersionDialog\nimport app.revanced.manager.ui.component.SearchView\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.model.SelectedApp\nimport app.revanced.manager.ui.viewmodel.AppSelectorViewModel\nimport app.revanced.manager.util.APK_MIMETYPE\nimport app.revanced.manager.util.EventEffect\nimport app.revanced.manager.util.toast\nimport app.revanced.manager.util.transparentListItemColors\nimport org.koin.androidx.compose.koinViewModel\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun AppSelectorScreen(\n    onSelect: (String) -> Unit,\n    onStorageSelect: (SelectedApp.Local) -> Unit,\n    onBackClick: () -> Unit,\n    vm: AppSelectorViewModel = koinViewModel()\n) {\n    val context = LocalContext.current\n    EventEffect(flow = vm.storageSelectionFlow) {\n        onStorageSelect(it)\n    }\n\n    val pickApkLauncher =\n        rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { uri ->\n            uri?.let(vm::handleStorageResult)\n        }\n\n    val suggestedVersions by vm.suggestedAppVersions.collectAsStateWithLifecycle()\n\n    var search by rememberSaveable { mutableStateOf(false) }\n    val appList by vm.apps.collectAsStateWithLifecycle()\n    val appsListFiltered by vm.filteredApps.collectAsStateWithLifecycle()\n\n    vm.nonSuggestedVersionDialogSubject?.let {\n        NonSuggestedVersionDialog(\n            suggestedVersion = suggestedVersions[it.packageName].orEmpty(),\n            onDismiss = vm::dismissNonSuggestedVersionDialog\n        )\n    }\n\n    if (search) {\n        val filterText by vm.filterText.collectAsState()\n\n        SearchView(\n            query = filterText,\n            onQueryChange = vm::setFilterText,\n            onActiveChange = { search = it },\n            placeholder = { Text(stringResource(R.string.search_apps)) }\n        ) {\n            val appsFiltered = appsListFiltered\n            if (!appsFiltered.isNullOrEmpty() && filterText.isNotEmpty()) {\n                LazyColumnWithScrollbar(modifier = Modifier.fillMaxSize()) {\n                    items(\n                        items = appsFiltered,\n                        key = { it.packageName }\n                    ) { app ->\n                        ListItem(\n                            modifier = Modifier.clickable {\n                                onSelect(app.packageName)\n                            },\n                            leadingContent = {\n                                AppIcon(\n                                    packageInfo = app.packageInfo,\n                                    contentDescription = null,\n                                    modifier = Modifier.size(36.dp)\n                                )\n                            },\n                            headlineContent = { AppLabel(app.packageInfo) },\n                            supportingContent = { Text(app.packageName) },\n                            trailingContent = app.patches?.let {\n                                {\n                                    Text(\n                                        pluralStringResource(\n                                            R.plurals.patch_count,\n                                            it,\n                                            it\n                                        )\n                                    )\n                                }\n                            },\n                            colors = transparentListItemColors\n                        )\n                    }\n                }\n            } else {\n                Column(\n                    modifier = Modifier.fillMaxSize(),\n                    verticalArrangement = Arrangement.Center,\n                    horizontalAlignment = Alignment.CenterHorizontally\n                ) {\n                    Icon(\n                        imageVector = Icons.Filled.Search,\n                        contentDescription = stringResource(R.string.search),\n                        modifier = Modifier.size(64.dp),\n                        tint = MaterialTheme.colorScheme.onSurfaceVariant\n                    )\n\n                    Text(\n                        text = stringResource(R.string.type_anything),\n                        style = MaterialTheme.typography.bodyLarge,\n                        color = MaterialTheme.colorScheme.onSurfaceVariant\n                    )\n                }\n            }\n        }\n    }\n\n    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())\n\n    Scaffold(\n        topBar = {\n            AppTopBar(\n                title = stringResource(R.string.select_app),\n                scrollBehavior = scrollBehavior,\n                onBackClick = onBackClick,\n                actions = {\n                    TooltipIconButton(\n                        onClick = { search = true },\n                        tooltip = stringResource(R.string.search)\n                    ) {\n                        Icon(Icons.Filled.Search, stringResource(R.string.search))\n                    }\n                }\n            )\n        },\n        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),\n    ) { paddingValues ->\n        LazyColumnWithScrollbar(\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(paddingValues),\n            horizontalAlignment = Alignment.CenterHorizontally\n        ) {\n            item {\n                ListItem(\n                    modifier = Modifier.clickable {\n                        try {\n                            pickApkLauncher.launch(APK_MIMETYPE)\n                        } catch (_: ActivityNotFoundException) {\n                            context.toast(R.string.no_file_picker_found)\n                        }\n                    },\n                    leadingContent = {\n                        Box(Modifier.size(36.dp), Alignment.Center) {\n                            Icon(\n                                Icons.Default.Storage,\n                                null,\n                                modifier = Modifier.size(24.dp)\n                            )\n                        }\n                    },\n                    headlineContent = { Text(stringResource(R.string.select_from_storage)) },\n                    supportingContent = {\n                        Text(stringResource(R.string.select_from_storage_description))\n                    }\n                )\n                HorizontalDivider()\n            }\n\n            val apps = appList\n            if (apps == null) {\n                item(key = \"LOADING\") {\n                    Box(\n                        modifier = Modifier.fillParentMaxSize(),\n                        contentAlignment = Alignment.Center\n                    ) {\n                        LoadingIndicator()\n                    }\n                }\n            } else if (apps.isNotEmpty()) {\n                items(\n                    items = apps,\n                    key = { \"APP-\" + it.packageName },\n                    contentType = { \"APP\" },\n                ) { app ->\n                    ListItem(\n                        modifier = Modifier.clickable {\n                            onSelect(app.packageName)\n                        },\n                        leadingContent = {\n                            AppIcon(\n                                packageInfo = app.packageInfo,\n                                contentDescription = null,\n                                modifier = Modifier.size(36.dp)\n                            )\n                        },\n                        headlineContent = {\n                            AppLabel(\n                                app.packageInfo,\n                                defaultText = app.packageName\n                            )\n                        },\n                        supportingContent = {\n                            suggestedVersions[app.packageName]?.let {\n                                Text(stringResource(R.string.suggested_version_info, it))\n                            }\n                        },\n                        trailingContent = app.patches?.let {\n                            {\n                                Text(\n                                    pluralStringResource(\n                                        R.plurals.patch_count,\n                                        it,\n                                        it\n                                    )\n                                )\n                            }\n                        }\n                    )\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/AppliedPatchesDialog.kt",
    "content": "package app.revanced.manager.ui.screen\n\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ListItem\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.rememberTopAppBarState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\nimport app.revanced.manager.data.room.apps.installed.InstalledPatchBundle\nimport app.revanced.manager.ui.component.AppTopBar\nimport app.revanced.manager.ui.component.FullscreenDialog\nimport app.revanced.manager.ui.component.LazyColumnWithScrollbar\nimport app.revanced.manager.ui.component.patches.PatchesListHeader\nimport app.revanced.manager.util.PatchSelection\nimport app.revanced.manager.util.transparentListItemColors\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun AppliedPatchesDialog(\n    onDismissRequest: () -> Unit,\n    appliedPatches: PatchSelection?,\n    patchBundles: List<InstalledPatchBundle>\n) {\n    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())\n\n    FullscreenDialog(onDismissRequest = onDismissRequest) {\n        Scaffold(\n            topBar = {\n                AppTopBar(\n                    title = stringResource(R.string.applied_patches),\n                    scrollBehavior = scrollBehavior,\n                    onBackClick = onDismissRequest\n                )\n            },\n        ) { paddingValues ->\n            LazyColumnWithScrollbar(\n                modifier = Modifier\n                    .fillMaxSize()\n                    .padding(paddingValues)\n            ) {\n                val patches = appliedPatches ?: return@LazyColumnWithScrollbar\n                val bundleMap = patchBundles.associateBy { it.bundleUid }\n\n                patches.forEach { (bundleUid, patchNames) ->\n                    val bundle = bundleMap[bundleUid]\n\n                    item(key = \"header_$bundleUid\") {\n                        PatchesListHeader(title = bundle?.let {\n                            it.bundleVersion?.let { version ->\n                                \"${it.bundleName} v$version\"\n                            } ?: it.bundleName\n                        } ?: \"${stringResource(R.string.patches)} $bundleUid\")\n                    }\n\n                    items(\n                        items = patchNames.sorted(),\n                        key = { \"${bundleUid}_$it\" }\n                    ) { patchName ->\n                        ListItem(\n                            headlineContent = { Text(patchName) },\n                            colors = transparentListItemColors\n                        )\n                    }\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/BundleInformationScreen.kt",
    "content": "package app.revanced.manager.ui.screen\n\nimport android.webkit.URLUtil.isValidUrl\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.defaultMinSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight\nimport androidx.compose.material.icons.automirrored.outlined.OpenInNew\nimport androidx.compose.material.icons.automirrored.outlined.Send\nimport androidx.compose.material.icons.filled.Check\nimport androidx.compose.material.icons.filled.Close\nimport androidx.compose.material.icons.filled.Delete\nimport androidx.compose.material.icons.filled.Refresh\nimport androidx.compose.material.icons.outlined.Delete\nimport androidx.compose.material.icons.outlined.Gavel\nimport androidx.compose.material.icons.outlined.Language\nimport androidx.compose.material.icons.outlined.Source\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.MediumFlexibleTopAppBar\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.SwitchDefaults\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.rememberTopAppBarState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.res.pluralStringResource\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.dp\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport app.revanced.manager.R\nimport app.revanced.manager.domain.sources.Extensions.asRemoteOrNull\nimport app.revanced.manager.domain.sources.LocalSource\nimport app.revanced.manager.domain.sources.Source\nimport app.revanced.manager.ui.component.ColumnWithScrollbar\nimport app.revanced.manager.ui.component.ConfirmDialog\nimport app.revanced.manager.ui.component.ExceptionViewerDialog\nimport app.revanced.manager.ui.component.ListSection\nimport app.revanced.manager.ui.component.TextInputDialog\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.haptics.HapticSwitch\nimport app.revanced.manager.ui.component.settings.SafeguardBooleanItem\nimport app.revanced.manager.ui.component.settings.SettingsListItem\nimport app.revanced.manager.ui.viewmodel.BundleInformationViewModel\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun BundleInformationScreen(\n    onBackClick: () -> Unit,\n    viewModel: BundleInformationViewModel\n) {\n    val srcState = viewModel.bundle.collectAsStateWithLifecycle(null)\n    val src = srcState.value ?: return\n    val patchCount by viewModel.patchCount.collectAsStateWithLifecycle(0)\n\n    var showDeleteConfirmationDialog by rememberSaveable { mutableStateOf(false) }\n    val isLocal = src is LocalSource<*>\n    val bundleManifestAttributes = src.loaded?.manifestAttributes\n    val (autoUpdate, endpoint) = src.asRemoteOrNull?.let { it.autoUpdate to it.endpoint }\n        ?: (null to null)\n\n    val subtitleAuthor = bundleManifestAttributes?.author?.let {\n        stringResource(R.string.bundle_information_by_author, it)\n    }\n    val subtitleVersion = bundleManifestAttributes?.version?.let { \"v$it\" }\n    val contentScrollState = rememberScrollState()\n    val isContentScrollable by remember { derivedStateOf { contentScrollState.maxValue > 0 } }\n\n    if (showDeleteConfirmationDialog) {\n        ConfirmDialog(\n            onDismiss = { showDeleteConfirmationDialog = false },\n            onConfirm = {\n                viewModel.delete()\n                onBackClick()\n            },\n            title = stringResource(R.string.delete),\n            description = stringResource(\n                R.string.patches_delete_single_dialog_description,\n                src.name\n            ),\n            icon = Icons.Outlined.Delete\n        )\n    }\n\n    val scrollBehavior = if (isContentScrollable) {\n        TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState())\n    } else {\n        null\n    }\n\n    Scaffold(\n        topBar = {\n            MediumFlexibleTopAppBar(\n                title = { Text(src.name) },\n                subtitle = if (subtitleAuthor != null || subtitleVersion != null) {\n                    {\n                        val dot = \"\\u2022\"          // •\n                        val emSpace = \"\\u2002\"      // en space, roughly half character width\n                        val separator = \"$emSpace$dot$emSpace\"\n                        Text(\"$subtitleAuthor$separator$subtitleVersion\")\n                    }\n                } else {\n                    null\n                },\n                navigationIcon = {\n                    TooltipIconButton(\n                        onClick = onBackClick,\n                        tooltip = stringResource(R.string.back),\n                    ) { contentDescription ->\n                        Icon(\n                            Icons.AutoMirrored.Filled.ArrowBack,\n                            contentDescription = contentDescription\n                        )\n                    }\n                },\n                actions = {\n                    if (!src.isDefault) {\n                        TooltipIconButton(\n                            onClick = { showDeleteConfirmationDialog = true },\n                            tooltip = stringResource(R.string.delete),\n                        ) { contentDescription ->\n                            Icon(\n                                Icons.Filled.Delete,\n                                contentDescription\n                            )\n                        }\n                    }\n                    val hasNetwork = remember { viewModel.networkInfo.isConnected() }\n                    if (!isLocal && hasNetwork) {\n                        TooltipIconButton(\n                            onClick = viewModel::refresh,\n                            tooltip = stringResource(R.string.refresh),\n                        ) { contentDescription ->\n                            Icon(\n                                Icons.Filled.Refresh,\n                                contentDescription\n                            )\n                        }\n                    }\n                },\n                scrollBehavior = scrollBehavior\n            )\n        },\n        modifier = Modifier.then(\n            scrollBehavior?.let { Modifier.nestedScroll(it.nestedScrollConnection) } ?: Modifier\n        ),\n    ) { paddingValues ->\n        ColumnWithScrollbar(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(paddingValues),\n            state = contentScrollState,\n        ) {\n            bundleManifestAttributes?.description?.let { description ->\n                Text(\n                    text = description,\n                    style = MaterialTheme.typography.bodyMedium,\n                    color = MaterialTheme.colorScheme.onSurfaceVariant,\n                    modifier = Modifier.padding(\n                        start = 16.dp,\n                        end = 16.dp,\n                        top = 8.dp,\n                        bottom = 16.dp\n                    )\n                )\n            }\n\n            Column(\n                modifier = Modifier.padding(start = 16.dp, end = 16.dp, bottom = 16.dp)\n            ) {\n                bundleManifestAttributes?.website?.let { website ->\n                    TagValue(\n                        icon = Icons.Outlined.Language,\n                        title = stringResource(R.string.website),\n                        value = website,\n                        uri = website\n                    )\n                }\n\n                bundleManifestAttributes?.contact?.let { contact ->\n                    TagValue(\n                        icon = Icons.AutoMirrored.Outlined.Send,\n                        title = stringResource(R.string.contact),\n                        value = contact,\n                        uri = if (contact.startsWith(\"mailto:\")) contact else \"mailto:$contact\"\n                    )\n                }\n\n                bundleManifestAttributes?.source?.let { source ->\n                    TagValue(\n                        icon = Icons.Outlined.Source,\n                        title = stringResource(R.string.repository),\n                        value = source\n                    )\n                }\n\n                bundleManifestAttributes?.license?.let { license ->\n                    TagValue(\n                        icon = Icons.Outlined.Gavel,\n                        title = stringResource(R.string.license),\n                        value = license\n                    )\n                }\n            }\n\n            ListSection {\n                if (autoUpdate != null) {\n                    SettingsListItem(\n                        headlineContent = stringResource(R.string.auto_update),\n                        supportingContent = stringResource(R.string.auto_update_description),\n                        trailingContent = {\n                            HapticSwitch(\n                                checked = autoUpdate,\n                                onCheckedChange = viewModel::setAutoUpdate,\n                                thumbContent = if (autoUpdate) {\n                                    {\n                                        Icon(\n                                            imageVector = Icons.Filled.Check,\n                                            contentDescription = null,\n                                            modifier = Modifier.size(SwitchDefaults.IconSize)\n                                        )\n                                    }\n                                } else {\n                                    {\n                                        Icon(\n                                            imageVector = Icons.Filled.Close,\n                                            contentDescription = null,\n                                            modifier = Modifier.size(SwitchDefaults.IconSize)\n                                        )\n                                    }\n                                }\n                            )\n                        },\n                        onClick = { viewModel.setAutoUpdate(!autoUpdate) }\n                    )\n                }\n\n                if (src.isDefault) {\n                    SafeguardBooleanItem(\n                        preference = viewModel.prefs.usePatchesPrereleases,\n                        headline = R.string.patches_prereleases,\n                        description = stringResource(\n                            R.string.patches_prereleases_description,\n                            src.name\n                        ),\n                        dialogTitle = R.string.prerelease_title,\n                        confirmationText = R.string.prereleases_warning,\n                        onValueChange = viewModel::updateUsePrereleases\n                    )\n                }\n\n                endpoint?.takeUnless { src.isDefault }?.let { url ->\n                    var showUrlInputDialog by rememberSaveable { mutableStateOf(false) }\n\n                    if (showUrlInputDialog) {\n                        TextInputDialog(\n                            initial = url,\n                            title = stringResource(R.string.patches_url),\n                            onDismissRequest = { showUrlInputDialog = false },\n                            onConfirm = {\n                                showUrlInputDialog = false\n                                // TODO: Not implemented\n                            },\n                            validator = {\n                                if (it.isEmpty()) return@TextInputDialog false\n                                isValidUrl(it)\n                            }\n                        )\n                    }\n\n                    SettingsListItem(\n                        headlineContent = stringResource(R.string.patches_url),\n                        supportingContent = url.ifEmpty {\n                            stringResource(R.string.field_not_set)\n                        },\n                        onClick = null\n                    )\n                }\n\n                SettingsListItem(\n                    headlineContent = stringResource(R.string.patches),\n                    supportingContent = pluralStringResource(\n                        id = R.plurals.patch_count,\n                        count = patchCount,\n                        patchCount\n                    ),\n                    onClick = null,\n                    trailingContent = null\n                )\n\n                src.error?.let {\n                    var showDialog by rememberSaveable { mutableStateOf(false) }\n\n                    if (showDialog) {\n                        ExceptionViewerDialog(\n                            onDismiss = { showDialog = false },\n                            text = remember(it) { it.stackTraceToString() }\n                        )\n                    }\n\n                    SettingsListItem(\n                        headlineContent = stringResource(R.string.patches_error),\n                        supportingContent = stringResource(R.string.patches_error_description),\n                        trailingContent = {\n                            Icon(\n                                Icons.AutoMirrored.Filled.KeyboardArrowRight,\n                                null\n                            )\n                        },\n                        onClick = { showDialog = true }\n                    )\n                }\n\n                if (src.state is Source.State.Missing && !isLocal) {\n                    SettingsListItem(\n                        headlineContent = stringResource(R.string.patches_error),\n                        supportingContent = stringResource(R.string.patches_not_downloaded),\n                        onClick = viewModel::refresh\n                    )\n                }\n            }\n        }\n    }\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nprivate fun TagValue(\n    icon: ImageVector,\n    title: String,\n    value: String,\n    uri: String? = null\n) {\n    val uriHandler = LocalUriHandler.current\n    val onClick: (() -> Unit)? = uri?.let { targetUri ->\n        {\n            try {\n                uriHandler.openUri(targetUri)\n            } catch (_: Exception) {\n            }\n        }\n    }\n\n    val buttonText = value\n        .removePrefix(\"https://\")\n        .removePrefix(\"http://\")\n        .removePrefix(\"mailto:\")\n        .removeSuffix(\"/\")\n\n    Row(\n        modifier = Modifier\n            .fillMaxWidth()\n            .defaultMinSize(minHeight = 48.dp)\n            .padding(end = if (onClick != null) 0.dp else 6.dp),\n        horizontalArrangement = Arrangement.SpaceBetween,\n        verticalAlignment = Alignment.CenterVertically\n    ) {\n        Row(\n            horizontalArrangement = Arrangement.spacedBy(12.dp),\n            verticalAlignment = Alignment.CenterVertically,\n        ) {\n            Icon(\n                imageVector = icon,\n                contentDescription = null,\n                modifier = Modifier.size(24.dp),\n                tint = MaterialTheme.colorScheme.onSurfaceVariant\n            )\n            Text(\n                text = title,\n                style = MaterialTheme.typography.bodyLarge,\n                color = MaterialTheme.colorScheme.onSurface\n            )\n        }\n\n        Spacer(modifier = Modifier.width(16.dp))\n\n        if (onClick != null) {\n            TextButton(onClick = onClick, shapes = ButtonDefaults.shapes()) {\n                Text(\n                    text = buttonText,\n                    style = MaterialTheme.typography.bodyMedium,\n                    maxLines = 1,\n                    overflow = TextOverflow.Ellipsis\n                )\n                Spacer(modifier = Modifier.width(8.dp))\n                Icon(\n                    imageVector = Icons.AutoMirrored.Outlined.OpenInNew,\n                    contentDescription = null,\n                    modifier = Modifier.size(18.dp)\n                )\n            }\n        } else {\n            Text(\n                text = buttonText,\n                style = MaterialTheme.typography.bodyMedium,\n                color = MaterialTheme.colorScheme.onSurfaceVariant,\n                textAlign = TextAlign.End\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/BundleListScreen.kt",
    "content": "package app.revanced.manager.ui.screen\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Source\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.pulltorefresh.PullToRefreshBox\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.EmptyState\nimport app.revanced.manager.ui.component.LazyColumnWithScrollbar\nimport app.revanced.manager.ui.component.bundle.BundleItem\nimport app.revanced.manager.ui.viewmodel.BundleListViewModel\nimport app.revanced.manager.util.EventEffect\nimport kotlinx.coroutines.flow.Flow\nimport org.koin.androidx.compose.koinViewModel\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun BundleListScreen(\n    viewModel: BundleListViewModel = koinViewModel(),\n    eventsFlow: Flow<BundleListViewModel.Event>,\n    setSelectedSourceCount: (Int) -> Unit,\n    onBundleClick: (Int) -> Unit\n) {\n    val patchCounts by viewModel.patchCounts.collectAsStateWithLifecycle(emptyMap())\n    val sources by viewModel.sources.collectAsStateWithLifecycle(emptyList())\n\n    EventEffect(eventsFlow) {\n        viewModel.handleEvent(it)\n    }\n    LaunchedEffect(viewModel.selectedSources.size) {\n        setSelectedSourceCount(viewModel.selectedSources.size)\n    }\n\n    PullToRefreshBox(\n        onRefresh = viewModel::refresh,\n        isRefreshing = viewModel.isRefreshing\n    ) {\n        if (sources.isEmpty()) {\n            Box(modifier = Modifier.fillMaxSize()) {\n                EmptyState(\n                    icon = Icons.Outlined.Source,\n                    title = R.string.no_patches_found,\n                    description = R.string.no_patches_description\n                )\n            }\n        } else {\n            LazyColumnWithScrollbar(\n                modifier = Modifier.fillMaxSize(),\n                horizontalAlignment = Alignment.CenterHorizontally,\n                verticalArrangement = Arrangement.Top,\n            ) {\n                items(\n                    sources,\n                    key = { it.uid }\n                ) { source ->\n                    BundleItem(\n                        src = source,\n                        patchCount = patchCounts[source.uid] ?: 0,\n                        selectable = viewModel.selectedSources.size > 0,\n                        onSelect = {\n                            viewModel.selectedSources.add(source.uid)\n                        },\n                        isBundleSelected = source.uid in viewModel.selectedSources,\n                        toggleSelection = { bundleIsNotSelected ->\n                            if (bundleIsNotSelected) {\n                                viewModel.selectedSources.add(source.uid)\n                            } else {\n                                viewModel.selectedSources.remove(source.uid)\n                            }\n                        },\n                        onClick = { onBundleClick(source.uid) }\n                    )\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/DashboardScreen.kt",
    "content": "package app.revanced.manager.ui.screen\n\nimport android.annotation.SuppressLint\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.animation.scaleIn\nimport androidx.compose.animation.scaleOut\nimport androidx.compose.animation.togetherWith\nimport androidx.activity.compose.BackHandler\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.appcompat.content.res.AppCompatResources\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.asPaddingValues\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.navigationBars\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.layout.statusBars\nimport androidx.compose.foundation.pager.HorizontalPager\nimport androidx.compose.foundation.pager.PagerState\nimport androidx.compose.foundation.pager.rememberPagerState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Add\nimport androidx.compose.material.icons.filled.Notifications\nimport androidx.compose.material.icons.filled.Settings\nimport androidx.compose.material.icons.filled.Update\nimport androidx.compose.material.icons.outlined.Apps\nimport androidx.compose.material.icons.outlined.BugReport\nimport androidx.compose.material.icons.outlined.Delete\nimport androidx.compose.material.icons.outlined.Edit\nimport androidx.compose.material.icons.outlined.Source\nimport androidx.compose.material.icons.outlined.WarningAmber\nimport androidx.compose.material3.Badge\nimport androidx.compose.material3.BadgedBox\nimport androidx.compose.material3.ButtonColors\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.TopAppBar\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Brush\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalResources\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.animation.AnimatedContent\nimport androidx.compose.animation.core.tween\nimport androidx.compose.material.icons.outlined.Refresh\nimport androidx.compose.material3.LocalContentColor\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport app.revanced.manager.R\nimport app.revanced.manager.network.dto.ReVancedAnnouncement\nimport app.revanced.manager.ui.component.AlertDialogExtended\nimport app.revanced.manager.ui.component.AvailableUpdateDialog\nimport app.revanced.manager.ui.component.ConfirmDialog\nimport app.revanced.manager.ui.component.NotificationCard\nimport app.revanced.manager.ui.component.NotificationCardType\nimport app.revanced.manager.ui.component.PillTab\nimport app.revanced.manager.ui.component.PillTabBar\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.sources.ImportSourceDialog\nimport app.revanced.manager.ui.component.sources.ImportSourceDialogStrings\nimport app.revanced.manager.ui.component.haptics.HapticExtendedFloatingActionButton\nimport app.revanced.manager.ui.model.SelectedApp\nimport app.revanced.manager.ui.model.navigation.SelectedApplicationInfo\nimport app.revanced.manager.ui.viewmodel.DashboardViewModel\nimport app.revanced.manager.ui.viewmodel.PatchesSelectorViewModel\nimport app.revanced.manager.util.RequestInstallAppsContract\nimport com.google.accompanist.drawablepainter.rememberDrawablePainter\nimport kotlinx.coroutines.launch\nimport org.koin.androidx.compose.koinViewModel\nimport org.koin.core.parameter.parametersOf\nimport kotlin.collections.emptyList\n\nenum class DashboardPage(\n    val titleResId: Int,\n    val icon: ImageVector\n) {\n    DASHBOARD(R.string.tab_apps, Icons.Outlined.Apps),\n    BUNDLES(R.string.tab_patches, Icons.Outlined.Source),\n}\n\n@SuppressLint(\"BatteryLife\")\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun DashboardScreen(\n    vm: DashboardViewModel = koinViewModel(),\n    onAppSelectorClick: () -> Unit,\n    onSettingsClick: () -> Unit,\n    onUpdateClick: () -> Unit,\n    onAnnouncementsClick: () -> Unit,\n    onAnnouncementClick: (ReVancedAnnouncement) -> Unit,\n    onAppClick: (String) -> Unit,\n    onPatchableAppClick: (String) -> Unit,\n    onStorageSelect: (SelectedApp.Local) -> Unit,\n    onBundleClick: (Int) -> Unit\n) {\n    val availablePatches by vm.availablePatches.collectAsStateWithLifecycle(0)\n    val bundleDownloadError by vm.bundleDownloadError.collectAsStateWithLifecycle(null)\n    val sourcesNotDownloaded by vm.sourcesNotDownloaded.collectAsStateWithLifecycle(false)\n    val managerAutoUpdates by vm.prefs.managerAutoUpdates.getAsState()\n    val showManagerUpdateDialogOnLaunch by vm.prefs.showManagerUpdateDialogOnLaunch.getAsState()\n    val disablePatchVersionCompatCheck by vm.prefs.disablePatchVersionCompatCheck.getAsState()\n    val disableSelectionWarning by vm.prefs.disableSelectionWarning.getAsState()\n    val disableUniversalPatchCheck by vm.prefs.disableUniversalPatchCheck.getAsState()\n    val suggestedVersionSafeguard by vm.prefs.suggestedVersionSafeguard.getAsState()\n    val safeguardsToggled by remember(\n        disablePatchVersionCompatCheck,\n        disableSelectionWarning,\n        disableUniversalPatchCheck,\n        suggestedVersionSafeguard\n    ) {\n        derivedStateOf {\n            disablePatchVersionCompatCheck ||\n                    disableSelectionWarning ||\n                    disableUniversalPatchCheck ||\n                    !suggestedVersionSafeguard\n        }\n    }\n    val availableUpdate by vm.availableManagerUpdate.collectAsStateWithLifecycle()\n    val androidContext = LocalContext.current\n    val resources = LocalResources.current\n    val logoPainter = rememberDrawablePainter(drawable = remember(resources) {\n        AppCompatResources.getDrawable(androidContext, R.drawable.ic_logo_ring)\n    })\n    val composableScope = rememberCoroutineScope()\n    val pagerState = rememberPagerState(\n        initialPage = DashboardPage.DASHBOARD.ordinal,\n        initialPageOffsetFraction = 0f\n    ) { DashboardPage.entries.size }\n\n    val dashboardPatchesParams = remember {\n        SelectedApplicationInfo.PatchesSelector.ViewModelParams(\n            app = SelectedApp.Search(\"\", null),\n            currentSelection = null,\n            options = emptyMap(),\n            readOnly = true,\n            browseAllBundles = true\n        )\n    }\n    val dashboardPatchesViewModel = koinViewModel<PatchesSelectorViewModel>(key = \"dashboard-patches\") {\n        parametersOf(dashboardPatchesParams)\n    }\n    val dashboardPatchesBundles by dashboardPatchesViewModel.bundlesFlow.collectAsStateWithLifecycle(initialValue = emptyList())\n\n    var patchesSourceEditMode by rememberSaveable { mutableStateOf(false) }\n    var sourceDeleteUid by rememberSaveable { mutableStateOf<Int?>(null) }\n\n    LaunchedEffect(pagerState.currentPage) {\n        if (pagerState.currentPage != DashboardPage.BUNDLES.ordinal) {\n            patchesSourceEditMode = false\n        }\n    }\n\n    sourceDeleteUid?.let { uid ->\n        val sourceName = dashboardPatchesBundles.firstOrNull { it.uid == uid }?.name\n            ?: return@let\n        ConfirmDialog(\n            onDismiss = { sourceDeleteUid = null },\n            onConfirm = { vm.deleteSource(uid) },\n            title = stringResource(R.string.delete),\n            description = stringResource(R.string.patches_delete_single_dialog_description, sourceName),\n            icon = Icons.Outlined.Delete\n        )\n    }\n\n    var showAddBundleDialog by rememberSaveable { mutableStateOf(false) }\n    if (showAddBundleDialog) {\n        ImportSourceDialog(\n            strings = ImportSourceDialogStrings.PATCHES,\n            onDismiss = { showAddBundleDialog = false },\n            onLocalSubmit = { patches ->\n                showAddBundleDialog = false\n                patchesSourceEditMode = false\n                vm.createLocalSource(patches)\n            },\n            onRemoteSubmit = { url, autoUpdate ->\n                showAddBundleDialog = false\n                patchesSourceEditMode = false\n                vm.createRemoteSource(url, autoUpdate)\n            }\n        )\n    }\n\n    var showUpdateDialog by rememberSaveable { mutableStateOf(true) }\n    if (managerAutoUpdates && showUpdateDialog && showManagerUpdateDialogOnLaunch && availableUpdate != null) {\n        AvailableUpdateDialog(\n            onDismiss = { showUpdateDialog = false },\n            setShowManagerUpdateDialogOnLaunch = vm::setShowManagerUpdateDialogOnLaunch,\n            onConfirm = onUpdateClick,\n            newVersion = availableUpdate!!\n        )\n    }\n\n    var pendingAppSelectorLaunch by rememberSaveable { mutableStateOf(false) }\n    var pendingPatchablePackage by rememberSaveable { mutableStateOf<String?>(null) }\n    var pendingStorageSelection by rememberSaveable { mutableStateOf<SelectedApp.Local?>(null) }\n\n    fun clearPendingSelection() {\n        pendingAppSelectorLaunch = false\n        pendingPatchablePackage = null\n        pendingStorageSelection = null\n    }\n\n    fun resumePendingSelection() {\n        if (pendingAppSelectorLaunch) {\n            clearPendingSelection()\n            onAppSelectorClick()\n            return\n        }\n\n        pendingPatchablePackage?.let {\n            clearPendingSelection()\n            onPatchableAppClick(it)\n            return\n        }\n\n        pendingStorageSelection?.let {\n            clearPendingSelection()\n            onStorageSelect(it)\n        }\n    }\n\n    var showAndroid11Dialog by rememberSaveable { mutableStateOf(false) }\n    val installAppsPermissionLauncher =\n        rememberLauncherForActivityResult(RequestInstallAppsContract) { granted ->\n            showAndroid11Dialog = false\n            if (granted) {\n                resumePendingSelection()\n            } else {\n                clearPendingSelection()\n            }\n        }\n\n    if (showAndroid11Dialog) {\n        Android11Dialog(\n            onDismissRequest = {\n                showAndroid11Dialog = false\n                clearPendingSelection()\n            },\n            onContinue = {\n                installAppsPermissionLauncher.launch(androidContext.packageName)\n            }\n        )\n    }\n\n    fun onPatchableSelection(packageName: String) {\n        if (vm.android11BugActive) {\n            clearPendingSelection()\n            pendingPatchablePackage = packageName\n            showAndroid11Dialog = true\n            return\n        }\n\n        onPatchableAppClick(packageName)\n    }\n\n    fun onStorageSelection(app: SelectedApp.Local) {\n        if (vm.android11BugActive) {\n            clearPendingSelection()\n            pendingStorageSelection = app\n            showAndroid11Dialog = true\n            return\n        }\n\n        onStorageSelect(app)\n    }\n\n    Surface(\n        modifier = Modifier.fillMaxSize(),\n        color = MaterialTheme.colorScheme.surface\n    ) {\n        Box(modifier = Modifier.fillMaxSize()) {\n            val statusBarHeight = WindowInsets.statusBars.asPaddingValues().calculateTopPadding()\n            Box(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(statusBarHeight + 96.dp)\n                    .background(\n                        brush = Brush.verticalGradient(\n                            colors = listOf(\n                                MaterialTheme.colorScheme.primary.copy(alpha = 0.1f),\n                                Color.Transparent\n                            )\n                        )\n                    )\n            )\n\n            val navBarHeight = WindowInsets.navigationBars.asPaddingValues().calculateBottomPadding()\n            if (navBarHeight > 0.dp) {\n                Box(\n                    modifier = Modifier\n                        .fillMaxWidth()\n                        .height(navBarHeight)\n                        .align(Alignment.BottomCenter)\n                        .background(\n                            brush = Brush.verticalGradient(\n                                colors = listOf(\n                                    Color.Transparent,\n                                    MaterialTheme.colorScheme.primary.copy(alpha = 0.05f)\n                                )\n                            )\n                        )\n                )\n            }\n\n            Scaffold(\n                topBar = {\n                    TopAppBar(\n                        title = {\n                            Row(\n                                verticalAlignment = Alignment.CenterVertically,\n                                horizontalArrangement = Arrangement.spacedBy(8.dp)\n                            ) {\n                                Image(\n                                    painter = logoPainter,\n                                    contentDescription = null,\n                                    modifier = Modifier.size(32.dp)\n                                )\n                                Text(stringResource(R.string.app_name))\n                            }\n                        },\n                        actions = {\n                            if (availableUpdate != null) {\n                                TooltipIconButton(\n                                    onClick = onUpdateClick,\n                                    tooltip = stringResource(R.string.update),\n                                ) { contentDescription ->\n                                    BadgedBox(badge = { Badge(modifier = Modifier.size(6.dp)) }) {\n                                        Icon(Icons.Filled.Update, contentDescription)\n                                    }\n                                }\n                            }\n                            TooltipIconButton(\n                                onClick = onAnnouncementsClick,\n                                tooltip = stringResource(R.string.announcements),\n                            ) { contentDescription ->\n                                BadgedBox(\n                                    badge = {\n                                        if (vm.unreadAnnouncement != null) {\n                                            Badge(modifier = Modifier.size(6.dp))\n                                        }\n                                    }\n                                ) {\n                                    Icon(\n                                        Icons.Filled.Notifications,\n                                        contentDescription\n                                    )\n                                }\n                            }\n                            TooltipIconButton(\n                                onClick = onSettingsClick,\n                                tooltip = stringResource(R.string.settings),\n                            ) { contentDescription ->\n                                BadgedBox(\n                                    badge = {\n                                        if (safeguardsToggled) {\n                                            Badge(\n                                                modifier = Modifier.size(6.dp),\n                                                containerColor = MaterialTheme.colorScheme.error\n                                            )\n                                        }\n                                    }\n                                ) {\n                                    Icon(Icons.Filled.Settings, contentDescription)\n                                }\n                            }\n                        },\n                        colors = TopAppBarDefaults.topAppBarColors(\n                            containerColor = Color.Transparent\n                        )\n                    )\n                },\n                containerColor = Color.Transparent,\n                floatingActionButton = {\n                    DashboardFab(\n                        pagerState = pagerState,\n                        patchesSourceEditMode = patchesSourceEditMode,\n                        onEnablePatchesSourceEditMode = { patchesSourceEditMode = true },\n                        onAddBundleClick = {\n                            vm.cancelSourceSelection()\n                            showAddBundleDialog = true\n                        }\n                    )\n                }\n            ) { paddingValues ->\n                Column(Modifier.padding(paddingValues)) {\n                    PillTabBar(\n                        pagerState = pagerState,\n                        modifier = Modifier\n                            .fillMaxWidth()\n                            .padding(horizontal = 8.dp, vertical = 8.dp)\n                    ) {\n                        DashboardPage.entries.forEachIndexed { index, page ->\n                            PillTab(\n                                index = index,\n                                onClick = { composableScope.launch { pagerState.animateScrollToPage(index) } },\n                                text = { Text(stringResource(page.titleResId)) },\n                                icon = { Icon(page.icon, null) }\n                            )\n                        }\n                    }\n\n                    Notifications(\n                        if (bundleDownloadError != null) {\n                            {\n                                NotificationCard(\n                                    type = NotificationCardType.ERROR,\n                                    icon = Icons.Outlined.WarningAmber,\n                                    title = stringResource(R.string.api_not_working_title),\n                                    text = stringResource(R.string.api_not_working_description),\n                                    onClick = onSettingsClick\n                                )\n                            }\n                        } else null,\n                        if (sourcesNotDownloaded && bundleDownloadError == null) {\n                            {\n                                NotificationCard(\n                                    type = NotificationCardType.WARNING,\n                                    icon = Icons.Outlined.Refresh,\n                                    text = stringResource(R.string.banner_sources_not_downloaded_description),\n                                    onClick = {\n                                        vm.downloadSources()\n                                    }\n                                )\n                            }\n                        } else null,\n                        vm.unreadAnnouncement?.let { announcement ->\n                            {\n                                NotificationCard(\n                                    text = stringResource(R.string.new_announcement, announcement.title),\n                                    icon = Icons.Filled.Notifications,\n                                    actions = {\n                                        val colors = ButtonDefaults.textButtonColors(\n                                            contentColor = LocalContentColor.current\n                                        )\n\n                                        TextButton(\n                                            onClick = vm::markUnreadAnnouncementRead,\n                                            shapes = ButtonDefaults.shapes(),\n                                            colors = colors\n                                        ) {\n                                            Text(stringResource(R.string.dismiss))\n                                        }\n                                        TextButton(\n                                            onClick = {\n                                                vm.markUnreadAnnouncementRead()\n                                                onAnnouncementClick(announcement)\n                                            },\n                                            shapes = ButtonDefaults.shapes(),\n                                            colors = colors\n                                        ) {\n                                            Text(stringResource(R.string.view_announcement))\n                                        }\n                                    },\n                                    type = if (announcement.level > 0) NotificationCardType.ERROR else NotificationCardType.NORMAL,\n                                    onClick = {\n                                        vm.markUnreadAnnouncementRead()\n                                        onAnnouncementClick(announcement)\n                                    }\n                                )\n                            }\n                        }\n                    )\n\n                    HorizontalPager(\n                        state = pagerState,\n                        userScrollEnabled = true,\n                        modifier = Modifier.fillMaxSize()\n                    ) { index ->\n                        when (DashboardPage.entries[index]) {\n                            DashboardPage.DASHBOARD -> {\n                                InstalledAppsScreen(\n                                    onAppClick = { onAppClick(it.currentPackageName) },\n                                    onPatchableAppClick = ::onPatchableSelection,\n                                    onStorageSelect = { selectedApp -> onStorageSelection(selectedApp) }\n                                )\n                            }\n\n                            DashboardPage.BUNDLES -> {\n                                BackHandler {\n                                    if (patchesSourceEditMode) {\n                                        patchesSourceEditMode = false\n                                        return@BackHandler\n                                    }\n                                    composableScope.launch {\n                                        pagerState.animateScrollToPage(DashboardPage.DASHBOARD.ordinal)\n                                    }\n                                }\n\n                                PatchesSelectorScreen(\n                                    onSave = { _, _ -> },\n                                    onBackClick = {\n                                        if (patchesSourceEditMode) {\n                                            patchesSourceEditMode = false\n                                            return@PatchesSelectorScreen\n                                        }\n                                        composableScope.launch {\n                                            pagerState.animateScrollToPage(DashboardPage.DASHBOARD.ordinal)\n                                        }\n                                    },\n                                    onBundleInfoClick = onBundleClick,\n                                    isSourceEditMode = patchesSourceEditMode,\n                                    onSourceDeleteRequest = { sourceDeleteUid = it },\n                                    viewModel = dashboardPatchesViewModel\n                                )\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun DashboardFab(\n    pagerState: PagerState,\n    patchesSourceEditMode: Boolean,\n    onEnablePatchesSourceEditMode: () -> Unit,\n    onAddBundleClick: () -> Unit\n) {\n    val fabState = when (pagerState.currentPage) {\n        DashboardPage.BUNDLES.ordinal -> {\n            if (patchesSourceEditMode) DashboardFabState.AddBundles else DashboardFabState.EditBundles\n        }\n\n        else -> DashboardFabState.Hidden\n    }\n\n    if (fabState == DashboardFabState.Hidden) return\n\n    HapticExtendedFloatingActionButton(\n        onClick = if (fabState == DashboardFabState.AddBundles) onAddBundleClick else onEnablePatchesSourceEditMode,\n        tooltip = stringResource(\n            if (fabState == DashboardFabState.AddBundles) R.string.fab_add_patches else R.string.edit\n        ),\n        expanded = fabState == DashboardFabState.AddBundles,\n        icon = {\n            AnimatedContent(\n                targetState = fabState,\n                transitionSpec = {\n                    (fadeIn(animationSpec = tween(durationMillis = 180, delayMillis = 60)) +\n                            scaleIn(animationSpec = tween(durationMillis = 180, delayMillis = 60), initialScale = 0.85f)) togetherWith\n                            (fadeOut(animationSpec = tween(durationMillis = 90)) +\n                                    scaleOut(animationSpec = tween(durationMillis = 90), targetScale = 0.85f))\n                },\n                label = \"dashboard_fab_icon_transition\"\n            ) { state ->\n                when (state) {\n                    DashboardFabState.EditBundles -> {\n                        Icon(Icons.Outlined.Edit, contentDescription = stringResource(R.string.edit))\n                    }\n\n                    DashboardFabState.AddBundles -> {\n                        Icon(Icons.Default.Add, contentDescription = null)\n                    }\n\n                    DashboardFabState.Hidden -> Unit\n                }\n            }\n        },\n        text = { Text(stringResource(R.string.fab_add_patches)) }\n    )\n}\n\nprivate enum class DashboardFabState {\n    Hidden,\n    EditBundles,\n    AddBundles,\n}\n\n@Composable\nfun Notifications(\n    vararg notifications: (@Composable () -> Unit)?,\n) {\n    val activeNotifications = notifications.filterNotNull()\n\n    if (activeNotifications.isNotEmpty()) {\n        Column(\n            modifier = Modifier.padding(16.dp),\n            verticalArrangement = Arrangement.spacedBy(16.dp)\n        ) {\n            activeNotifications.forEach { notification ->\n                notification()\n            }\n        }\n    }\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun Android11Dialog(onDismissRequest: () -> Unit, onContinue: () -> Unit) {\n    AlertDialogExtended(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(onClick = onContinue, shapes = ButtonDefaults.shapes()) {\n                Text(stringResource(R.string.continue_))\n            }\n        },\n        title = {\n            Text(stringResource(R.string.android_11_bug_dialog_title))\n        },\n        icon = {\n            Icon(Icons.Outlined.BugReport, null)\n        },\n        text = {\n            Text(stringResource(R.string.android_11_bug_dialog_description))\n        }\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/InstalledAppInfoScreen.kt",
    "content": "package app.revanced.manager.ui.screen\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight\nimport androidx.compose.material.icons.automirrored.outlined.OpenInNew\nimport androidx.compose.material.icons.outlined.Circle\nimport androidx.compose.material.icons.outlined.Delete\nimport androidx.compose.material.icons.outlined.SettingsBackupRestore\nimport androidx.compose.material.icons.outlined.Update\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.rememberTopAppBarState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.SideEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.res.pluralStringResource\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.data.room.apps.installed.InstallType\nimport app.revanced.manager.ui.component.AppInfo\nimport app.revanced.manager.ui.component.AppTopBar\nimport app.revanced.manager.ui.component.ColumnWithScrollbar\nimport app.revanced.manager.ui.component.ListSection\nimport app.revanced.manager.ui.component.SegmentedButton\nimport app.revanced.manager.ui.component.settings.SettingsListItem\nimport app.revanced.manager.ui.viewmodel.InstalledAppInfoViewModel\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun InstalledAppInfoScreen(\n    onPatchClick: (packageName: String) -> Unit,\n    onBackClick: () -> Unit,\n    viewModel: InstalledAppInfoViewModel\n) {\n\n    SideEffect {\n        viewModel.onBackClick = onBackClick\n    }\n\n    var showUninstallDialog by rememberSaveable { mutableStateOf(false) }\n    var showAppliedPatchesDialog by rememberSaveable { mutableStateOf(false) }\n\n    if (showUninstallDialog)\n        UninstallDialog(\n            onDismiss = { showUninstallDialog = false },\n            onConfirm = { viewModel.uninstall() }\n        )\n    if (showAppliedPatchesDialog) {\n        AppliedPatchesDialog(\n            onDismissRequest = { showAppliedPatchesDialog = false },\n            appliedPatches = viewModel.appliedPatches,\n            patchBundles = viewModel.patchBundles\n        )\n    }\n\n    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())\n\n    Scaffold(\n        topBar = {\n            AppTopBar(\n                title = stringResource(R.string.app_info),\n                scrollBehavior = scrollBehavior,\n                onBackClick = onBackClick\n            )\n        },\n        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),\n    ) { paddingValues ->\n        ColumnWithScrollbar(\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(paddingValues)\n        ) {\n            val installedApp = viewModel.installedApp ?: return@ColumnWithScrollbar\n\n            AppInfo(viewModel.appInfo)  {\n                Text(installedApp.version, color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodyMedium)\n\n                if (installedApp.installType == InstallType.MOUNT) {\n                    Text(\n                        text = if (viewModel.isMounted) {\n                            stringResource(R.string.mounted)\n                        } else {\n                            stringResource(R.string.not_mounted)\n                        },\n                        style = MaterialTheme.typography.bodySmall\n                    )\n                }\n            }\n\n            Row(\n                horizontalArrangement = Arrangement.spacedBy(2.dp),\n                modifier = Modifier\n                    .padding(horizontal = 16.dp)\n                    .clip(RoundedCornerShape(24.dp))\n            ) {\n                SegmentedButton(\n                    icon = Icons.AutoMirrored.Outlined.OpenInNew,\n                    text = stringResource(R.string.open_app),\n                    onClick = viewModel::launch\n                )\n\n                when (installedApp.installType) {\n                    InstallType.DEFAULT -> SegmentedButton(\n                        icon = Icons.Outlined.Delete,\n                        text = stringResource(R.string.uninstall),\n                        onClick = viewModel::uninstall\n                    )\n\n                    InstallType.MOUNT -> {\n                        SegmentedButton(\n                            icon = Icons.Outlined.SettingsBackupRestore,\n                            text = stringResource(R.string.unpatch),\n                            onClick = { showUninstallDialog = true },\n                            enabled = viewModel.rootInstaller.hasRootAccess()\n                        )\n\n                        SegmentedButton(\n                            icon = Icons.Outlined.Circle,\n                            text = if (viewModel.isMounted) stringResource(R.string.unmount) else stringResource(R.string.mount),\n                            onClick = viewModel::mountOrUnmount,\n                            enabled = viewModel.rootInstaller.hasRootAccess()\n                        )\n                    }\n\n                }\n\n                SegmentedButton(\n                    icon = Icons.Outlined.Update,\n                    text = stringResource(R.string.repatch),\n                    onClick = {\n                        onPatchClick(installedApp.originalPackageName)\n                    },\n                    enabled = installedApp.installType != InstallType.MOUNT || viewModel.rootInstaller.hasRootAccess()\n                )\n            }\n\n            ListSection(\n                modifier = Modifier.padding(vertical = 16.dp)\n            ) {\n                SettingsListItem(\n                    headlineContent = stringResource(R.string.applied_patches),\n                    supportingContent = \n                            (viewModel.appliedPatches?.values?.sumOf { it.size } ?: 0).let {\n                                pluralStringResource(\n                                    id = R.plurals.patch_count,\n                                    it,\n                                    it\n                                )\n                            },\n                    trailingContent = { Icon(Icons.AutoMirrored.Filled.KeyboardArrowRight, contentDescription = stringResource(R.string.view_applied_patches)) },\n                    onClick = { showAppliedPatchesDialog = true },\n                    )\n\n                SettingsListItem(\n                    headlineContent = stringResource(R.string.package_name),\n                    supportingContent = installedApp.currentPackageName\n                )\n\n                if (installedApp.originalPackageName != installedApp.currentPackageName) {\n                    SettingsListItem(\n                        headlineContent = stringResource(R.string.original_package_name),\n                        supportingContent = installedApp.originalPackageName\n                    )\n                }\n\n                SettingsListItem(\n                    headlineContent = stringResource(R.string.install_type),\n                    supportingContent = stringResource(installedApp.installType.stringResource)\n                )\n            }\n        }\n    }\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun UninstallDialog(\n    onDismiss: () -> Unit,\n    onConfirm: () -> Unit\n) = AlertDialog(\n    onDismissRequest = onDismiss,\n    title = { Text(stringResource(R.string.unpatch_app)) },\n    text = { Text(stringResource(R.string.unpatch_description)) },\n    confirmButton = {\n        TextButton(\n            onClick = {\n                onConfirm()\n                onDismiss()\n            },\n            shapes = ButtonDefaults.shapes()\n        ) {\n            Text(stringResource(R.string.ok))\n        }\n    },\n    dismissButton = {\n        TextButton(\n            onClick = onDismiss, shapes = ButtonDefaults.shapes()\n        ) {\n            Text(stringResource(R.string.cancel))\n        }\n    }\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/InstalledAppsScreen.kt",
    "content": "package app.revanced.manager.ui.screen\n\nimport android.content.ActivityNotFoundException\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.animation.Crossfade\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material.icons.filled.Close\nimport androidx.compose.material.icons.filled.Storage\nimport androidx.compose.material.icons.outlined.Search\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItem\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.res.pluralStringResource\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport app.revanced.manager.R\nimport app.revanced.manager.data.room.apps.installed.InstalledApp\nimport app.revanced.manager.ui.component.AppIcon\nimport app.revanced.manager.ui.component.AppLabel\nimport app.revanced.manager.ui.component.LazyColumnWithScrollbar\nimport app.revanced.manager.ui.component.LoadingIndicator\nimport app.revanced.manager.ui.component.SearchBar\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.model.SelectedApp\nimport app.revanced.manager.ui.viewmodel.AppSelectorViewModel\nimport app.revanced.manager.ui.viewmodel.InstalledAppsViewModel\nimport app.revanced.manager.util.APK_MIMETYPE\nimport app.revanced.manager.util.EventEffect\nimport app.revanced.manager.util.toast\nimport app.revanced.manager.util.transparentListItemColors\nimport org.koin.androidx.compose.koinViewModel\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun InstalledAppsScreen(\n    onAppClick: (InstalledApp) -> Unit,\n    onPatchableAppClick: (String) -> Unit,\n    onStorageSelect: (SelectedApp.Local) -> Unit,\n    viewModel: InstalledAppsViewModel = koinViewModel(),\n    selectorVm: AppSelectorViewModel = koinViewModel()\n) {\n    val context = LocalContext.current\n    EventEffect(flow = selectorVm.storageSelectionFlow) {\n        onStorageSelect(it)\n    }\n\n    val pickApkLauncher =\n        rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { uri ->\n            uri?.let(selectorVm::handleStorageResult)\n        }\n\n    val installedApps by viewModel.apps.collectAsStateWithLifecycle()\n    val patchableApps by selectorVm.apps.collectAsStateWithLifecycle()\n\n    fun patchedPackageNames(apps: List<InstalledApp>?): Set<String> =\n        apps\n            ?.flatMap { listOf(it.currentPackageName, it.originalPackageName) }\n            ?.toSet()\n            .orEmpty()\n\n    fun InstalledApp.matchesQuery(query: String): Boolean {\n        if (query.isBlank()) return true\n\n        val packageInfo = viewModel.packageInfoMap[currentPackageName]\n        return currentPackageName.contains(query, ignoreCase = true) ||\n            originalPackageName.contains(query, ignoreCase = true) ||\n            selectorVm.loadLabel(packageInfo).contains(query, ignoreCase = true)\n    }\n\n    fun patchableMatchesQuery(packageName: String, label: String?, query: String): Boolean {\n        if (query.isBlank()) return true\n\n        return packageName.contains(query, ignoreCase = true) ||\n            label?.contains(query, ignoreCase = true) == true\n    }\n\n    var searchExpanded by rememberSaveable { mutableStateOf(false) }\n    val filterText by selectorVm.filterText.collectAsStateWithLifecycle()\n\n    val TITLE_HORIZONTAL = 16.dp\n    val TITLE_VERTICAL = 8.dp\n\n    Scaffold(\n        topBar = {\n            Box(modifier = Modifier.padding(horizontal = if (searchExpanded) 0.dp else 16.dp)) {\n                SearchBar(\n                    query = filterText,\n                    onQueryChange = selectorVm::setFilterText,\n                    expanded = searchExpanded,\n                    onExpandedChange = { searchExpanded = it },\n                    placeholder = { Text(stringResource(R.string.search_apps)) },\n                    windowInsets = WindowInsets(0, 0, 0, 0),\n                    leadingIcon = {\n                        TooltipIconButton(\n                            onClick = {\n                                if (searchExpanded) {\n                                    searchExpanded = false\n                                    selectorVm.setFilterText(\"\")\n                                }\n                            },\n                            tooltip = if (searchExpanded) stringResource(R.string.back) else stringResource(R.string.search),\n                        ) { _ ->\n                            Crossfade(\n                                targetState = searchExpanded,\n                                label = \"SearchIcon\"\n                            ) { expanded ->\n                                Icon(\n                                    imageVector = if (expanded) Icons.AutoMirrored.Filled.ArrowBack else Icons.Outlined.Search,\n                                    contentDescription = if (expanded) stringResource(R.string.back) else stringResource(R.string.search)\n                                )\n                            }\n                        }\n                    },\n                    trailingIcon = {\n                        if (searchExpanded && filterText.isNotEmpty()) {\n                            TooltipIconButton(\n                                onClick = { selectorVm.setFilterText(\"\") },\n                                tooltip = stringResource(R.string.clear),\n                            ) { contentDescription ->\n                                Icon(\n                                    imageVector = Icons.Filled.Close,\n                                    contentDescription = contentDescription\n                                )\n                            }\n                        }\n                    },\n                ) {\n                    val query = filterText.trim()\n                    val patched = installedApps\n                    val patchable = patchableApps\n                    val patchedPkgNames = patchedPackageNames(patched)\n                    val filteredPatchedApps = patched\n                        ?.filter { it.matchesQuery(query) }\n                        .orEmpty()\n                    val filteredPatchableApps = patchable\n                        ?.filter { app ->\n                            app.packageName !in patchedPkgNames &&\n                                patchableMatchesQuery(\n                                    packageName = app.packageName,\n                                    label = selectorVm.loadLabel(app.packageInfo),\n                                    query = query\n                                )\n                        }\n                        .orEmpty()\n\n                    Box(\n                        modifier = Modifier\n                            .fillMaxWidth()\n                            .weight(1f)\n                            .background(MaterialTheme.colorScheme.surface)\n                    ) {\n                        if (patched == null || patchable == null) {\n                            Box(\n                                modifier = Modifier.fillMaxSize(),\n                                contentAlignment = Alignment.Center\n                            ) {\n                                LoadingIndicator()\n                            }\n                        } else {\n                            LazyColumnWithScrollbar(modifier = Modifier.fillMaxSize()) {\n                                if (filteredPatchedApps.isNotEmpty()) {\n                                    item(key = \"SEARCH_HEADER_PATCHED\") {\n                                        Row(\n                                            modifier = Modifier\n                                                .fillMaxWidth()\n                                                .padding(horizontal = TITLE_HORIZONTAL, vertical = TITLE_VERTICAL),\n                                            verticalAlignment = Alignment.CenterVertically,\n                                            horizontalArrangement = Arrangement.SpaceBetween\n                                        ) {\n                                            Text(\n                                                text = stringResource(R.string.patched_apps_section_title),\n                                                color = MaterialTheme.colorScheme.primary,\n                                                style = MaterialTheme.typography.labelLarge,\n                                            )\n                                        }\n                                    }\n                                }\n\n                                items(\n                                    items = filteredPatchedApps,\n                                    key = { \"SEARCH_PATCHED-${it.currentPackageName}\" },\n                                    contentType = { \"SEARCH_PATCHED\" }\n                                ) { installedApp ->\n                                    val packageInfo = viewModel.packageInfoMap[installedApp.currentPackageName]\n\n                                    ListItem(\n                                        modifier = Modifier.clickable {\n                                            searchExpanded = false\n                                            selectorVm.setFilterText(\"\")\n                                            onAppClick(installedApp)\n                                        },\n                                        leadingContent = {\n                                            AppIcon(\n                                                packageInfo = packageInfo,\n                                                contentDescription = null,\n                                                modifier = Modifier.size(36.dp)\n                                            )\n                                        },\n                                        headlineContent = {\n                                            AppLabel(packageInfo, defaultText = installedApp.currentPackageName)\n                                        },\n                                        supportingContent = {\n                                            Text(installedApp.currentPackageName)\n                                        },\n                                        colors = transparentListItemColors\n                                    )\n                                }\n\n                                if (filteredPatchableApps.isNotEmpty()) {\n                                    item(key = \"SEARCH_HEADER_PATCHABLE\") {\n                                        Text(\n                                            text = stringResource(R.string.patchable_apps_section_title),\n                                            color = MaterialTheme.colorScheme.primary,\n                                            style = MaterialTheme.typography.labelLarge,\n                                            modifier = Modifier\n                                                .fillMaxWidth()\n                                                .padding(horizontal = TITLE_HORIZONTAL, vertical = TITLE_VERTICAL)\n                                        )\n                                    }\n                                }\n\n                                items(\n                                    items = filteredPatchableApps,\n                                    key = { \"SEARCH_PATCHABLE-${it.packageName}\" },\n                                    contentType = { \"SEARCH_PATCHABLE\" }\n                                ) { app ->\n                                    ListItem(\n                                        modifier = Modifier.clickable {\n                                            searchExpanded = false\n                                            selectorVm.setFilterText(\"\")\n                                            onPatchableAppClick(app.packageName)\n                                        },\n                                        leadingContent = {\n                                            AppIcon(\n                                                packageInfo = app.packageInfo,\n                                                contentDescription = null,\n                                                modifier = Modifier.size(36.dp)\n                                            )\n                                        },\n                                        headlineContent = {\n                                            AppLabel(app.packageInfo, defaultText = app.packageName)\n                                        },\n                                        supportingContent = app.patches?.let { patchCount ->\n                                            {\n                                                Text(\n                                                    pluralStringResource(\n                                                        R.plurals.patch_count,\n                                                        patchCount,\n                                                        patchCount\n                                                    )\n                                                )\n                                            }\n                                        },\n                                        trailingContent = if (app.packageInfo == null) {\n                                            { Text(stringResource(R.string.not_installed)) }\n                                        } else null,\n                                        colors = transparentListItemColors\n                                    )\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    ) { paddingValues ->\n        if (searchExpanded) return@Scaffold\n\n        LazyColumnWithScrollbar(\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(paddingValues)\n                .padding(top = TITLE_VERTICAL),\n            horizontalAlignment = Alignment.CenterHorizontally,\n            verticalArrangement = Arrangement.Top,\n        ) {\n            val patched = installedApps\n            val patchable = patchableApps\n\n            if (patched == null || patchable == null) {\n                item(key = \"LOADING\") {\n                    Box(\n                        modifier = Modifier.fillParentMaxSize(),\n                        contentAlignment = Alignment.Center\n                    ) {\n                        LoadingIndicator()\n                    }\n                }\n                return@LazyColumnWithScrollbar\n            }\n\n            val patchedPackageNames = patchedPackageNames(patched)\n            val visiblePatchableApps = patchable.filter { it.packageName !in patchedPackageNames }\n\n            if (patched.isNotEmpty()) {\n                item(key = \"HEADER_PATCHED\") {\n                    Row(\n                        modifier = Modifier\n                            .fillMaxWidth()\n                            .padding(horizontal = TITLE_HORIZONTAL, vertical = TITLE_VERTICAL),\n                        verticalAlignment = Alignment.CenterVertically,\n                        horizontalArrangement = Arrangement.SpaceBetween\n                    ) {\n                        Text(\n                            text = stringResource(R.string.patched_apps_section_title),\n                            color = MaterialTheme.colorScheme.primary,\n                            style = MaterialTheme.typography.labelLarge,\n                        )\n                    }\n                }\n\n                items(\n                    items = patched,\n                    key = { \"PATCHED-${it.currentPackageName}\" },\n                    contentType = { \"PATCHED\" },\n                ) { installedApp ->\n                    val packageInfo = viewModel.packageInfoMap[installedApp.currentPackageName]\n\n                    ListItem(\n                        modifier = Modifier.clickable { onAppClick(installedApp) },\n                        leadingContent = {\n                            AppIcon(\n                                packageInfo,\n                                contentDescription = null,\n                                modifier = Modifier.size(36.dp)\n                            )\n                        },\n                        headlineContent = { AppLabel(packageInfo, defaultText = null) },\n                        supportingContent = { Text(installedApp.currentPackageName) },\n                        colors = transparentListItemColors\n                    )\n                }\n            }\n\n            item(key = \"HEADER_PATCHABLE\") {\n                Text(\n                    text = stringResource(R.string.patchable_apps_section_title),\n                    color = MaterialTheme.colorScheme.primary,\n                    style = MaterialTheme.typography.labelLarge,\n                    modifier = Modifier\n                        .fillMaxWidth()\n                        .padding(horizontal = TITLE_HORIZONTAL, vertical = TITLE_VERTICAL)\n                )\n            }\n\n            item(key = \"PATCHABLE_STORAGE\") {\n                ListItem(\n                    modifier = Modifier.clickable { try {\n                        pickApkLauncher.launch(APK_MIMETYPE)\n                    } catch (_: ActivityNotFoundException) {\n                        context.toast(R.string.no_file_picker_found)\n                    } },\n                    leadingContent = {\n                        Box(Modifier.size(36.dp), Alignment.Center) {\n                            Icon(\n                                Icons.Default.Storage,\n                                null,\n                                modifier = Modifier.size(24.dp)\n                            )\n                        }\n                    },\n                    headlineContent = { Text(stringResource(R.string.select_from_storage)) },\n                    supportingContent = {\n                        Text(stringResource(R.string.select_from_storage_description))\n                    },\n                    colors = transparentListItemColors\n                )\n            }\n\n            items(\n                items = visiblePatchableApps,\n                key = { \"PATCHABLE-${it.packageName}\" },\n                contentType = { \"PATCHABLE\" },\n            ) { app ->\n                ListItem(\n                    modifier = Modifier.clickable { onPatchableAppClick(app.packageName) },\n                    leadingContent = {\n                        AppIcon(\n                            packageInfo = app.packageInfo,\n                            contentDescription = null,\n                            modifier = Modifier.size(36.dp)\n                        )\n                    },\n                    headlineContent = {\n                        AppLabel(\n                            app.packageInfo,\n                            defaultText = app.packageName\n                        )\n                    },\n                    supportingContent = app.patches?.let { patchCount ->\n                        {\n                            Text(\n                                pluralStringResource(\n                                    R.plurals.patch_count,\n                                    patchCount,\n                                    patchCount\n                                )\n                            )\n                        }\n                    },\n                    trailingContent = if (app.packageInfo == null) {\n                        { Text(stringResource(R.string.not_installed)) }\n                    } else null,\n                    colors = transparentListItemColors\n                )\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/OnboardingScreen.kt",
    "content": "package app.revanced.manager.ui.screen\n\nimport android.Manifest\nimport android.annotation.SuppressLint\nimport android.content.Intent\nimport android.net.Uri\nimport android.os.Build\nimport android.provider.Settings\nimport androidx.activity.compose.BackHandler\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.appcompat.content.res.AppCompatResources\nimport androidx.compose.animation.AnimatedContent\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.animation.slideInHorizontally\nimport androidx.compose.animation.slideOutHorizontally\nimport androidx.compose.animation.togetherWith\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.BoxWithConstraints\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.ColumnScope\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowForward\nimport androidx.compose.material.icons.outlined.WarningAmber\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalResources\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.unit.dp\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.BottomContentBar\nimport app.revanced.manager.ui.component.ColumnWithScrollbarEdgeShadow\nimport app.revanced.manager.ui.screen.onboarding.AppsStepContent\nimport app.revanced.manager.ui.screen.onboarding.PermissionsStepContent\nimport app.revanced.manager.ui.screen.onboarding.UpdatesStepContent\nimport app.revanced.manager.ui.viewmodel.OnboardingStep\nimport app.revanced.manager.ui.viewmodel.OnboardingViewModel\nimport app.revanced.manager.util.RequestInstallAppsContract\nimport com.google.accompanist.drawablepainter.rememberDrawablePainter\nimport kotlinx.coroutines.launch\nimport org.koin.androidx.compose.koinViewModel\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@SuppressLint(\"BatteryLife\")\n@Composable\nfun OnboardingScreen(\n    onFinish: () -> Unit,\n    onAppClick: (String) -> Unit,\n    vm: OnboardingViewModel = koinViewModel()\n) {\n    val context = LocalContext.current\n    val apps by vm.apps.collectAsStateWithLifecycle(initialValue = null)\n    val suggestedVersions by vm.suggestedVersions.collectAsStateWithLifecycle(initialValue = emptyMap())\n    val hasNetworkError by vm.hasNetworkError.collectAsStateWithLifecycle(initialValue = false)\n    val currentStep = vm.currentStep\n    val scope = rememberCoroutineScope()\n\n    var managerUpdatesEnabled by rememberSaveable { mutableStateOf(true) }\n    var patchesUpdatesEnabled by rememberSaveable { mutableStateOf(true) }\n    var downloaderUpdatesEnabled by rememberSaveable { mutableStateOf(true) }\n    var showSkipPermissionsDialog by remember { mutableStateOf(false) }\n\n    val installAppsLauncher = rememberLauncherForActivityResult(RequestInstallAppsContract) {\n        vm.refreshPermissionStates()\n    }\n\n    val notificationLauncher = rememberLauncherForActivityResult(\n        ActivityResultContracts.RequestPermission()\n    ) {\n        vm.refreshPermissionStates()\n    }\n\n    val batteryOptimizationLauncher = rememberLauncherForActivityResult(\n        ActivityResultContracts.StartActivityForResult()\n    ) {\n        vm.refreshPermissionStates()\n    }\n\n    BackHandler(enabled = currentStep != OnboardingStep.Permissions) {\n        vm.retreat()\n    }\n\n    val (stepTitle, stepDescription, stepButtons) = when (currentStep) {\n        OnboardingStep.Permissions -> Triple(\n            stringResource(R.string.onboarding_permissions_subtitle),\n            stringResource(R.string.onboarding_permissions_skip_description),\n            StepButtons(\n                primaryAction = { vm.advance() },\n                primaryEnabled = vm.allPermissionsGranted,\n                secondaryAction = if (!vm.allPermissionsGranted) {\n                    { showSkipPermissionsDialog = true }\n                } else null\n            )\n        )\n\n        OnboardingStep.Updates -> Triple(\n            stringResource(R.string.onboarding_updates_subtitle),\n            stringResource(R.string.auto_updates_dialog_note, vm.apiUrl),\n            StepButtons(\n                primaryAction = {\n                    scope.launch {\n                        vm.applyAutoUpdatePrefs(\n                            managerEnabled = managerUpdatesEnabled,\n                            patchesEnabled = patchesUpdatesEnabled,\n                            downloadersEnabled = downloaderUpdatesEnabled,\n                        )\n                    }\n                    vm.advance()\n                },\n            )\n        )\n\n        OnboardingStep.Apps -> Triple(\n            stringResource(R.string.select_app),\n            stringResource(R.string.onboarding_apps_subtitle),\n            StepButtons(\n                primaryTextRes = null,\n                secondaryAction = {\n                    scope.launch {\n                        vm.completeOnboarding()\n                        onFinish()\n                    }\n                }\n            )\n        )\n    }\n\n    val onboardingButtons: @Composable () -> Unit = {\n        OnboardingButtons(stepButtons)\n    }\n\n    val stepContent: @Composable ColumnScope.(showDetails: Boolean) -> Unit = { showDetails ->\n        AnimatedContent(\n            modifier = Modifier\n                .padding(vertical = 16.dp)\n                .weight(1f),\n            targetState = currentStep,\n            transitionSpec = {\n                val direction = if (targetState.ordinal > initialState.ordinal) 1 else -1\n                (slideInHorizontally { width -> width * direction } + fadeIn())\n                    .togetherWith(slideOutHorizontally { width -> -width * direction } + fadeOut())\n            },\n            label = \"onboarding_content\",\n        ) { step ->\n            ColumnWithScrollbarEdgeShadow(\n                modifier = Modifier.fillMaxSize(),\n                verticalArrangement = Arrangement.spacedBy(16.dp)\n            ) {\n                if (showDetails) StepTitle(stepTitle)\n                when (step) {\n                    OnboardingStep.Permissions -> PermissionsStepContent(\n                        canInstallUnknownApps = vm.canInstallUnknownApps,\n                        isNotificationsEnabled = vm.isNotificationsEnabled,\n                        isBatteryOptimizationExempt = vm.isBatteryOptimizationExempt,\n                        onRequestInstallApps = { installAppsLauncher.launch(context.packageName) },\n                        onRequestNotifications = {\n                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                                notificationLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)\n                            }\n                        },\n                        onRequestBatteryOptimization = {\n                            batteryOptimizationLauncher.launch(\n                                Intent(\n                                    Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,\n                                    Uri.fromParts(\"package\", context.packageName, null)\n                                )\n                            )\n                        }\n                    )\n\n                    OnboardingStep.Updates -> UpdatesStepContent(\n                        managerEnabled = managerUpdatesEnabled,\n                        patchesEnabled = patchesUpdatesEnabled,\n                        downloadersEnabled = downloaderUpdatesEnabled,\n                        onManagerEnabledChange = { managerUpdatesEnabled = it },\n                        onPatchesEnabledChange = { patchesUpdatesEnabled = it },\n                        onDownloadersEnabledChange = { downloaderUpdatesEnabled = it },\n                    )\n\n                    OnboardingStep.Apps -> AppsStepContent(\n                        modifier = Modifier.weight(1f),\n                        apps = apps,\n                        hasNetworkError = hasNetworkError,\n                        suggestedVersions = suggestedVersions,\n                        onAppClick = { packageName ->\n                            scope.launch {\n                                vm.completeOnboarding()\n                                onAppClick(packageName)\n                            }\n                        }\n                    )\n                }\n                if (showDetails) StepDescription(stepDescription)\n            }\n        }\n    }\n\n    Scaffold { paddingValues ->\n        BoxWithConstraints(\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(paddingValues)\n        ) {\n            val useSplitLayout = maxWidth >= maxHeight\n\n            if (useSplitLayout) {\n                Row(modifier = Modifier.fillMaxSize()) {\n                    Box(\n                        modifier = Modifier\n                            .weight(1f)\n                            .fillMaxHeight()\n                    ) {\n                        ColumnWithScrollbarEdgeShadow(\n                            modifier = Modifier\n                                .fillMaxSize()\n                                .padding(start = 16.dp, end = 12.dp, top = 24.dp, bottom = 24.dp),\n                            verticalArrangement = Arrangement.spacedBy(24.dp)\n                        ) {\n                            OnboardingHeader()\n                            StepDetails(title = stepTitle, description = stepDescription)\n                        }\n                    }\n\n                    Column(\n                        modifier = Modifier\n                            .weight(1f)\n                            .fillMaxHeight()\n                            .padding(vertical = 24.dp),\n                        verticalArrangement = Arrangement.spacedBy(24.dp)\n                    ) {\n                        stepContent(false)\n                        Box(modifier = Modifier.padding(horizontal = 16.dp)) {\n                            onboardingButtons()\n                        }\n                    }\n                }\n            } else {\n                Column(\n                    modifier = Modifier\n                        .fillMaxSize()\n                        .padding(16.dp, 24.dp),\n                ) {\n                    OnboardingHeader()\n                    stepContent(true)\n                    onboardingButtons()\n                }\n            }\n        }\n\n        if (showSkipPermissionsDialog) {\n            AlertDialog(\n                onDismissRequest = { showSkipPermissionsDialog = false },\n                title = { Text(stringResource(R.string.onboarding_permissions_skip_title)) },\n                text = { Text(stringResource(R.string.onboarding_permissions_skip_description)) },\n                confirmButton = {\n                    TextButton(\n                        onClick = {\n                            showSkipPermissionsDialog = false\n                            vm.advance()\n                        },\n                        shapes = ButtonDefaults.shapes()\n                    ) {\n                        Text(stringResource(R.string.onboarding_permissions_skip_anyway))\n                    }\n                },\n                dismissButton = {\n                    TextButton(\n                        onClick = { showSkipPermissionsDialog = false },\n                        shapes = ButtonDefaults.shapes()\n                    ) {\n                        Text(stringResource(R.string.cancel))\n                    }\n                }\n            )\n        }\n\n        if (!vm.isDeviceSupported) {\n            AlertDialog(\n                onDismissRequest = {},\n                icon = {\n                    Icon(\n                        imageVector = Icons.Outlined.WarningAmber,\n                        contentDescription = null,\n                        tint = MaterialTheme.colorScheme.error\n                    )\n                },\n                title = { Text(stringResource(R.string.onboarding_unsupported_device_title)) },\n                text = { Text(stringResource(R.string.onboarding_unsupported_device_description)) },\n                confirmButton = {}\n            )\n        }\n    }\n}\n\n@Composable\nprivate fun StepDetails(title: String, description: String) {\n    Column(verticalArrangement = Arrangement.spacedBy(12.dp)) {\n        Text(\n            text = title,\n            style = MaterialTheme.typography.headlineSmall,\n            color = MaterialTheme.colorScheme.onSurface,\n            modifier = Modifier.fillMaxWidth()\n        )\n        Text(\n            text = description,\n            style = MaterialTheme.typography.bodyLarge,\n            color = MaterialTheme.colorScheme.onSurfaceVariant,\n            modifier = Modifier.fillMaxWidth()\n        )\n    }\n}\n\n@Composable\nprivate fun StepTitle(title: String) {\n    Text(\n        text = title,\n        style = MaterialTheme.typography.bodyLarge,\n        color = MaterialTheme.colorScheme.onSurfaceVariant,\n        modifier = Modifier.fillMaxWidth()\n    )\n}\n\n@Composable\nprivate fun StepDescription(description: String) {\n    Text(\n        text = description,\n        style = MaterialTheme.typography.bodySmall,\n        color = MaterialTheme.colorScheme.onSurfaceVariant,\n        modifier = Modifier.fillMaxWidth()\n    )\n}\n\n@Composable\nprivate fun OnboardingHeader() {\n    val context = LocalContext.current\n    val resources = LocalResources.current\n    val icon = rememberDrawablePainter(drawable = remember(resources) {\n        AppCompatResources.getDrawable(context, R.drawable.ic_logo_ring)\n    })\n\n    Row(\n        verticalAlignment = Alignment.CenterVertically,\n        modifier = Modifier.fillMaxWidth()\n    ) {\n        Column(verticalArrangement = Arrangement.spacedBy(16.dp)) {\n            Text(\n                text = stringResource(R.string.onboarding_welcome_to),\n                style = MaterialTheme.typography.headlineMedium,\n                color = MaterialTheme.colorScheme.onSurface\n            )\n            Row(\n                horizontalArrangement = Arrangement.spacedBy(12.dp),\n                verticalAlignment = Alignment.CenterVertically\n            ) {\n                Image(\n                    painter = icon,\n                    contentDescription = null,\n                    modifier = Modifier.size(40.dp)\n                )\n                Text(\n                    text = stringResource(R.string.app_name),\n                    style = MaterialTheme.typography.headlineLarge,\n                    fontWeight = FontWeight.Bold,\n                    color = MaterialTheme.colorScheme.onSurface\n                )\n            }\n        }\n    }\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nprivate fun OnboardingButtons(stepButtons: StepButtons) {\n    BottomContentBar(contentPadding = PaddingValues(0.dp)) {\n        stepButtons.secondaryAction?.let { action ->\n            TextButton(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(56.dp),\n                onClick = action,\n                shapes = ButtonDefaults.shapes()\n            ) {\n                Text(text = stringResource(stepButtons.secondaryTextRes!!))\n            }\n        }\n        stepButtons.primaryTextRes?.let { textRes ->\n            Button(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(56.dp),\n                onClick = stepButtons.primaryAction,\n                enabled = stepButtons.primaryEnabled,\n                shapes = ButtonDefaults.shapes()\n            ) {\n                Text(text = stringResource(textRes))\n                Spacer(modifier = Modifier.width(8.dp))\n                Icon(\n                    imageVector = Icons.AutoMirrored.Filled.ArrowForward,\n                    contentDescription = null\n                )\n            }\n        }\n    }\n}\n\ndata class StepButtons(\n    val primaryTextRes: Int? = R.string.next,\n    val primaryAction: () -> Unit = {},\n    val primaryEnabled: Boolean = true,\n    val secondaryTextRes: Int? = R.string.onboarding_skip,\n    val secondaryAction: (() -> Unit)? = null\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/PatcherScreen.kt",
    "content": "package app.revanced.manager.ui.screen\n\nimport android.app.Activity\nimport android.os.Build\nimport android.view.WindowManager\nimport androidx.activity.compose.BackHandler\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.activity.result.contract.ActivityResultContracts.CreateDocument\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.outlined.OpenInNew\nimport androidx.compose.material.icons.outlined.Cancel\nimport androidx.compose.material.icons.outlined.FileDownload\nimport androidx.compose.material.icons.outlined.PostAdd\nimport androidx.compose.material.icons.outlined.Save\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.BottomAppBar\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.FloatingActionButtonDefaults\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.LinearWavyProgressIndicator\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.DisposableEffect\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.livedata.observeAsState\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalResources\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.data.room.apps.installed.InstallType\nimport app.revanced.manager.ui.component.AppScaffold\nimport app.revanced.manager.ui.component.AppTopBar\nimport app.revanced.manager.ui.component.ConfirmDialog\nimport app.revanced.manager.ui.component.InstallerStatusDialog\nimport app.revanced.manager.ui.component.ShareSheet\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.haptics.HapticExtendedFloatingActionButton\nimport app.revanced.manager.ui.component.patcher.InstallPickerDialog\nimport app.revanced.manager.ui.component.patcher.Steps\nimport app.revanced.manager.ui.model.StepCategory\nimport app.revanced.manager.ui.viewmodel.PatcherViewModel\nimport app.revanced.manager.util.APK_MIMETYPE\nimport app.revanced.manager.util.EventEffect\nimport app.revanced.manager.util.toast\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun PatcherScreen(\n    onBackClick: () -> Unit,\n    viewModel: PatcherViewModel\n) {\n    fun onLeave() {\n        viewModel.onBack()\n        onBackClick()\n    }\n\n    val context = LocalContext.current\n    val resources = LocalResources.current\n    var showLogExportSheet by rememberSaveable { mutableStateOf(false) }\n    val exportApkLauncher = rememberLauncherForActivityResult(CreateDocument(APK_MIMETYPE), viewModel::export)\n    val saveLogsLauncher = rememberLauncherForActivityResult(CreateDocument(\"text/plain\")) { uri ->\n            viewModel.saveLogs(uri)\n            showLogExportSheet = false\n            viewModel.clearPreparedLogExport()\n        }\n\n    val patcherSucceeded by viewModel.patcherSucceeded.observeAsState(null)\n    val canInstall by remember { derivedStateOf { patcherSucceeded == true && (viewModel.installedPackageName != null || !viewModel.isInstalling) } }\n    var showInstallPicker by rememberSaveable { mutableStateOf(false) }\n    var showDismissConfirmationDialog by rememberSaveable { mutableStateOf(false) }\n\n    fun onPageBack() = when {\n        patcherSucceeded == null -> showDismissConfirmationDialog = true\n        viewModel.isInstalling -> context.toast(resources.getString(R.string.patcher_install_in_progress))\n        else -> onLeave()\n    }\n\n    BackHandler(onBack = ::onPageBack)\n\n    val steps by remember {\n        derivedStateOf {\n            viewModel.steps.groupBy { it.category }.toList()\n        }\n    }\n\n    if (patcherSucceeded == null) {\n        DisposableEffect(Unit) {\n            val window = (context as Activity).window\n            window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)\n            onDispose {\n                window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)\n            }\n        }\n    }\n\n    if (showInstallPicker)\n        InstallPickerDialog(\n            onDismiss = { showInstallPicker = false },\n            onConfirm = viewModel::install\n        )\n\n    if (showDismissConfirmationDialog) {\n        ConfirmDialog(\n            onDismiss = { showDismissConfirmationDialog = false },\n            onConfirm = ::onLeave,\n            title = stringResource(R.string.patcher_stop_confirm_title),\n            description = stringResource(R.string.patcher_stop_confirm_description),\n            icon = Icons.Outlined.Cancel\n        )\n    }\n\n    if (showLogExportSheet) {\n        ShareSheet(\n            onDismissRequest = {\n                showLogExportSheet = false\n                viewModel.clearPreparedLogExport()\n            },\n            title = stringResource(R.string.export_patcher_logs),\n            preview = viewModel.logPreviewText,\n            shareUri = viewModel.preparedLogUri,\n            onSaveToFilesClick = {\n                saveLogsLauncher.launch(viewModel.logFileName())\n            },\n            onCopyToClipboard = {\n                viewModel.copyLogs(context)\n                showLogExportSheet = false\n                viewModel.clearPreparedLogExport()\n            }\n        )\n    }\n\n    viewModel.packageInstallerStatus?.let {\n        InstallerStatusDialog(it, viewModel, viewModel::dismissPackageInstallerDialog)\n    }\n\n    val activityLauncher = rememberLauncherForActivityResult(\n        contract = ActivityResultContracts.StartActivityForResult(),\n        onResult = viewModel::handleActivityResult\n    )\n    EventEffect(flow = viewModel.launchActivityFlow) { intent ->\n        activityLauncher.launch(intent)\n    }\n\n    viewModel.activityPromptDialog?.let { title ->\n        AlertDialog(\n            onDismissRequest = viewModel::rejectInteraction,\n            confirmButton = {\n                TextButton(\n                    onClick = viewModel::allowInteraction,\n                    shapes = ButtonDefaults.shapes()\n                ) {\n                    Text(stringResource(R.string.continue_))\n                }\n            },\n            dismissButton = {\n                TextButton(\n                    onClick = viewModel::rejectInteraction,\n                    shapes = ButtonDefaults.shapes()\n                ) {\n                    Text(stringResource(R.string.cancel))\n                }\n            },\n            title = { Text(title) },\n            text = {\n                Text(stringResource(R.string.downloader_activity_dialog_body))\n            }\n        )\n    }\n\n    AppScaffold(\n        topBar = { scrollBehavior ->\n            AppTopBar(\n                title = stringResource(R.string.patcher),\n                scrollBehavior = scrollBehavior,\n                onBackClick = ::onPageBack\n            )\n        },\n        bottomBar = {\n            BottomAppBar(\n                actions = {\n                    TooltipIconButton(\n                        onClick = { exportApkLauncher.launch(\"${viewModel.packageName}_${viewModel.version}_revanced_patched.apk\") },\n                        tooltip = stringResource(id = R.string.save_apk),\n                        enabled = patcherSucceeded == true,\n                    ) { contentDescription ->\n                        Icon(Icons.Outlined.Save, contentDescription)\n                    }\n                    TooltipIconButton(\n                        onClick = {\n                            viewModel.prepareLogExport()\n                            showLogExportSheet = true\n                        },\n                        tooltip = stringResource(id = R.string.save_logs),\n                        enabled = patcherSucceeded != null,\n                    ) { contentDescription ->\n                        Icon(Icons.Outlined.PostAdd, contentDescription)\n                    }\n                },\n                floatingActionButton = {\n                    AnimatedVisibility(visible = canInstall) {\n                        HapticExtendedFloatingActionButton(\n                            tooltip = stringResource(\n                                if (viewModel.installedPackageName == null) R.string.install_app else R.string.open_app\n                            ),\n                            text = {\n                                Text(\n                                    stringResource(if (viewModel.installedPackageName == null) R.string.install_app else R.string.open_app)\n                                )\n                            },\n                            icon = {\n                                viewModel.installedPackageName?.let {\n                                    Icon(\n                                        Icons.AutoMirrored.Outlined.OpenInNew,\n                                        stringResource(R.string.open_app)\n                                    )\n                                } ?: Icon(\n                                    Icons.Outlined.FileDownload,\n                                    stringResource(R.string.install_app)\n                                )\n                            },\n                            onClick = {\n                                if (viewModel.installedPackageName == null)\n                                    if (viewModel.isDeviceRooted()) showInstallPicker = true\n                                    else viewModel.install(InstallType.DEFAULT)\n                                else viewModel.open()\n                            },\n                            elevation = FloatingActionButtonDefaults.elevation(\n                                defaultElevation = 0.dp,\n                                pressedElevation = 0.dp,\n                                focusedElevation = 0.dp,\n                                hoveredElevation = 0.dp,\n                            )\n                        )\n                    }\n                }\n            )\n        }\n    ) { paddingValues ->\n        Column(\n            modifier = Modifier\n                .padding(paddingValues)\n                .fillMaxSize()\n        ) {\n            var expandedCategory by rememberSaveable { mutableStateOf<StepCategory?>(null) }\n\n            val expandCategory: (StepCategory?) -> Unit = { category ->\n                expandedCategory = category\n            }\n\n            LinearWavyProgressIndicator(\n                progress = { viewModel.progress },\n                modifier = Modifier.fillMaxWidth()\n            )\n\n            LazyColumn(\n                modifier = Modifier.fillMaxSize(),\n                verticalArrangement = Arrangement.spacedBy(16.dp),\n                contentPadding = PaddingValues(16.dp)\n            ) {\n                items(\n                    items = steps,\n                    key = { it.first }\n                ) { (category, steps) ->\n                    Steps(\n                        category = category,\n                        steps = steps,\n                        isExpanded = expandedCategory == category,\n                        onExpand = { expandCategory(category) },\n                        onClick = {\n                            expandCategory(if (expandedCategory == category) null else category)\n                        }\n                    )\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/PatchesSelectorScreen.kt",
    "content": "package app.revanced.manager.ui.screen\n\nimport androidx.compose.animation.AnimatedContent\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.fadeIn\nimport androidx.compose.animation.fadeOut\nimport androidx.compose.animation.slideInHorizontally\nimport androidx.compose.animation.slideOutHorizontally\nimport androidx.compose.animation.togetherWith\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.WindowInsets\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.systemBars\nimport androidx.compose.foundation.lazy.LazyListScope\nimport androidx.compose.foundation.lazy.itemsIndexed\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material.icons.filled.Close\nimport androidx.compose.material.icons.outlined.FilterList\nimport androidx.compose.material.icons.outlined.Restore\nimport androidx.compose.material.icons.outlined.Save\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.SmallFloatingActionButton\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.produceState\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.runtime.snapshotFlow\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.zIndex\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport app.revanced.manager.R\nimport app.revanced.manager.patcher.patch.PatchBundleInfo\nimport app.revanced.manager.patcher.patch.PatchInfo\nimport app.revanced.manager.ui.component.LazyColumnWithScrollbar\nimport app.revanced.manager.ui.component.SearchBar\nimport app.revanced.manager.ui.component.TooltipHost\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.haptics.HapticExtendedFloatingActionButton\nimport app.revanced.manager.ui.component.patches.BundleSection\nimport app.revanced.manager.ui.component.patches.IncompatiblePatchDialog\nimport app.revanced.manager.ui.component.patches.IncompatiblePatchesDialog\nimport app.revanced.manager.ui.component.patches.OptionsDialog\nimport app.revanced.manager.ui.component.patches.PatchItem\nimport app.revanced.manager.ui.component.patches.PatchesFilterBottomSheet\nimport app.revanced.manager.ui.component.patches.PatchesListHeader\nimport app.revanced.manager.ui.component.patches.SelectionWarningDialog\nimport app.revanced.manager.ui.component.patches.SourceSectionHeader\nimport app.revanced.manager.ui.component.patches.UniversalPatchWarningDialog\nimport app.revanced.manager.ui.component.patches.buildBundleSections\nimport app.revanced.manager.ui.viewmodel.PatchesSelectorViewModel\nimport app.revanced.manager.ui.viewmodel.PatchesSelectorViewModel.DialogState\nimport app.revanced.manager.util.Options\nimport app.revanced.manager.util.PatchSelection\nimport app.revanced.manager.util.isScrollingUp\nimport kotlinx.coroutines.FlowPreview\nimport kotlinx.coroutines.flow.sample\n\n@OptIn(ExperimentalMaterial3Api::class, FlowPreview::class)\n@Composable\nfun PatchesSelectorScreen(\n    onSave: (PatchSelection?, Options) -> Unit,\n    onBackClick: () -> Unit,\n    onBundleInfoClick: (Int) -> Unit,\n    isSourceEditMode: Boolean = false,\n    onSourceDeleteRequest: ((Int) -> Unit)? = null,\n    viewModel: PatchesSelectorViewModel\n) {\n    val stickyHeaderTopGap = 8.dp\n    val readOnly = viewModel.readOnly\n    val bundles by viewModel.bundlesFlow.collectAsStateWithLifecycle(initialValue = emptyList())\n    val bundleLoadIssues by viewModel.bundleLoadIssuesFlow.collectAsStateWithLifecycle(initialValue = emptyMap())\n    val patchLazyListState = rememberLazyListState()\n    val searchLazyListState = rememberLazyListState()\n    val (query, setQuery) = rememberSaveable { mutableStateOf(\"\") }\n    val (searchExpanded, setSearchExpanded) = rememberSaveable { mutableStateOf(false) }\n    var showBottomSheet by rememberSaveable { mutableStateOf(false) }\n    var collapsedBundleUids by rememberSaveable { mutableStateOf(emptyList<Int>()) }\n    var selectedPackageFilters by rememberSaveable { mutableStateOf(emptySet<String>()) }\n    val effectiveSelectedPackageFilters = if (readOnly) selectedPackageFilters else emptySet()\n\n    val showSaveButton by remember {\n        derivedStateOf { !readOnly && viewModel.selectionIsValid(bundles) }\n    }\n\n    val defaultPatchSelectionCount by viewModel.defaultSelectionCount\n        .collectAsStateWithLifecycle(initialValue = 0)\n\n    val selectedPatchCount by remember {\n        derivedStateOf {\n            viewModel.customPatchSelection?.values?.sumOf { it.size } ?: defaultPatchSelectionCount\n        }\n    }\n\n\n    fun toggleBundleExpanded(bundleUid: Int) {\n        if (isSourceEditMode) return\n        collapsedBundleUids = if (bundleUid in collapsedBundleUids) {\n            collapsedBundleUids - bundleUid\n        } else {\n            collapsedBundleUids + bundleUid\n        }\n    }\n\n    fun onBundleSelectionClick(bundle: PatchBundleInfo.Scoped) {\n        if (readOnly) return\n\n        val selectionState = viewModel.getBundleSelectionState(bundle)\n        when {\n            viewModel.selectionWarningEnabled -> viewModel.showSelectionWarning()\n            selectionState == false -> viewModel.restoreDefaults(bundle.uid)\n            else -> viewModel.deselectAll(bundles, bundle.uid)\n        }\n    }\n\n    val effectiveCollapsedBundleUids =\n        remember(bundles, collapsedBundleUids, readOnly, isSourceEditMode) {\n            when {\n                isSourceEditMode -> bundles.map { it.uid }\n                readOnly -> bundles.map { it.uid }.filter { it !in collapsedBundleUids }\n                else -> collapsedBundleUids\n            }\n        }\n\n    val sections = remember(\n        bundles,\n        viewModel.filter,\n        effectiveCollapsedBundleUids,\n        effectiveSelectedPackageFilters\n    ) {\n        buildBundleSections(\n            bundles = bundles,\n            filter = viewModel.filter,\n            collapsedBundleUids = effectiveCollapsedBundleUids,\n            selectedPackageNames = effectiveSelectedPackageFilters\n        )\n    }\n    val searchSections = remember(\n        bundles,\n        query,\n        viewModel.filter,\n        effectiveCollapsedBundleUids,\n        effectiveSelectedPackageFilters\n    ) {\n        buildBundleSections(\n            bundles = bundles,\n            query = query,\n            filter = viewModel.filter,\n            collapsedBundleUids = effectiveCollapsedBundleUids,\n            selectedPackageNames = effectiveSelectedPackageFilters,\n            forceExpanded = query.isNotBlank()\n        )\n    }\n\n    if (showBottomSheet) {\n        PatchesFilterBottomSheet(\n            onDismissRequest = { showBottomSheet = false },\n            sections = sections,\n            patchLazyListState = patchLazyListState,\n            bundles = bundles,\n            filter = viewModel.filter,\n            onToggleFlag = viewModel::toggleFlag,\n            packageName = viewModel.packageName.ifBlank { null },\n            readOnly = readOnly,\n            selectionWarningEnabled = viewModel.selectionWarningEnabled,\n            onShowSelectionWarning = viewModel::showSelectionWarning,\n            onRestoreDefaults = viewModel::restoreDefaults,\n            onDeselectAll = { uid -> viewModel.deselectAll(bundles, uid) },\n            onInvertSelection = { uid -> viewModel.invertSelection(bundles, uid) },\n            onDeselectAllExcept = viewModel::deselectAllExcept,\n            selectedPackageFilters = selectedPackageFilters,\n            onTogglePackageFilter = { pkg ->\n                selectedPackageFilters = if (pkg in selectedPackageFilters) {\n                    selectedPackageFilters - pkg\n                } else {\n                    selectedPackageFilters + pkg\n                }\n            }\n        )\n    }\n\n    when (val dialog = viewModel.activeDialog) {\n        is DialogState.IncompatiblePatch -> {\n            IncompatiblePatchDialog(\n                appVersion = viewModel.appVersion ?: stringResource(R.string.any_version),\n                compatibleVersions = dialog.compatibleVersions,\n                onDismissRequest = viewModel::dismissDialogs\n            )\n        }\n\n        is DialogState.IncompatiblePatchesInfo -> {\n            IncompatiblePatchesDialog(\n                appVersion = viewModel.appVersion ?: stringResource(R.string.any_version),\n                onDismissRequest = viewModel::dismissDialogs\n            )\n        }\n\n        is DialogState.Options -> {\n            OptionsDialog(\n                onDismissRequest = viewModel::dismissDialogs,\n                patch = dialog.patch,\n                values = viewModel.getOptions(dialog.bundle, dialog.patch),\n                reset = { viewModel.resetOptions(dialog.bundle, dialog.patch) },\n                set = { key, value ->\n                    viewModel.setOption(\n                        dialog.bundle,\n                        dialog.patch,\n                        key,\n                        value\n                    )\n                },\n                selectionWarningEnabled = viewModel.selectionWarningEnabled,\n                readOnly = readOnly\n            )\n        }\n\n        is DialogState.SelectionWarning -> {\n            SelectionWarningDialog(onDismiss = viewModel::dismissDialogs)\n        }\n\n        is DialogState.UniversalPatchWarning -> {\n            UniversalPatchWarningDialog(onDismiss = viewModel::dismissDialogs)\n        }\n\n        else -> {}\n    }\n\n    fun LazyListScope.patchList(\n        uid: Int,\n        patches: List<PatchInfo>,\n        compatible: Boolean,\n        keyPrefix: String,\n        header: (@Composable () -> Unit)? = null\n    ) {\n        if (patches.isEmpty()) return\n\n        header?.let {\n            item(key = \"$keyPrefix-header\", contentType = 0) { it() }\n        }\n\n        itemsIndexed(\n            items = patches,\n            key = { index, patch -> patchItemKey(keyPrefix, patch.name, index) },\n            contentType = { _, _ -> 1 }\n        ) { _, patch ->\n            PatchItem(\n                patch = patch,\n                onOptionsDialog = { viewModel.openOptionsDialog(uid, patch) },\n                selected = compatible && viewModel.isSelected(uid, patch),\n                onToggle = {\n                    when {\n                        !compatible -> viewModel.openIncompatibleDialog(patch)\n                        viewModel.selectionWarningEnabled -> viewModel.showSelectionWarning()\n                        patch.compatiblePackages == null && viewModel.universalPatchWarningEnabled ->\n                            viewModel.showUniversalPatchWarning()\n\n                        else -> viewModel.togglePatch(uid, patch)\n                    }\n                },\n                compatible = compatible,\n                readOnly = readOnly,\n                scopedPackageName = viewModel.packageName.ifBlank { null }\n            )\n        }\n    }\n\n    fun LazyListScope.sectionedPatchList(\n        sections: List<BundleSection>,\n        keyPrefix: String\n    ) {\n        sections.forEach { section ->\n            val bundle = section.bundle\n            val loadIssueResId = bundleLoadIssues[bundle.uid]\n\n            stickyHeader(key = \"$keyPrefix-source-${bundle.uid}\") {\n                Column(\n                    modifier = Modifier\n                        .fillMaxWidth()\n                        .zIndex(1f)\n                        .background(MaterialTheme.colorScheme.surface)\n                ) {\n                    SourceSectionHeader(\n                        bundle = bundle,\n                        expanded = section.expanded,\n                        selectionState = viewModel.getBundleSelectionState(bundle),\n                        onClick = { onBundleInfoClick(bundle.uid) },\n                        onSelectionClick = { onBundleSelectionClick(bundle) },\n                        onExpandToggle = { toggleBundleExpanded(bundle.uid) },\n                        onDeleteClick = { onSourceDeleteRequest?.invoke(bundle.uid) },\n                        sourceEditMode = isSourceEditMode,\n                        readOnly = readOnly,\n                        loadIssue = loadIssueResId?.let { messageId ->\n                            stringResource(messageId)\n                        }\n                    )\n                }\n            }\n\n            if (!section.expanded) return@forEach\n\n            patchList(\n                uid = bundle.uid,\n                patches = section.compatible,\n                compatible = true,\n                keyPrefix = \"$keyPrefix-compatible-${bundle.uid}\"\n            )\n\n            patchList(\n                uid = bundle.uid,\n                patches = section.universal,\n                compatible = true,\n                keyPrefix = \"$keyPrefix-universal-${bundle.uid}\"\n            ) {\n                PatchesListHeader(title = stringResource(R.string.universal_patches))\n            }\n\n            patchList(\n                uid = bundle.uid,\n                patches = section.incompatible,\n                compatible = viewModel.allowIncompatiblePatches,\n                keyPrefix = \"$keyPrefix-incompatible-${bundle.uid}\"\n            ) {\n                PatchesListHeader(\n                    title = stringResource(R.string.incompatible_patches),\n                    onHelpClick = { viewModel.showIncompatiblePatchesInfo() }\n                )\n            }\n        }\n    }\n\n    Scaffold(\n        topBar = {\n            Box(modifier = Modifier.padding(horizontal = if (searchExpanded) 0.dp else 16.dp)) {\n                SearchBar(\n                    query = query,\n                    onQueryChange = setQuery,\n                    expanded = searchExpanded,\n                    onExpandedChange = setSearchExpanded,\n                    placeholder = { Text(stringResource(R.string.search_patches)) },\n                    windowInsets = if (readOnly) WindowInsets(\n                        0,\n                        0,\n                        0,\n                        0\n                    ) else WindowInsets.systemBars,\n                    leadingIcon = {\n                        TooltipIconButton(\n                            onClick = {\n                                if (searchExpanded) setSearchExpanded(false) else onBackClick()\n                            },\n                            tooltip = stringResource(R.string.back),\n                        ) { contentDescription ->\n                            Icon(\n                                imageVector = Icons.AutoMirrored.Filled.ArrowBack,\n                                contentDescription = contentDescription\n                            )\n                        }\n                    },\n                    trailingIcon = {\n                        AnimatedContent(\n                            targetState = searchExpanded,\n                            label = \"Filter/Clear\",\n                            transitionSpec = { fadeIn() togetherWith fadeOut() }\n                        ) { expanded ->\n                            if (expanded) {\n                                TooltipIconButton(\n                                    onClick = { setQuery(\"\") },\n                                    enabled = query.isNotEmpty(),\n                                    tooltip = stringResource(R.string.clear),\n                                ) { contentDescription ->\n                                    Icon(\n                                        imageVector = Icons.Filled.Close,\n                                        contentDescription = contentDescription\n                                    )\n                                }\n                            } else {\n                                TooltipIconButton(\n                                    onClick = { showBottomSheet = true },\n                                    tooltip = stringResource(R.string.more),\n                                ) { contentDescription ->\n                                    Icon(\n                                        imageVector = Icons.Outlined.FilterList,\n                                        contentDescription = contentDescription\n                                    )\n                                }\n                            }\n                        }\n                    }\n                ) {\n                    Box(\n                        modifier = Modifier\n                            .fillMaxWidth()\n                            .weight(1f)\n                            .background(MaterialTheme.colorScheme.surface)\n                    ) {\n                        LazyColumnWithScrollbar(\n                            modifier = Modifier.fillMaxSize(),\n                            state = searchLazyListState,\n                            contentPadding = PaddingValues(bottom = 16.dp)\n                        ) {\n                            sectionedPatchList(\n                                sections = searchSections,\n                                keyPrefix = \"search\"\n                            )\n                        }\n                    }\n                }\n            }\n        },\n        floatingActionButton = {\n            if (!showSaveButton) return@Scaffold\n\n            AnimatedVisibility(\n                visible = !searchExpanded,\n                enter = slideInHorizontally { it } + fadeIn(),\n                exit = slideOutHorizontally { it } + fadeOut()\n            ) {\n                Column(\n                    horizontalAlignment = Alignment.End,\n                    verticalArrangement = Arrangement.spacedBy(4.dp)\n                ) {\n                    TooltipHost(tooltip = stringResource(R.string.reset)) { tooltipModifier ->\n                        SmallFloatingActionButton(\n                            onClick = viewModel::reset,\n                            modifier = tooltipModifier,\n                            containerColor = MaterialTheme.colorScheme.tertiaryContainer\n                        ) {\n                            Icon(Icons.Outlined.Restore, stringResource(R.string.reset))\n                        }\n                    }\n\n                    val isScrollingUp = patchLazyListState.isScrollingUp()\n                    val expanded by produceState(true, isScrollingUp) {\n                        value = isScrollingUp.value\n                        snapshotFlow { isScrollingUp.value }\n                            .sample(333L)\n                            .collect { value = it }\n                    }\n\n                    HapticExtendedFloatingActionButton(\n                        text = {\n                            Text(stringResource(R.string.save_with_count, selectedPatchCount))\n                        },\n                        tooltip = stringResource(R.string.save),\n                        icon = {\n                            Icon(\n                                imageVector = Icons.Outlined.Save,\n                                contentDescription = stringResource(R.string.save)\n                            )\n                        },\n                        expanded = expanded,\n                        onClick = {\n                            onSave(viewModel.getCustomSelection(), viewModel.getOptions())\n                        }\n                    )\n                }\n            }\n        }\n    ) { paddingValues ->\n        if (searchExpanded) return@Scaffold\n\n        Column(\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(paddingValues)\n        ) {\n            Spacer(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(stickyHeaderTopGap)\n                    .background(MaterialTheme.colorScheme.surface)\n            )\n\n            Box(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .weight(1f)\n            ) {\n                LazyColumnWithScrollbar(\n                    modifier = Modifier.fillMaxSize(),\n                    state = patchLazyListState\n                ) {\n                    sectionedPatchList(\n                        sections = sections,\n                        keyPrefix = \"main\"\n                    )\n                }\n            }\n        }\n    }\n}\n\nprivate fun patchItemKey(keyPrefix: String, patchName: String, index: Int) =\n    \"$keyPrefix-$index-$patchName\""
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/RequiredOptionsScreen.kt",
    "content": "package app.revanced.manager.ui.screen\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.pager.HorizontalPager\nimport androidx.compose.foundation.pager.rememberPagerState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.AutoFixHigh\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.SecondaryScrollableTabRow\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.rememberTopAppBarState\nimport androidx.compose.material3.surfaceColorAtElevation\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport app.revanced.manager.R\nimport app.revanced.manager.patcher.patch.Option\nimport app.revanced.manager.patcher.patch.PatchBundleInfo.Extensions.requiredOptionsSet\nimport app.revanced.manager.ui.component.AppTopBar\nimport app.revanced.manager.ui.component.LazyColumnWithScrollbar\nimport app.revanced.manager.ui.component.haptics.HapticExtendedFloatingActionButton\nimport app.revanced.manager.ui.component.haptics.HapticTab\nimport app.revanced.manager.ui.component.patches.OptionItem\nimport app.revanced.manager.ui.component.patches.PatchesListHeader\nimport app.revanced.manager.ui.viewmodel.PatchesSelectorViewModel\nimport app.revanced.manager.util.Options\nimport app.revanced.manager.util.PatchSelection\nimport app.revanced.manager.util.isScrollingUp\nimport kotlinx.coroutines.launch\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun RequiredOptionsScreen(\n    onContinue: (PatchSelection?, Options) -> Unit,\n    onBackClick: () -> Unit,\n    vm: PatchesSelectorViewModel\n) {\n    val list by vm.requiredOptsPatches.collectAsStateWithLifecycle(emptyList())\n\n    val pagerState = rememberPagerState(\n        initialPage = 0,\n        initialPageOffsetFraction = 0f\n    ) {\n        list.size\n    }\n    val patchLazyListStates = remember(list) { List(list.size, ::LazyListState) }\n    val bundles by vm.bundlesFlow.collectAsStateWithLifecycle(emptyList())\n    val showContinueButton by remember {\n        derivedStateOf {\n            bundles.requiredOptionsSet(\n                allowIncompatible = vm.allowIncompatiblePatches,\n                isSelected = { bundle, patch -> vm.isSelected(bundle.uid, patch) },\n                optionsForPatch = { bundle, patch -> vm.getOptions(bundle.uid, patch) }\n            )\n        }\n    }\n    val composableScope = rememberCoroutineScope()\n\n    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())\n\n    Scaffold(\n        topBar = {\n            AppTopBar(\n                title = stringResource(R.string.required_options_screen),\n                scrollBehavior = scrollBehavior,\n                onBackClick = onBackClick\n            )\n        },\n        floatingActionButton = {\n            if (!showContinueButton) return@Scaffold\n\n            HapticExtendedFloatingActionButton(\n                text = { Text(stringResource(R.string.patch)) },\n                icon = {\n                    Icon(\n                        Icons.Default.AutoFixHigh,\n                        stringResource(R.string.patch)\n                    )\n                },\n                expanded = patchLazyListStates.getOrNull(pagerState.currentPage)?.isScrollingUp\n                    ?: true,\n                onClick = {\n                    onContinue(vm.getCustomSelection(), vm.getOptions())\n                }\n            )\n        },\n        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),\n    ) { paddingValues ->\n        Column(\n            Modifier\n                .fillMaxSize()\n                .padding(paddingValues)\n        ) {\n            if (list.isEmpty()) return@Column\n            else if (list.size > 1) SecondaryScrollableTabRow(\n                selectedTabIndex = pagerState.currentPage,\n                containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(3.0.dp)\n            ) {\n                list.forEachIndexed { index, (bundle, _) ->\n                    HapticTab(\n                        selected = pagerState.currentPage == index,\n                        onClick = {\n                            composableScope.launch {\n                                pagerState.animateScrollToPage(\n                                    index\n                                )\n                            }\n                        },\n                        text = { Text(bundle.name) },\n                        selectedContentColor = MaterialTheme.colorScheme.primary,\n                        unselectedContentColor = MaterialTheme.colorScheme.onSurfaceVariant\n                    )\n                }\n            }\n\n            HorizontalPager(\n                state = pagerState,\n                userScrollEnabled = true,\n                pageContent = { index ->\n                    // Avoid crashing if the lists have not been fully initialized yet.\n                    if (index > list.lastIndex || list.size != patchLazyListStates.size) return@HorizontalPager\n                    val (bundle, patches) = list[index]\n\n                    LazyColumnWithScrollbar(\n                        modifier = Modifier.fillMaxSize(),\n                        state = patchLazyListStates[index]\n                    ) {\n                        items(patches, key = { it.name }) {\n                            PatchesListHeader(it.name)\n\n                            val values = vm.getOptions(bundle.uid, it)\n                            it.options?.forEach { option ->\n                                val name = option.name\n                                val value =\n                                    if (values == null || name !in values) option.default else values[name]\n\n                                @Suppress(\"UNCHECKED_CAST\")\n                                OptionItem(\n                                    option = option as Option<Any>,\n                                    value = value,\n                                    setValue = { new ->\n                                        vm.setOption(bundle.uid, it, name, new)\n                                    },\n                                    selectionWarningEnabled = vm.selectionWarningEnabled\n                                )\n                            }\n                        }\n                    }\n                }\n            )\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/SelectedAppInfoScreen.kt",
    "content": "package app.revanced.manager.ui.screen\n\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.annotation.StringRes\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyColumn\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight\nimport androidx.compose.material.icons.filled.AutoFixHigh\nimport androidx.compose.material.icons.outlined.WarningAmber\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItem\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.rememberTopAppBarState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.platform.LocalResources\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport app.revanced.manager.R\nimport app.revanced.manager.data.platform.NetworkInfo\nimport app.revanced.manager.network.downloader.LoadedDownloader\nimport app.revanced.manager.patcher.patch.PatchBundleInfo\nimport app.revanced.manager.patcher.patch.PatchInfo\nimport app.revanced.manager.ui.component.AlertDialogExtended\nimport app.revanced.manager.ui.component.AppInfo\nimport app.revanced.manager.ui.component.AppTopBar\nimport app.revanced.manager.ui.component.ColumnWithScrollbar\nimport app.revanced.manager.ui.component.LoadingIndicator\nimport app.revanced.manager.ui.component.NotificationCard\nimport app.revanced.manager.ui.component.NotificationCardType\nimport app.revanced.manager.ui.component.haptics.HapticExtendedFloatingActionButton\nimport app.revanced.manager.ui.model.SelectedApp\nimport app.revanced.manager.ui.viewmodel.SelectedAppInfoViewModel\nimport app.revanced.manager.util.APK_MIMETYPE\nimport app.revanced.manager.util.EventEffect\nimport app.revanced.manager.util.Options\nimport app.revanced.manager.util.PatchSelection\nimport app.revanced.manager.util.enabled\nimport app.revanced.manager.util.transparentListItemColors\nimport kotlinx.coroutines.launch\nimport org.koin.compose.koinInject\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun SelectedAppInfoScreen(\n    onPatchSelectorClick: (SelectedApp, PatchSelection?, Options) -> Unit,\n    onRequiredOptions: (SelectedApp, PatchSelection?, Options) -> Unit,\n    onPatchClick: () -> Unit,\n    onBackClick: () -> Unit,\n    vm: SelectedAppInfoViewModel\n) {\n    val resources = LocalResources.current\n    val networkInfo = koinInject<NetworkInfo>()\n    val networkConnected = remember { networkInfo.isConnected() }\n    val networkMetered = remember { !networkInfo.isUnmetered() }\n\n    val packageName = vm.selectedApp.packageName\n    val version = vm.selectedApp.version\n    val bundles by vm.bundleInfoFlow.collectAsStateWithLifecycle(emptyList())\n\n    val allowIncompatiblePatches by vm.prefs.disablePatchVersionCompatCheck.getAsState()\n    val effectiveAllowIncompatible = allowIncompatiblePatches || vm.selectedApp.version == null\n\n    val patches by remember(bundles, effectiveAllowIncompatible) {\n        derivedStateOf {\n            vm.getPatches(bundles, effectiveAllowIncompatible)\n        }\n    }\n    val versionOptions by remember(bundles, patches, packageName, allowIncompatiblePatches) {\n        derivedStateOf {\n            buildVersionOptions(\n                bundles = bundles,\n                selectedPatches = patches,\n                packageName = packageName,\n                allowIncompatible = allowIncompatiblePatches\n            )\n        }\n    }\n    val strictVersionOptions by remember(bundles, patches, packageName) {\n        derivedStateOf {\n            buildVersionOptions(\n                bundles = bundles,\n                selectedPatches = patches,\n                packageName = packageName,\n                allowIncompatible = false\n            )\n        }\n    }\n    val selectedVersionLabel by remember(vm.selectedApp.version) {\n        derivedStateOf {\n            vm.selectedApp.version ?: resources.getString(R.string.selected_app_meta_any_version)\n        }\n    }\n    var showVersionSelector by remember { mutableStateOf(false) }\n    val selectedPatchCount = patches.values.sumOf { it.size }\n    val hasModifiedPatchSelection by remember(bundles, effectiveAllowIncompatible) {\n        derivedStateOf {\n            vm.hasModifiedPatchSelection(bundles, effectiveAllowIncompatible)\n        }\n    }\n    val showVersionCompatibilityWarning by remember(\n        vm.selectedApp.version,\n        allowIncompatiblePatches,\n        strictVersionOptions\n    ) {\n        derivedStateOf {\n            val selectedVersion = vm.selectedApp.version ?: return@derivedStateOf false\n            allowIncompatiblePatches &&\n                strictVersionOptions.versions.isNotEmpty() &&\n                selectedVersion !in strictVersionOptions.versions\n        }\n    }\n\n    LaunchedEffect(versionOptions, vm.selectedApp.version) {\n        if (versionOptions.unrestricted) return@LaunchedEffect\n\n        val selectedVersion = vm.selectedApp.version\n        if (selectedVersion != null && selectedVersion in versionOptions.versions) {\n            return@LaunchedEffect\n        }\n\n        vm.setTargetVersion(versionOptions.versions.firstOrNull())\n    }\n\n    val launcher = rememberLauncherForActivityResult(\n        contract = ActivityResultContracts.StartActivityForResult(),\n        onResult = vm::handleDownloaderActivityResult\n    )\n    EventEffect(flow = vm.launchActivityFlow) { intent ->\n        launcher.launch(intent)\n    }\n    val composableScope = rememberCoroutineScope()\n\n    val sourcePickerLauncher = rememberLauncherForActivityResult(\n        contract = ActivityResultContracts.GetContent(),\n        onResult = { uri -> uri?.let(vm::handleStorageResult) }\n    )\n    EventEffect(flow = vm.storageSelectionFlow) { app ->\n        vm.selectedApp = app\n        vm.dismissSourceSelector()\n    }\n\n    val error by vm.errorFlow.collectAsStateWithLifecycle(null)\n    val downloaders by vm.downloaders.collectAsStateWithLifecycle(emptyList())\n\n    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())\n\n    Scaffold(\n        topBar = {\n            AppTopBar(\n                title = stringResource(R.string.app_info),\n                scrollBehavior = scrollBehavior,\n                onBackClick = onBackClick\n            )\n        },\n        floatingActionButton = {\n            // Hide the FAB when no patches are selected.\n            if (selectedPatchCount == 0) return@Scaffold\n\n            // Only hide the FAB for errors that genuinely block patching.\n            // No-downloader errors are NOT blocking because the storage picker is the fallback.\n            val blockingError = error?.takeIf {\n                it != SelectedAppInfoViewModel.Error.NoDownloadersInstalled\n            }\n            if (blockingError != null) return@Scaffold\n\n            HapticExtendedFloatingActionButton(\n                text = { Text(stringResource(R.string.patch)) },\n                icon = {\n                    Icon(\n                        Icons.Default.AutoFixHigh,\n                        stringResource(R.string.patch)\n                    )\n                },\n                onClick = patchClick@{\n                    // If the selected source is Auto (Search) but nothing can be resolved\n                    // (no installed app, no downloaded APK, no downloader), prompt the user\n                    // to pick an APK from storage instead of failing silently.\n                    if (vm.selectedApp is SelectedApp.Search &&\n                        vm.resolveAutoSource(vm.selectedApp.version) is SelectedApp.Search &&\n                        downloaders.isEmpty()\n                    ) {\n                        sourcePickerLauncher.launch(APK_MIMETYPE)\n                        return@patchClick\n                    }\n\n                    composableScope.launch {\n                        if (!vm.hasSetRequiredOptions(patches, effectiveAllowIncompatible)) {\n                            onRequiredOptions(\n                                vm.selectedApp,\n                                vm.getCustomPatches(bundles, effectiveAllowIncompatible),\n                                vm.options\n                            )\n                            return@launch\n                        }\n\n                        onPatchClick()\n                    }\n                }\n            )\n        },\n        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),\n    ) { paddingValues ->\n\n        if (showVersionSelector) {\n            VersionSelectorDialog(\n                selectedVersion = vm.selectedApp.version,\n                availableVersions = versionOptions.versions,\n                allowAnyVersion = versionOptions.unrestricted,\n                onDismissRequest = { showVersionSelector = false },\n                onSelect = { version ->\n                    vm.setTargetVersion(version)\n                    showVersionSelector = false\n                }\n            )\n        }\n\n        if (vm.showSourceSelector) {\n            val selectedVersion = vm.selectedApp.version\n            val autoSelection = vm.resolveAutoSource(selectedVersion)\n\n            AppSourceSelectorDialog(\n                downloaders = downloaders,\n                downloadedApps = vm.downloadedApps,\n                activeSearchJob = vm.activeDownloader,\n                requiredVersion = selectedVersion,\n                autoSelection = autoSelection,\n                onDismissRequest = vm::dismissSourceSelector,\n                onSelectAuto = {\n                    vm.selectedApp = autoSelection\n                    vm.dismissSourceSelector()\n                },\n                onSelectDownloader = vm::searchUsingDownloader,\n                onSelectFromStorage = { sourcePickerLauncher.launch(APK_MIMETYPE) },\n                onSelect = {\n                    vm.selectedApp = it\n                    vm.dismissSourceSelector()\n                }\n            )\n        }\n\n        ColumnWithScrollbar(\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(paddingValues)\n        ) {\n            AppInfo(vm.selectedAppInfo, placeholderLabel = packageName) {\n                Text(\n                    version ?: stringResource(R.string.selected_app_meta_any_version),\n                    color = MaterialTheme.colorScheme.onSurfaceVariant,\n                    style = MaterialTheme.typography.bodyMedium,\n                )\n            }\n\n            PageItem(\n                R.string.patch_selector_item,\n                stringResource(\n                    R.string.patch_selector_item_description,\n                    selectedPatchCount\n                ),\n                warningDescription = if (hasModifiedPatchSelection) {\n                    stringResource(R.string.patch_selection_changed_warning)\n                } else {\n                    null\n                },\n                onClick = {\n                    onPatchSelectorClick(\n                        vm.selectedApp,\n                        vm.getCustomPatches(\n                            bundles,\n                            effectiveAllowIncompatible\n                        ),\n                        vm.options\n                    )\n                }\n            )\n            PageItem(\n                R.string.version,\n                selectedVersionLabel,\n                warningDescription = if (showVersionCompatibilityWarning) {\n                    stringResource(R.string.version_compatibility_warning)\n                } else {\n                    null\n                },\n                enabled = versionOptions.unrestricted || versionOptions.versions.isNotEmpty(),\n                onClick = { showVersionSelector = true }\n            )\n            val autoSourceSubtitle = run {\n                val resolved = vm.resolveAutoSource(vm.selectedApp.version)\n                when {\n                    resolved is SelectedApp.Installed -> stringResource(R.string.apk_source_auto_installed)\n                    resolved is SelectedApp.Local -> stringResource(R.string.apk_source_auto_downloaded)\n                    downloaders.isNotEmpty() -> stringResource(R.string.apk_source_auto_downloader)\n                    else -> stringResource(R.string.apk_source_auto_storage)\n                }\n            }\n            PageItem(\n                R.string.apk_source_selector_item,\n                when (val app = vm.selectedApp) {\n                    is SelectedApp.Search -> autoSourceSubtitle\n                    is SelectedApp.Installed -> stringResource(R.string.apk_source_installed)\n                    is SelectedApp.Download -> stringResource(\n                        R.string.apk_source_downloader,\n                        downloaders.find { it.packageName == app.data.downloaderPackageName && it.name == app.data.downloaderClassName }?.name\n                            ?: app.data.downloaderPackageName\n                    )\n\n                    is SelectedApp.Local -> stringResource(R.string.apk_source_local)\n                },\n                onClick = {\n                    vm.showSourceSelector()\n                }\n            )\n            // Only show inline error text for truly blocking errors, not no-downloader\n            // errors which are handled gracefully via the storage picker fallback.\n            val inlineError = error?.takeIf {\n                it != SelectedAppInfoViewModel.Error.NoDownloadersInstalled\n            }\n            inlineError?.let {\n                Text(\n                    text = stringResource(it.resourceId),\n                    style = MaterialTheme.typography.bodyMedium,\n                    color = MaterialTheme.colorScheme.error,\n                    modifier = Modifier\n                        .padding(top = 6.dp)\n                        .padding(horizontal = 24.dp)\n                )\n            }\n\n            Column(\n                modifier = Modifier.padding(horizontal = 24.dp),\n                verticalArrangement = Arrangement.spacedBy(16.dp)\n            ) {\n                val needsInternet =\n                    vm.selectedApp.let { it is SelectedApp.Search || it is SelectedApp.Download }\n\n                when {\n                    !needsInternet -> {}\n                    !networkConnected -> {\n                        NotificationCard(\n                            type = NotificationCardType.WARNING,\n                            icon = Icons.Outlined.WarningAmber,\n                            text = stringResource(R.string.network_unavailable_warning),\n                            onDismiss = null\n                        )\n                    }\n\n                    networkMetered -> {\n                        NotificationCard(\n                            type = NotificationCardType.WARNING,\n                            icon = Icons.Outlined.WarningAmber,\n                            text = stringResource(R.string.network_metered_warning),\n                            onDismiss = null\n                        )\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun PageItem(\n    @StringRes title: Int,\n    description: String,\n    enabled: Boolean = true,\n    warningDescription: String? = null,\n    warningColor: Color = Color.Unspecified,\n    onClick: () -> Unit\n) {\n    ListItem(\n        modifier = Modifier\n            .clickable(enabled = enabled, onClick = onClick)\n            .enabled(enabled)\n            .padding(start = 8.dp),\n        headlineContent = {\n            Text(\n                stringResource(title),\n                color = MaterialTheme.colorScheme.onSurface,\n                style = MaterialTheme.typography.titleLarge\n            )\n        },\n        supportingContent = {\n            Column(verticalArrangement = Arrangement.spacedBy(2.dp)) {\n                Text(\n                    description,\n                    color = MaterialTheme.colorScheme.outline,\n                    style = MaterialTheme.typography.bodyMedium\n                )\n\n                warningDescription?.let {\n                    Text(\n                        text = \"(!) $it\",\n                        color = if (warningColor == Color.Unspecified) {\n                            MaterialTheme.colorScheme.tertiary\n                        } else {\n                            warningColor\n                        },\n                        style = MaterialTheme.typography.bodySmall\n                    )\n                }\n            }\n        },\n        trailingContent = {\n            Icon(Icons.AutoMirrored.Filled.KeyboardArrowRight, null)\n        }\n    )\n}\n\nprivate data class VersionOptions(\n    val versions: List<String>,\n    val unrestricted: Boolean\n)\n\nprivate fun buildVersionOptions(\n    bundles: List<PatchBundleInfo.Scoped>,\n    selectedPatches: PatchSelection,\n    packageName: String,\n    allowIncompatible: Boolean\n): VersionOptions {\n    val selected = bundles.flatMap { bundle ->\n        val selectedNames = selectedPatches[bundle.uid].orEmpty()\n        bundle.patches.filter { it.name in selectedNames }\n    }\n\n    val constraints = selected.mapNotNull { patch ->\n        patch.versionConstraintFor(packageName)\n    }\n\n    if (constraints.isEmpty() || allowIncompatible) {\n        val knownVersions = bundles.asSequence()\n            .flatMap { bundle -> bundle.patches.asSequence() }\n            .mapNotNull { patch -> patch.versionConstraintFor(packageName) }\n            .flatMap { versions -> versions.asSequence() }\n            .distinct()\n            .sortedDescending()\n            .toList()\n\n        return VersionOptions(versions = knownVersions, unrestricted = true)\n    }\n\n    val intersection = constraints\n        .map { it.toSet() }\n        .reduce { acc, versions -> acc intersect versions }\n        .toList()\n        .sortedDescending()\n\n    return VersionOptions(versions = intersection, unrestricted = false)\n}\n\nprivate fun PatchInfo.versionConstraintFor(packageName: String): Set<String>? {\n    val pkg = compatiblePackages?.firstOrNull { it.packageName == packageName } ?: return null\n    return pkg.versions?.toSet()?.takeIf { it.isNotEmpty() }\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nprivate fun VersionSelectorDialog(\n    selectedVersion: String?,\n    availableVersions: List<String>,\n    allowAnyVersion: Boolean,\n    onDismissRequest: () -> Unit,\n    onSelect: (String?) -> Unit\n) {\n    AlertDialogExtended(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(onClick = onDismissRequest, shapes = ButtonDefaults.shapes()) {\n                Text(stringResource(R.string.cancel))\n            }\n        },\n        title = { Text(stringResource(R.string.version)) },\n        textHorizontalPadding = PaddingValues(horizontal = 0.dp),\n        text = {\n            LazyColumn {\n                if (allowAnyVersion) {\n                    item(key = \"any\") {\n                        ListItem(\n                            modifier = Modifier.clickable { onSelect(null) },\n                            headlineContent = { Text(stringResource(R.string.selected_app_meta_any_version)) },\n                            supportingContent = if (selectedVersion == null) {\n                                { Text(stringResource(R.string.this_version)) }\n                            } else {\n                                null\n                            },\n                            colors = transparentListItemColors\n                        )\n                    }\n                }\n\n                items(\n                    items = availableVersions,\n                    key = { version -> \"version_$version\" }\n                ) { version ->\n                    ListItem(\n                        modifier = Modifier.clickable { onSelect(version) },\n                        headlineContent = { Text(version) },\n                        supportingContent = if (selectedVersion == version) {\n                            { Text(stringResource(R.string.this_version)) }\n                        } else {\n                            null\n                        },\n                        colors = transparentListItemColors\n                    )\n                }\n            }\n        }\n    )\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nprivate fun AppSourceSelectorDialog(\n    downloaders: List<LoadedDownloader>,\n    downloadedApps: List<SelectedApp.Local>,\n    activeSearchJob: LoadedDownloader?,\n    requiredVersion: String?,\n    autoSelection: SelectedApp,\n    onDismissRequest: () -> Unit,\n    onSelectAuto: () -> Unit,\n    onSelectDownloader: (LoadedDownloader) -> Unit,\n    onSelectFromStorage: () -> Unit,\n    onSelect: (SelectedApp) -> Unit,\n) {\n    val canSelect = activeSearchJob == null\n\n    AlertDialogExtended(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(onClick = onDismissRequest, shapes = ButtonDefaults.shapes()) {\n                Text(stringResource(R.string.cancel))\n            }\n        },\n        title = { Text(stringResource(R.string.app_source_dialog_title)) },\n        textHorizontalPadding = PaddingValues(horizontal = 0.dp),\n        text = {\n            LazyColumn {\n                item(key = \"auto\") {\n                    val hasDownloader = downloaders.isNotEmpty()\n                    val hasDownloaded = downloadedApps.any { app -> requiredVersion == null || app.version == requiredVersion }\n                    val hasAutoSource = hasDownloader || hasDownloaded || autoSelection is SelectedApp.Installed\n                    ListItem(\n                        modifier = Modifier\n                            .clickable(enabled = canSelect && hasAutoSource) { onSelectAuto() }\n                            .enabled(hasAutoSource),\n                        headlineContent = { Text(stringResource(R.string.app_source_dialog_option_auto)) },\n                        supportingContent = {\n                            Text(\n                                if (hasAutoSource)\n                                    stringResource(R.string.app_source_dialog_option_auto_description)\n                                else\n                                    stringResource(R.string.app_source_dialog_option_auto_unavailable)\n                            )\n                        },\n                        colors = transparentListItemColors\n                    )\n                }\n\n                items(\n                    downloadedApps,\n                    key = { \"downloaded_${it.version}\" }\n                ) { app ->\n                    val usable = requiredVersion == null || app.version == requiredVersion\n                    ListItem(\n                        modifier = Modifier\n                            .clickable(enabled = canSelect && usable) { onSelect(app) }\n                            .enabled(usable),\n                        headlineContent = { Text(stringResource(R.string.apk_source_downloaded)) },\n                        supportingContent = { Text(app.version) },\n                        colors = transparentListItemColors\n                    )\n                }\n\n                items(downloaders) { downloader ->\n                    ListItem(\n                        modifier = Modifier.clickable(enabled = canSelect) {\n                            onSelectDownloader(\n                                downloader\n                            )\n                        },\n                        headlineContent = { Text(downloader.name) },\n                        trailingContent = (@Composable { LoadingIndicator() }).takeIf { activeSearchJob == downloader },\n                        colors = transparentListItemColors\n                    )\n                }\n\n                item(key = \"storage\") {\n                    ListItem(\n                        modifier = Modifier.clickable { onSelectFromStorage() },\n                        headlineContent = { Text(stringResource(R.string.select_from_storage)) },\n                        supportingContent = { Text(stringResource(R.string.select_from_storage_description)) },\n                        colors = transparentListItemColors\n                    )\n                }\n            }\n        }\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/SettingsScreen.kt",
    "content": "package app.revanced.manager.ui.screen\n\nimport android.annotation.SuppressLint\nimport androidx.annotation.StringRes\nimport androidx.appcompat.content.res.AppCompatResources\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.foundation.Image\nimport android.net.Uri\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.navigationBarsPadding\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.rememberScrollState\nimport android.content.Intent\nimport android.os.PowerManager\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material.icons.filled.BatteryAlert\nimport androidx.compose.material.icons.outlined.Code\nimport androidx.compose.material.icons.outlined.Download\nimport androidx.compose.material.icons.outlined.Settings\nimport androidx.compose.material.icons.outlined.SwapVert\nimport androidx.compose.material.icons.outlined.Tune\nimport androidx.compose.material.icons.outlined.Update\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.MediumFlexibleTopAppBar\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport androidx.core.content.getSystemService\nimport app.revanced.manager.BuildConfig\nimport app.revanced.manager.R\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.ui.component.BottomContentBar\nimport app.revanced.manager.ui.component.ColumnWithScrollbar\nimport app.revanced.manager.ui.component.ListSection\nimport app.revanced.manager.ui.component.NotificationCard\nimport app.revanced.manager.ui.component.NotificationCardType\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.settings.ExpressiveListIcon\nimport app.revanced.manager.ui.component.settings.SettingsListItem\nimport app.revanced.manager.ui.model.navigation.Settings\nimport com.google.accompanist.drawablepainter.rememberDrawablePainter\nimport org.koin.compose.koinInject\n\nprivate data class Section(\n    @param:StringRes val name: Int,\n    @param:StringRes val description: Int,\n    val image: ImageVector,\n    val destination: Settings.Destination,\n)\n\n@SuppressLint(\"BatteryLife\")\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun SettingsScreen(onBackClick: () -> Unit, navigate: (Settings.Destination) -> Unit) {\n    val prefs: PreferencesManager = koinInject()\n    val showDeveloperSettings by prefs.showDeveloperSettings.getAsState()\n    val disablePatchVersionCompatCheck by prefs.disablePatchVersionCompatCheck.getAsState()\n    val disableSelectionWarning by prefs.disableSelectionWarning.getAsState()\n    val disableUniversalPatchCheck by prefs.disableUniversalPatchCheck.getAsState()\n    val suggestedVersionSafeguard by prefs.suggestedVersionSafeguard.getAsState()\n    val safeguardsToggled by remember(\n        disablePatchVersionCompatCheck,\n        disableSelectionWarning,\n        disableUniversalPatchCheck,\n        suggestedVersionSafeguard\n    ) {\n        derivedStateOf {\n            disablePatchVersionCompatCheck ||\n                disableSelectionWarning ||\n                disableUniversalPatchCheck ||\n                !suggestedVersionSafeguard\n        }\n    }\n    val scrollState = rememberScrollState()\n    val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(\n        canScroll = {\n            scrollState.canScrollBackward || scrollState.canScrollForward\n        }\n    )\n    val context = LocalContext.current\n    val powerManager = remember(context) { context.getSystemService<PowerManager>()!! }\n    \n    var showBatteryOptimizationsWarning by remember {\n        mutableStateOf(!powerManager.isIgnoringBatteryOptimizations(context.packageName))\n    }\n    \n    val batteryOptimizationsLauncher =\n        rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) {\n            showBatteryOptimizationsWarning = !powerManager.isIgnoringBatteryOptimizations(context.packageName)\n        }\n    \n    val appIcon = rememberDrawablePainter(\n        drawable = remember(context) {\n            AppCompatResources.getDrawable(context, R.drawable.ic_logo_ring)\n        }\n    )\n\n    val generalSections = remember {\n        listOf(\n            Section(\n                R.string.general,\n                R.string.general_description,\n                Icons.Outlined.Settings,\n                Settings.General\n            ),\n            Section(\n                R.string.updates,\n                R.string.updates_description,\n                Icons.Outlined.Update,\n                Settings.Updates\n            ),\n            Section(\n                R.string.downloads,\n                R.string.downloads_description,\n                Icons.Outlined.Download,\n                Settings.Downloads\n            )\n        )\n    }\n\n    val advancedSections = remember {\n        listOf(\n            Section(\n                R.string.import_export,\n                R.string.import_export_description,\n                Icons.Outlined.SwapVert,\n                Settings.ImportExport\n            ),\n            Section(\n                R.string.advanced,\n                R.string.advanced_description,\n                Icons.Outlined.Tune,\n                Settings.Advanced\n            )\n        )\n    }\n\n    val developerSection = remember(showDeveloperSettings) {\n        Section(\n            R.string.developer_options,\n            R.string.developer_options_description,\n            Icons.Outlined.Code,\n            Settings.Developer\n        ).takeIf { showDeveloperSettings }\n    }\n\n    Scaffold(\n        topBar = {\n            MediumFlexibleTopAppBar(\n                title = { Text(stringResource(R.string.settings)) },\n                navigationIcon = {\n                    TooltipIconButton(\n                        onClick = onBackClick,\n                        tooltip = stringResource(R.string.back)\n                    ) {\n                        Icon(\n                            Icons.AutoMirrored.Filled.ArrowBack,\n                            contentDescription = stringResource(R.string.back)\n                        )\n                    }\n                },\n                scrollBehavior = scrollBehavior\n            )\n        },\n        bottomBar = {\n            BottomContentBar(modifier = Modifier.navigationBarsPadding()) {\n                SettingsListItem(\n                    modifier = Modifier.clip(MaterialTheme.shapes.large),\n                    headlineContent = stringResource(\n                        R.string.about_app_name,\n                        stringResource(R.string.app_name)\n                    ),\n                    supportingContent = BuildConfig.VERSION_NAME,\n                    leadingContent = {\n                        Image(\n                            painter = appIcon,\n                            contentDescription = stringResource(R.string.app_name),\n                            modifier = Modifier.size(42.dp)\n                        )\n                    },\n                    onClick = { navigate(Settings.About) }\n                )\n            }\n        },\n        modifier = Modifier.then(\n            scrollBehavior.let { Modifier.nestedScroll(it.nestedScrollConnection) }\n        )\n    ) { paddingValues ->\n        ColumnWithScrollbar(\n            modifier = Modifier\n                .padding(paddingValues)\n                .fillMaxSize(),\n            state = scrollState\n        ) {\n            Column(verticalArrangement = Arrangement.spacedBy(16.dp)) {\n                if (showBatteryOptimizationsWarning) {\n                    NotificationCard(\n                        modifier = Modifier.padding(horizontal = 16.dp),\n                        type = NotificationCardType.WARNING,\n                        icon = Icons.Default.BatteryAlert,\n                        text = stringResource(R.string.battery_optimization_notification),\n                        onClick = {\n                            batteryOptimizationsLauncher.launch(\n                                Intent(\n                                    android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,\n                                    Uri.fromParts(\"package\", context.packageName, null)\n                                )\n                            )\n                        }\n                    )\n                }\n                \n                ListSection {\n                    generalSections.forEach { (name, description, icon, destination) ->\n                        SettingsListItem(\n                            headlineContent = stringResource(name),\n                            supportingContent = stringResource(description),\n                            leadingContent = { ExpressiveListIcon(icon = icon) },\n                            onClick = { navigate(destination) }\n                        )\n                    }\n                }\n\n                ListSection {\n                    advancedSections.forEach { (name, description, icon, destination) ->\n                        val hasSafeguardWarning = destination == Settings.Advanced && safeguardsToggled\n                        val supportingText = if (hasSafeguardWarning) {\n                            \"Safeguards have been toggled\"\n                        } else {\n                            stringResource(description)\n                        }\n                        SettingsListItem(\n                            headlineContent = stringResource(name),\n                            supportingContent = supportingText,\n                            supportingContentColor = if (hasSafeguardWarning) {\n                                MaterialTheme.colorScheme.error\n                            } else {\n                                Color.Unspecified\n                            },\n                            leadingContent = { ExpressiveListIcon(icon = icon) },\n                            onClick = { navigate(destination) }\n                        )\n                    }\n                }\n\n                developerSection?.let { (name, description, icon, destination) ->\n                    ListSection {\n                        SettingsListItem(\n                            headlineContent = stringResource(name),\n                            supportingContent = stringResource(description),\n                            leadingContent = { ExpressiveListIcon(icon = icon) },\n                            onClick = { navigate(destination) }\n                        )\n                    }\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/UpdateScreen.kt",
    "content": "package app.revanced.manager.ui.screen\n\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.ColumnScope\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.navigationBarsPadding\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Cancel\nimport androidx.compose.material.icons.outlined.InstallMobile\nimport androidx.compose.material.icons.outlined.Update\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.FilledTonalButton\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.LinearWavyProgressIndicator\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.rememberTopAppBarState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.Stable\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.network.dto.ReVancedAsset\nimport app.revanced.manager.ui.component.AppTopBar\nimport app.revanced.manager.ui.component.BottomContentBar\nimport app.revanced.manager.ui.component.ColumnWithScrollbarEdgeShadow\nimport app.revanced.manager.ui.component.settings.Changelog\nimport app.revanced.manager.ui.viewmodel.UpdateViewModel\nimport app.revanced.manager.ui.viewmodel.UpdateViewModel.State\nimport app.revanced.manager.util.relativeTime\nimport org.koin.androidx.compose.koinViewModel\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\n@Stable\nfun UpdateScreen(\n    onBackClick: () -> Unit,\n    vm: UpdateViewModel = koinViewModel()\n) {\n    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())\n\n    val buttonConfig = when (vm.state) {\n        State.CAN_DOWNLOAD -> Triple(\n            { vm.downloadUpdate() },\n            R.string.download,\n            Icons.Outlined.InstallMobile\n        )\n        State.DOWNLOADING -> Triple(onBackClick, R.string.cancel, Icons.Outlined.Cancel)\n        State.CAN_INSTALL -> Triple(\n            { vm.installUpdate() },\n            R.string.install_app,\n            Icons.Outlined.InstallMobile\n        )\n        else -> null\n    }\n\n    Scaffold(\n        topBar = {\n            AppTopBar(\n                title = {\n                    Column {\n                        Text(stringResource(vm.state.title))\n\n                        if (vm.state == State.DOWNLOADING) {\n                            Text(\n                                text = \"${vm.downloadedSize.div(1000000)} MB /  ${\n                                    vm.totalSize.div(1000000)\n                                } MB (${vm.downloadProgress.times(100).toInt()}%)\",\n                                style = MaterialTheme.typography.bodySmall,\n                                color = MaterialTheme.colorScheme.outline\n                            )\n                        }\n                    }\n                },\n                scrollBehavior = scrollBehavior,\n                onBackClick = onBackClick\n            )\n        },\n        bottomBar = {\n            buttonConfig?.let { (onClick, textRes, icon) ->\n                BottomContentBar(modifier = Modifier.navigationBarsPadding()) {\n                    FilledTonalButton(\n                        modifier = Modifier\n                            .fillMaxWidth()\n                            .height(56.dp),\n                        onClick = onClick::invoke,\n                        shapes = ButtonDefaults.shapes()\n                    ) {\n                        Icon(icon, contentDescription = null)\n                        Spacer(modifier = Modifier.width(8.dp))\n                        Text(text = stringResource(textRes))\n                    }\n                }\n            }\n        },\n        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),\n    ) { paddingValues ->\n        Column(\n            modifier = Modifier.padding(paddingValues),\n        ) {\n            if (vm.state == State.DOWNLOADING)\n                LinearWavyProgressIndicator(\n                    progress = { vm.downloadProgress },\n                    modifier = Modifier.fillMaxWidth(),\n                )\n\n            AnimatedVisibility(visible = vm.showInternetCheckDialog) {\n                MeteredDownloadConfirmationDialog(\n                    onDismiss = { vm.showInternetCheckDialog = false },\n                    onDownloadAnyways = { vm.downloadUpdate(true) }\n                )\n            }\n\n            vm.releaseInfo?.let { changelog ->\n                Changelog(changelog)\n            }\n        }\n    }\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nprivate fun MeteredDownloadConfirmationDialog(\n    onDismiss: () -> Unit,\n    onDownloadAnyways: () -> Unit\n) {\n    AlertDialog(\n        onDismissRequest = onDismiss,\n        dismissButton = {\n            TextButton(onDismiss, shapes = ButtonDefaults.shapes()) {\n                Text(stringResource(R.string.cancel))\n            }\n        },\n        confirmButton = {\n            TextButton(\n                onClick = {\n                    onDismiss()\n                    onDownloadAnyways()\n                },\n                shapes = ButtonDefaults.shapes()\n            ) {\n                Text(stringResource(R.string.download))\n            }\n        },\n        title = { Text(stringResource(R.string.download_update_confirmation)) },\n        icon = { Icon(Icons.Outlined.Update, null) },\n        text = { Text(stringResource(R.string.download_confirmation_metered)) }\n    )\n}\n\n@Composable\nprivate fun ColumnScope.Changelog(releaseInfo: ReVancedAsset) {\n    ColumnWithScrollbarEdgeShadow(\n        modifier = Modifier\n            .weight(1f)\n            .fillMaxSize()\n            .padding(16.dp),\n    ) {\n        Changelog(\n            markdown = releaseInfo.description.replace(\"`\", \"\"),\n            version = releaseInfo.version,\n            publishDate = releaseInfo.createdAt.relativeTime(LocalContext.current)\n        )\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/onboarding/AppsStepContent.kt",
    "content": "package app.revanced.manager.ui.screen.onboarding\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.WifiOff\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.LoadingIndicator\nimport app.revanced.manager.ui.component.onboarding.OnboardingAppList\nimport app.revanced.manager.util.AppInfo\n\n@Composable\nfun AppsStepContent(\n    modifier: Modifier = Modifier,\n    apps: List<AppInfo>?,\n    hasNetworkError: Boolean,\n    suggestedVersions: Map<String, String?>,\n    onAppClick: (String) -> Unit\n) {\n    when {\n        apps != null -> OnboardingAppList(\n            modifier = modifier,\n            apps = apps,\n            suggestedVersions = suggestedVersions,\n            onAppClick = onAppClick\n        )\n\n        hasNetworkError -> Box(\n            modifier = modifier.fillMaxSize(),\n            contentAlignment = Alignment.Center\n        ) {\n            Column(\n                horizontalAlignment = Alignment.CenterHorizontally,\n                verticalArrangement = Arrangement.spacedBy(16.dp),\n                modifier = Modifier.padding(horizontal = 24.dp)\n            ) {\n                Icon(\n                    imageVector = Icons.Outlined.WifiOff,\n                    contentDescription = null,\n                    modifier = Modifier.size(48.dp),\n                    tint = MaterialTheme.colorScheme.onSurfaceVariant\n                )\n                Text(\n                    text = stringResource(R.string.sideeffect_no_network),\n                    style = MaterialTheme.typography.bodyLarge,\n                    color = MaterialTheme.colorScheme.onSurfaceVariant,\n                    textAlign = TextAlign.Center\n                )\n            }\n        }\n\n        else -> Box(\n            modifier = modifier.fillMaxSize(),\n            contentAlignment = Alignment.Center\n        ) {\n            LoadingIndicator()\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/onboarding/PermissionsStepContent.kt",
    "content": "package app.revanced.manager.ui.screen.onboarding\n\nimport android.os.Build\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.shape.CircleShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Check\nimport androidx.compose.material.icons.outlined.BatteryAlert\nimport androidx.compose.material.icons.outlined.Notifications\nimport androidx.compose.material.icons.outlined.Security\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.FilledTonalButton\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Text\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.Dp\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.ListSection\nimport app.revanced.manager.ui.component.settings.SettingsListItem\n\n@Composable\nfun PermissionsStepContent(\n    canInstallUnknownApps: Boolean,\n    isNotificationsEnabled: Boolean,\n    isBatteryOptimizationExempt: Boolean,\n    onRequestInstallApps: () -> Unit,\n    onRequestNotifications: () -> Unit,\n    onRequestBatteryOptimization: () -> Unit\n) {\n    ListSection(contentPadding = PaddingValues(0.dp)) {\n        PermissionItem(\n            icon = Icons.Outlined.Security,\n            title = stringResource(R.string.permission_install_apps),\n            description = stringResource(R.string.permission_install_apps_description),\n            isGranted = canInstallUnknownApps,\n            onRequest = onRequestInstallApps\n        )\n\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n            PermissionItem(\n                icon = Icons.Outlined.Notifications,\n                title = stringResource(R.string.permission_notifications),\n                description = stringResource(R.string.permission_notifications_description),\n                isGranted = isNotificationsEnabled,\n                onRequest = onRequestNotifications\n            )\n        }\n\n        PermissionItem(\n            icon = Icons.Outlined.BatteryAlert,\n            title = stringResource(R.string.permission_battery),\n            description = stringResource(R.string.permission_battery_description),\n            isGranted = isBatteryOptimizationExempt,\n            onRequest = onRequestBatteryOptimization\n        )\n    }\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nprivate fun PermissionItem(\n    icon: ImageVector,\n    title: String,\n    description: String,\n    isGranted: Boolean,\n    onRequest: () -> Unit\n) {\n    SettingsListItem(\n        onClick = if (isGranted) null else onRequest,\n        headlineContent = title,\n        supportingContent = description,\n        leadingContent = {\n            OnboardingLeadingIcon(\n                icon = icon,\n                containerColor = if (isGranted) {\n                    MaterialTheme.colorScheme.primaryContainer\n                } else {\n                    MaterialTheme.colorScheme.surfaceContainerHighest\n                },\n                iconColor = if (isGranted) {\n                    MaterialTheme.colorScheme.onPrimaryContainer\n                } else {\n                    MaterialTheme.colorScheme.onSurfaceVariant\n                }\n            )\n        },\n        trailingContent = {\n            if (isGranted) {\n                OnboardingLeadingIcon(\n                    icon = Icons.Default.Check,\n                    containerColor = MaterialTheme.colorScheme.primaryContainer,\n                    iconColor = MaterialTheme.colorScheme.onPrimaryContainer,\n                    size = 32.dp,\n                    iconSize = 16.dp\n                )\n            } else {\n                FilledTonalButton(\n                    onClick = onRequest,\n                    contentPadding = PaddingValues(horizontal = 12.dp, vertical = 8.dp),\n                    shapes = ButtonDefaults.shapes()\n                ) {\n                    Text(\n                        text = stringResource(R.string.permission_grant),\n                        style = MaterialTheme.typography.labelMedium\n                    )\n                }\n            }\n        }\n    )\n}\n\n@Composable\ninternal fun OnboardingLeadingIcon(\n    icon: ImageVector,\n    containerColor: Color = MaterialTheme.colorScheme.primaryContainer,\n    iconColor: Color = MaterialTheme.colorScheme.onPrimaryContainer,\n    size: Dp = 40.dp,\n    iconSize: Dp = 22.dp\n) {\n    Box(\n        modifier = Modifier\n            .size(size)\n            .clip(CircleShape)\n            .background(containerColor),\n        contentAlignment = Alignment.Center\n    ) {\n        Icon(\n            imageVector = icon,\n            contentDescription = null,\n            modifier = Modifier.size(iconSize),\n            tint = iconColor\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/onboarding/UpdatesStepContent.kt",
    "content": "package app.revanced.manager.ui.screen.onboarding\n\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Download\nimport androidx.compose.material.icons.outlined.Source\nimport androidx.compose.material.icons.outlined.Update\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.ListSection\nimport app.revanced.manager.ui.component.haptics.HapticCheckbox\nimport app.revanced.manager.ui.component.settings.SettingsListItem\n\n@Composable\nfun UpdatesStepContent(\n    managerEnabled: Boolean,\n    patchesEnabled: Boolean,\n    downloadersEnabled: Boolean,\n    onManagerEnabledChange: (Boolean) -> Unit,\n    onPatchesEnabledChange: (Boolean) -> Unit,\n    onDownloadersEnabledChange: (Boolean) -> Unit,\n) {\n    ListSection(contentPadding = PaddingValues(0.dp)) {\n        UpdatesItem(\n            headline = stringResource(R.string.auto_updates_dialog_manager),\n            icon = Icons.Outlined.Update,\n            checked = managerEnabled,\n            onCheckedChange = onManagerEnabledChange\n        )\n        UpdatesItem(\n            headline = stringResource(R.string.auto_updates_dialog_patches),\n            icon = Icons.Outlined.Source,\n            checked = patchesEnabled,\n            onCheckedChange = onPatchesEnabledChange\n        )\n        UpdatesItem(\n            headline = stringResource(R.string.auto_updates_dialog_downloaders),\n            icon = Icons.Outlined.Download,\n            checked = downloadersEnabled,\n            onCheckedChange = onDownloadersEnabledChange\n        )\n    }\n}\n\n@Composable\nprivate fun UpdatesItem(\n    headline: String,\n    icon: ImageVector,\n    checked: Boolean,\n    onCheckedChange: (Boolean) -> Unit\n) {\n    SettingsListItem(\n        onClick = { onCheckedChange(!checked) },\n        headlineContent = headline,\n        leadingContent = { OnboardingLeadingIcon(icon = icon) },\n        trailingContent = {\n            HapticCheckbox(\n                checked = checked,\n                onCheckedChange = null\n            )\n        }\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/settings/AboutSettingsScreen.kt",
    "content": "package app.revanced.manager.ui.screen.settings\n\nimport androidx.appcompat.content.res.AppCompatResources\nimport androidx.compose.foundation.BorderStroke\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.ExperimentalLayoutApi\nimport androidx.compose.foundation.layout.FlowRow\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.FavoriteBorder\nimport androidx.compose.material.icons.outlined.MailOutline\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.FilledTonalButton\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.OutlinedCard\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.SnackbarDuration\nimport androidx.compose.material3.SnackbarHost\nimport androidx.compose.material3.SnackbarHostState\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.rememberTopAppBarState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableIntStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalResources\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.semantics.hideFromAccessibility\nimport androidx.compose.ui.semantics.semantics\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.BuildConfig\nimport app.revanced.manager.R\nimport app.revanced.manager.network.dto.ReVancedSocial\nimport app.revanced.manager.ui.component.AppTopBar\nimport app.revanced.manager.ui.component.ColumnWithScrollbar\nimport app.revanced.manager.ui.component.ListSection\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.settings.SettingsListItem\nimport app.revanced.manager.ui.model.navigation.Settings\nimport app.revanced.manager.ui.viewmodel.AboutViewModel\nimport app.revanced.manager.ui.viewmodel.AboutViewModel.Companion.DEVELOPER_OPTIONS_TAPS\nimport app.revanced.manager.ui.viewmodel.AboutViewModel.Companion.getSocialIcon\nimport app.revanced.manager.util.openUrl\nimport app.revanced.manager.util.toast\nimport com.google.accompanist.drawablepainter.rememberDrawablePainter\nimport org.koin.androidx.compose.koinViewModel\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class,\n    ExperimentalMaterial3ExpressiveApi::class\n)\n@Composable\nfun AboutSettingsScreen(\n    onBackClick: () -> Unit,\n    navigate: (Settings.Destination) -> Unit,\n    viewModel: AboutViewModel = koinViewModel()\n) {\n    val context = LocalContext.current\n    val resources = LocalResources.current\n    // painterResource() is broken on release builds for some reason.\n    val icon = rememberDrawablePainter(drawable = remember(resources) {\n        AppCompatResources.getDrawable(context, R.drawable.ic_logo_ring)\n    })\n\n    val (preferredSocials, socials) = remember(viewModel.socials) {\n        viewModel.socials.partition(ReVancedSocial::preferred)\n    }\n\n    val preferredSocialButtons = remember(resources, preferredSocials, viewModel.donate, viewModel.contact) {\n        preferredSocials.map {\n            Triple(\n                getSocialIcon(it.name),\n                it.name,\n                third = {\n                    context.openUrl(it.url)\n                }\n            )\n        } + listOfNotNull(\n            viewModel.donate?.let {\n                Triple(\n                    Icons.Outlined.FavoriteBorder,\n                    resources.getString(R.string.donate),\n                    third = {\n                        context.openUrl(it)\n                    }\n                )\n            },\n            viewModel.contact?.let {\n                Triple(\n                    Icons.Outlined.MailOutline,\n                    resources.getString(R.string.contact),\n                    third = {\n                        context.openUrl(\"mailto:$it\")\n                    }\n                )\n            }\n        )\n    }\n\n    val socialButtons = remember(socials) {\n        socials.map {\n            Triple(\n                getSocialIcon(it.name),\n                it.name,\n                third = {\n                    context.openUrl(it.url)\n                }\n            )\n        }\n    }\n\n    val listItems = listOfNotNull(\n        Triple(\n            stringResource(R.string.submit_feedback),\n            stringResource(R.string.submit_feedback_description),\n            third = {\n                context.openUrl(\"https://github.com/ReVanced/revanced-manager/issues/new/choose\")\n            }),\n        Triple(\n            stringResource(R.string.contributors),\n            stringResource(R.string.contributors_description),\n            third = nav@{\n                if (!viewModel.isConnected) {\n                    context.toast(resources.getString(R.string.no_network_toast))\n                    return@nav\n                }\n\n                navigate(Settings.Contributors)\n            }\n        ),\n        Triple(\n            stringResource(R.string.opensource_licenses),\n            stringResource(R.string.opensource_licenses_description),\n            third = { navigate(Settings.Licenses) }\n        )\n    )\n\n    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())\n    val snackbarHostState = remember { SnackbarHostState() }\n\n    val showDeveloperSettings by viewModel.showDeveloperSettings.getAsState()\n    var developerTaps by rememberSaveable { mutableIntStateOf(0) }\n    LaunchedEffect(developerTaps) {\n        if (developerTaps == 0) return@LaunchedEffect\n        if (showDeveloperSettings) {\n            snackbarHostState.showSnackbar(resources.getString(R.string.developer_options_already_enabled))\n            developerTaps = 0\n            return@LaunchedEffect\n        }\n\n        val remaining = DEVELOPER_OPTIONS_TAPS - developerTaps\n        if (remaining > 0) {\n            snackbarHostState.showSnackbar(\n                resources.getString(\n                    R.string.developer_options_taps,\n                    remaining\n                ),\n                duration = SnackbarDuration.Long\n            )\n        } else if (remaining == 0) {\n            viewModel.showDeveloperSettings.update(true)\n            snackbarHostState.showSnackbar(resources.getString(R.string.developer_options_enabled))\n        }\n\n        // Reset the counter\n        developerTaps = 0\n    }\n\n    Scaffold(\n        topBar = {\n            AppTopBar(\n                title = stringResource(R.string.about),\n                scrollBehavior = scrollBehavior,\n                onBackClick = onBackClick\n            )\n        },\n        snackbarHost = {\n            SnackbarHost(hostState = snackbarHostState)\n        },\n        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),\n    ) { paddingValues ->\n        ColumnWithScrollbar(\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(paddingValues),\n            horizontalAlignment = Alignment.CenterHorizontally,\n            verticalArrangement = Arrangement.spacedBy(16.dp)\n        ) {\n            Image(\n                modifier = Modifier\n                    .padding(top = 16.dp)\n                    .clickable { developerTaps += 1 },\n                painter = icon,\n                contentDescription = stringResource(R.string.app_name)\n            )\n            Column(\n                horizontalAlignment = Alignment.CenterHorizontally,\n                verticalArrangement = Arrangement.spacedBy(4.dp)\n            ) {\n                Text(\n                    stringResource(R.string.app_name),\n                    style = MaterialTheme.typography.headlineSmall,\n                    modifier = Modifier.semantics {\n                        // Icon already has this information for the purpose of being clickable.\n                        hideFromAccessibility()\n                    }\n                )\n                Text(\n                    text = stringResource(R.string.version) + \" \" + BuildConfig.VERSION_NAME + \" (\" + BuildConfig.VERSION_CODE + \")\",\n                    style = MaterialTheme.typography.bodyMedium,\n                    color = MaterialTheme.colorScheme.outline\n                )\n            }\n            FlowRow(\n                maxItemsInEachRow = 2,\n                horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterHorizontally),\n                modifier = Modifier.padding(horizontal = 16.dp)\n            ) {\n                preferredSocialButtons.forEach { (icon, text, onClick) ->\n                    FilledTonalButton(\n                        onClick = onClick,\n                        modifier = Modifier.weight(1f),\n                        shapes = ButtonDefaults.shapes()\n                    ) {\n                        Row(\n                            horizontalArrangement = Arrangement.spacedBy(8.dp),\n                            verticalAlignment = Alignment.CenterVertically\n                        ) {\n                            Icon(\n                                icon,\n                                contentDescription = null,\n                                modifier = Modifier.size(18.dp)\n                            )\n                            Text(\n                                text,\n                                style = MaterialTheme.typography.labelLarge\n                            )\n                        }\n                    }\n                }\n            }\n            FlowRow(\n                horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterHorizontally)\n            ) {\n                socialButtons.forEach { (icon, text, onClick) ->\n                    TooltipIconButton(\n                        onClick = onClick,\n                        modifier = Modifier.padding(end = 8.dp),\n                        tooltip = text\n                    ) {\n                        Icon(\n                            icon,\n                            contentDescription = text,\n                            modifier = Modifier.size(28.dp),\n                            tint = MaterialTheme.colorScheme.secondary\n                        )\n                    }\n                }\n            }\n            OutlinedCard(\n                modifier = Modifier.padding(horizontal = 16.dp),\n                border = BorderStroke(1.dp, MaterialTheme.colorScheme.outlineVariant)\n            ) {\n                Column(\n                    modifier = Modifier.padding(16.dp),\n                    verticalArrangement = Arrangement.spacedBy(8.dp)\n                ) {\n                    Text(\n                        text = stringResource(R.string.about_revanced_manager),\n                        style = MaterialTheme.typography.titleMedium\n                    )\n                    Text(\n                        text = stringResource(R.string.revanced_manager_description),\n                        style = MaterialTheme.typography.bodyMedium,\n                        color = MaterialTheme.colorScheme.onSurfaceVariant\n                    )\n                }\n            }\n            ListSection {\n                listItems.forEach { (title, description, onClick) ->\n                    SettingsListItem(\n                        modifier = Modifier.fillMaxWidth(),\n                        headlineContent = title,\n                        supportingContent = description,\n                        onClick = onClick\n                    )\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/settings/AdvancedSettingsScreen.kt",
    "content": "package app.revanced.manager.ui.screen.settings\n\nimport android.app.ActivityManager\nimport android.content.ClipData\nimport android.content.ClipboardManager\nimport android.os.Build\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material.icons.outlined.BugReport\nimport androidx.compose.material.icons.outlined.Security\nimport androidx.compose.material.icons.outlined.Tune\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MediumFlexibleTopAppBar\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableIntStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalResources\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport androidx.core.content.getSystemService\nimport androidx.core.view.HapticFeedbackConstantsCompat\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.BuildConfig\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.ColumnWithScrollbar\nimport app.revanced.manager.ui.component.ListSection\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.settings.BooleanItem\nimport app.revanced.manager.ui.component.settings.IntegerItem\nimport app.revanced.manager.ui.component.settings.SafeguardBooleanItem\nimport app.revanced.manager.ui.component.settings.SettingsListItem\nimport app.revanced.manager.ui.viewmodel.AdvancedSettingsViewModel\nimport app.revanced.manager.util.toast\nimport app.revanced.manager.util.withHapticFeedback\nimport org.koin.androidx.compose.koinViewModel\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun AdvancedSettingsScreen(\n    onBackClick: () -> Unit,\n    viewModel: AdvancedSettingsViewModel = koinViewModel()\n) {\n    val context = LocalContext.current\n    val resources = LocalResources.current\n    val memoryLimit = remember(resources) {\n        val activityManager = context.getSystemService<ActivityManager>()!!\n        resources.getString(\n            R.string.device_memory_limit_format,\n            activityManager.memoryClass,\n            activityManager.largeMemoryClass\n        )\n    }\n    val scrollState = rememberScrollState()\n    val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(\n        canScroll = {\n            scrollState.canScrollBackward || scrollState.canScrollForward\n        }\n    )\n\n    val showDeveloperSettings by viewModel.prefs.showDeveloperSettings.getAsState()\n    var developerTaps by rememberSaveable { mutableIntStateOf(0) }\n\n    LaunchedEffect(developerTaps) {\n        if (developerTaps < 10) return@LaunchedEffect\n\n        if (showDeveloperSettings) {\n            context.toast(context.getString(R.string.developer_options_already_enabled))\n        } else {\n            viewModel.prefs.showDeveloperSettings.update(true)\n            context.toast(context.getString(R.string.developer_options_enabled))\n        }\n        developerTaps = 0\n    }\n\n    Scaffold(\n        topBar = {\n            MediumFlexibleTopAppBar(\n                title = { Text(stringResource(R.string.advanced)) },\n                navigationIcon = {\n                    TooltipIconButton(\n                        onClick = onBackClick,\n                        tooltip = stringResource(R.string.back)\n                    ) {\n                        Icon(\n                            Icons.AutoMirrored.Filled.ArrowBack,\n                            contentDescription = stringResource(R.string.back)\n                        )\n                    }\n                },\n                scrollBehavior = scrollBehavior\n            )\n        },\n        modifier = Modifier.then(\n            scrollBehavior.let { Modifier.nestedScroll(it.nestedScrollConnection) }\n        ),\n    ) { paddingValues ->\n        ColumnWithScrollbar(\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(paddingValues),\n            state = scrollState\n        ) {\n            ListSection(\n                title = stringResource(R.string.safeguards),\n                leadingContent = {\n                    Icon(\n                        Icons.Outlined.Security,\n                        contentDescription = null,\n                        modifier = Modifier.size(18.dp)\n                    )\n                }\n            ) {\n                SafeguardBooleanItem(\n                    preference = viewModel.prefs.disablePatchVersionCompatCheck,\n                    coroutineScope = viewModel.viewModelScope,\n                    headline = R.string.patch_compat_check,\n                    description = R.string.patch_compat_check_description,\n                dialogTitle = R.string.patch_compat_check_title,\n                    confirmationText = R.string.patch_compat_check_confirmation\n                )\n                SafeguardBooleanItem(\n                    preference = viewModel.prefs.suggestedVersionSafeguard,\n                    coroutineScope = viewModel.viewModelScope,\n                    headline = R.string.suggested_version_safeguard,\n                    description = R.string.suggested_version_safeguard_description,\n                dialogTitle = R.string.suggested_version_safeguard_title,\n                    confirmationText = R.string.suggested_version_safeguard_confirmation\n                )\n                SafeguardBooleanItem(\n                    preference = viewModel.prefs.disableSelectionWarning,\n                    coroutineScope = viewModel.viewModelScope,\n                    headline = R.string.patch_selection_safeguard,\n                    description = R.string.patch_selection_safeguard_description,\n                dialogTitle = R.string.patch_selection_safeguard_title,\n                    confirmationText = R.string.patch_selection_safeguard_confirmation\n                )\n                SafeguardBooleanItem(\n                    preference = viewModel.prefs.disableUniversalPatchCheck,\n                    coroutineScope = viewModel.viewModelScope,\n                    headline = R.string.universal_patches_safeguard,\n                    description = R.string.universal_patches_safeguard_description,\n                    dialogTitle = R.string.universal_patches_safeguard_title,\n                    confirmationText = R.string.universal_patches_safeguard_confirmation\n                )\n            }\n\n            ListSection(\n                title = stringResource(R.string.patcher),\n                leadingContent = {\n                    Icon(\n                        Icons.Outlined.Tune,\n                        contentDescription = null,\n                        modifier = Modifier.size(18.dp)\n                    )\n                }\n            ) {\n                val useProcessRuntime by viewModel.prefs.useProcessRuntime.getAsState()\n\n                BooleanItem(\n                    preference = viewModel.prefs.useProcessRuntime,\n                    coroutineScope = viewModel.viewModelScope,\n                    headline = R.string.process_runtime,\n                    description = R.string.process_runtime_description,\n                )\n                AnimatedVisibility(\n                    visible = useProcessRuntime,\n                ) {\n                    IntegerItem(\n                        preference = viewModel.prefs.patcherProcessMemoryLimit,\n                        coroutineScope = viewModel.viewModelScope,\n                        headline = R.string.process_runtime_memory_limit,\n                        description = R.string.process_runtime_memory_limit_description,\n                        unit = \"MiB\",\n                    )\n                }\n            }\n\n            ListSection(\n                title = stringResource(R.string.debugging),\n                leadingContent = {\n                    Icon(\n                        Icons.Outlined.BugReport,\n                        contentDescription = null,\n                        modifier = Modifier.size(18.dp)\n                    )\n                }\n            ) {\n                val exportDebugLogsLauncher =\n                    rememberLauncherForActivityResult(ActivityResultContracts.CreateDocument(\"text/plain\")) {\n                        it?.let(viewModel::exportDebugLogs)\n                    }\n                val clipboard = remember { context.getSystemService<ClipboardManager>()!! }\n                val deviceContent = \"\"\"\n                    Version: ${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})\n                    Build type: ${BuildConfig.BUILD_TYPE}\n                    Model: ${Build.MODEL}\n                    Android version: ${Build.VERSION.RELEASE} (${Build.VERSION.SDK_INT})\n                    Supported Archs: ${Build.SUPPORTED_ABIS.joinToString(\", \")}\n                    Memory limit: $memoryLimit\n                \"\"\".trimIndent()\n                SettingsListItem(\n                    headlineContent = stringResource(R.string.debug_logs_export),\n                    onClick = { exportDebugLogsLauncher.launch(viewModel.debugLogFileName) }\n                )\n                SettingsListItem(\n                    headlineContent = stringResource(R.string.about_device),\n                    supportingContent = deviceContent,\n                    onClick = { developerTaps++ },\n                    onLongClickLabel = stringResource(R.string.copy_to_clipboard),\n                    onLongClick = {\n                        clipboard.setPrimaryClip(\n                            ClipData.newPlainText(\"Device Information\", deviceContent)\n                        )\n                        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) context.toast(\n                            resources.getString(R.string.toast_copied_to_clipboard)\n                        )\n                    }.withHapticFeedback(HapticFeedbackConstantsCompat.LONG_PRESS)\n                )\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/settings/ContributorSettingsScreen.kt",
    "content": "package app.revanced.manager.ui.screen.settings\n\nimport androidx.compose.foundation.border\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.BoxWithConstraints\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.ExperimentalLayoutApi\nimport androidx.compose.foundation.layout.FlowRow\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.pager.HorizontalPager\nimport androidx.compose.foundation.pager.rememberPagerState\nimport androidx.compose.foundation.shape.CircleShape\nimport androidx.compose.material3.Card\nimport androidx.compose.material3.CardDefaults\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.rememberTopAppBarState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.remember\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.layout.ContentScale\nimport androidx.compose.ui.platform.LocalUriHandler\nimport androidx.compose.ui.platform.UriHandler\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.text.style.TextOverflow\nimport androidx.compose.ui.unit.coerceAtMost\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.times\nimport app.revanced.manager.R\nimport app.revanced.manager.network.dto.ReVancedContributor\nimport app.revanced.manager.ui.component.AppTopBar\nimport app.revanced.manager.ui.component.LazyColumnWithScrollbar\nimport app.revanced.manager.ui.component.LoadingIndicator\nimport app.revanced.manager.ui.viewmodel.ContributorViewModel\nimport coil.compose.AsyncImage\nimport org.koin.androidx.compose.koinViewModel\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun ContributorSettingsScreen(\n    onBackClick: () -> Unit,\n    viewModel: ContributorViewModel = koinViewModel()\n) {\n    val repositories = viewModel.repositories\n    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())\n    val uriHandler = LocalUriHandler.current\n\n    Scaffold(\n        topBar = {\n            AppTopBar(\n                title = stringResource(R.string.contributors),\n                scrollBehavior = scrollBehavior,\n                onBackClick = onBackClick\n            )\n        },\n        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),\n    ) { paddingValues ->\n        LazyColumnWithScrollbar(\n            modifier = Modifier\n                .fillMaxHeight()\n                .padding(paddingValues)\n                .fillMaxWidth(),\n            contentPadding = PaddingValues(16.dp),\n            verticalArrangement = if (repositories.isNullOrEmpty()) Arrangement.Center else Arrangement.spacedBy(\n                24.dp\n            )\n        ) {\n            repositories?.let { repositories ->\n                if (repositories.isEmpty()) {\n                    item {\n                        Text(\n                            text = stringResource(id = R.string.no_contributors_found),\n                            style = MaterialTheme.typography.titleLarge\n                        )\n                    }\n                } else {\n                    items(\n                        items = repositories,\n                        key = { it.name }\n                    ) {\n                        ContributorsCard(\n                            title = it.name,\n                            contributors = it.contributors,\n                            uriHandler = uriHandler\n                        )\n                    }\n                }\n            } ?: item {\n                Row(\n                    modifier = Modifier.fillMaxWidth(),\n                    horizontalArrangement = Arrangement.Center\n                ) {\n                    LoadingIndicator()\n                }\n            }\n        }\n    }\n}\n\n@OptIn(ExperimentalLayoutApi::class)\n@Composable\nfun ContributorsCard(\n    title: String,\n    contributors: List<ReVancedContributor>,\n    itemsPerPage: Int = 12,\n    numberOfRows: Int = 2,\n    uriHandler: UriHandler\n) {\n    val itemsPerRow = (itemsPerPage / numberOfRows)\n\n    // Create a list of contributors grouped by itemsPerPage\n    val contributorsByPage = remember(itemsPerPage, contributors) {\n        contributors.chunked(itemsPerPage)\n    }\n    val pagerState = rememberPagerState { contributorsByPage.size }\n\n    Card(\n        modifier = Modifier\n            .fillMaxWidth()\n            .border(\n                width = 1.dp,\n                color = MaterialTheme.colorScheme.surfaceContainerHigh,\n                shape = MaterialTheme.shapes.medium\n            ),\n        colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceContainer)\n    ) {\n        Column(\n            modifier = Modifier.padding(16.dp),\n            verticalArrangement = Arrangement.spacedBy(16.dp)\n        ) {\n            Row(\n                horizontalArrangement = Arrangement.spacedBy(8.dp),\n                verticalAlignment = Alignment.CenterVertically\n            ) {\n                Text(\n                    text = title,\n                    style = MaterialTheme.typography.titleMedium.copy(fontWeight = FontWeight.Medium)\n                )\n                Text(\n                    text = \"(${(pagerState.currentPage + 1)}/${pagerState.pageCount})\",\n                    color = MaterialTheme.colorScheme.onSurfaceVariant,\n                    style = MaterialTheme.typography.labelMedium.copy(fontWeight = FontWeight.SemiBold)\n                )\n            }\n            HorizontalPager(\n                state = pagerState,\n                userScrollEnabled = true,\n                modifier = Modifier.fillMaxSize(),\n            ) { page ->\n                BoxWithConstraints {\n                    val spaceBetween = 16.dp\n                    val maxWidth = this.maxWidth\n                    val itemSize = (maxWidth - (itemsPerRow - 1) * spaceBetween) / itemsPerRow\n                    val itemSpacing = (maxWidth - itemSize * 6) / (itemsPerRow - 1)\n                    FlowRow(\n                        maxItemsInEachRow = itemsPerRow,\n                        horizontalArrangement = Arrangement.spacedBy(itemSpacing),\n                        verticalArrangement = Arrangement.spacedBy(16.dp),\n                        modifier = Modifier.fillMaxWidth()\n                    ) {\n                        contributorsByPage[page].forEach {\n                            if (itemSize > 100.dp) {\n                                Row(\n                                    modifier = Modifier\n                                        .width(itemSize - 1.dp)\n                                        .clickable {\n                                            uriHandler.openUri(\"https://github.com/${it.username}\")\n                                        }, // we delete 1.dp to account for not-so divisible numbers\n                                    verticalAlignment = Alignment.CenterVertically,\n                                    horizontalArrangement = Arrangement.spacedBy(12.dp)\n                                ) {\n                                    AsyncImage(\n                                        model = it.avatarUrl,\n                                        contentDescription = it.avatarUrl,\n                                        contentScale = ContentScale.Crop,\n                                        modifier = Modifier\n                                            .size((itemSize / 3).coerceAtMost(40.dp))\n                                            .clip(CircleShape)\n                                    )\n                                    Text(\n                                        text = it.username,\n                                        style = MaterialTheme.typography.bodyLarge,\n                                        maxLines = 1,\n                                        overflow = TextOverflow.Ellipsis\n                                    )\n                                }\n                            } else {\n                                Box(\n                                    modifier = Modifier.width(itemSize - 1.dp),\n                                    contentAlignment = Alignment.Center\n                                ) {\n                                    AsyncImage(\n                                        model = it.avatarUrl,\n                                        contentDescription = it.avatarUrl,\n                                        contentScale = ContentScale.Crop,\n                                        modifier = Modifier\n                                            .size(size = (itemSize - 1.dp).coerceAtMost(50.dp)) // we delete 1.dp to account for not-so divisible numbers\n                                            .clip(CircleShape)\n                                            .clickable {\n                                                uriHandler.openUri(\"https://github.com/${it.username}\")\n                                            }\n                                    )\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/settings/DeveloperSettingsScreen.kt",
    "content": "package app.revanced.manager.ui.screen.settings\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material.icons.outlined.Api\nimport androidx.compose.material.icons.outlined.PostAdd\nimport androidx.compose.material.icons.outlined.Restore\nimport androidx.compose.material.icons.outlined.WorkOutline\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\n\n\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.MediumFlexibleTopAppBar\nimport androidx.compose.material3.OutlinedTextField\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.ui.component.ColumnWithScrollbar\nimport app.revanced.manager.ui.component.ListSection\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.settings.BooleanItem\nimport app.revanced.manager.ui.component.settings.SettingsListItem\nimport app.revanced.manager.ui.viewmodel.DeveloperOptionsViewModel\nimport org.koin.androidx.compose.koinViewModel\nimport org.koin.compose.koinInject\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun DeveloperSettingsScreen(\n    onBackClick: () -> Unit,\n    vm: DeveloperOptionsViewModel = koinViewModel()\n) {\n    val scrollState = rememberScrollState()\n    val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(\n        canScroll = {\n            scrollState.canScrollBackward || scrollState.canScrollForward\n        }\n    )\n    val prefs: PreferencesManager = koinInject()\n\n    Scaffold(\n        topBar = {\n            MediumFlexibleTopAppBar(\n                title = { Text(stringResource(R.string.developer_options)) },\n                navigationIcon = {\n                    TooltipIconButton(\n                        onClick = onBackClick,\n                        tooltip = stringResource(R.string.back)\n                    ) {\n                        Icon(\n                            Icons.AutoMirrored.Filled.ArrowBack,\n                            contentDescription = stringResource(R.string.back)\n                        )\n                    }\n                },\n                scrollBehavior = scrollBehavior\n            )\n        },\n        modifier = Modifier.then(\n            scrollBehavior.let { Modifier.nestedScroll(it.nestedScrollConnection) }\n        ),\n    ) { paddingValues ->\n        ColumnWithScrollbar(\n            modifier = Modifier.padding(paddingValues),\n            state = scrollState\n        ) {\n            ListSection(\n                title = stringResource(R.string.manager),\n                leadingContent = { Icon(Icons.Outlined.WorkOutline, contentDescription = null, modifier = Modifier.size(18.dp)) }\n            ) {\n                val apiUrl by vm.prefs.api.getAsState()\n                var showApiUrlDialog by rememberSaveable { mutableStateOf(false) }\n\n                if (showApiUrlDialog) {\n                    APIUrlDialog(\n                        currentUrl = apiUrl,\n                        defaultUrl = vm.prefs.api.default,\n                        onSubmit = {\n                            showApiUrlDialog = false\n                            it?.let(vm::setApiUrl)\n                        }\n                    )\n                }\n\n                BooleanItem(\n                    preference = prefs.showDeveloperSettings,\n                    headline = R.string.developer_options,\n                    description = R.string.developer_options_description,\n                )\n                SettingsListItem(\n                    headlineContent = stringResource(R.string.api_url),\n                    supportingContent = stringResource(R.string.api_url_description),\n                    onClick = { showApiUrlDialog = true }\n                )\n                SettingsListItem(\n                    headlineContent = stringResource(R.string.reset_onboarding),\n                    supportingContent = stringResource(R.string.reset_onboarding_description),\n                    onClick = vm::resetOnboarding\n                )\n                SettingsListItem(\n                    headlineContent = stringResource(R.string.reset_announcement),\n                    supportingContent = stringResource(R.string.reset_announcement_description),\n                    onClick = vm::resetAnnouncement\n                )\n            }\n\n            ListSection(\n                title = stringResource(R.string.patches),\n                leadingContent = { Icon(Icons.Outlined.PostAdd, contentDescription = null, modifier = Modifier.size(18.dp)) }\n            ) {\n                SettingsListItem(\n                    headlineContent = stringResource(R.string.patches_force_download),\n                    onClick = vm::redownloadBundles\n                )\n                SettingsListItem(\n                    headlineContent = stringResource(R.string.patches_reset),\n                    onClick = vm::redownloadBundles\n                )\n            }\n        }\n    }\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nprivate fun APIUrlDialog(currentUrl: String, defaultUrl: String, onSubmit: (String?) -> Unit) {\n    var url by rememberSaveable(currentUrl) { mutableStateOf(currentUrl) }\n\n    AlertDialog(\n        onDismissRequest = { onSubmit(null) },\n        confirmButton = {\n            TextButton(\n                onClick = {\n                    onSubmit(url)\n                },\n                shapes = ButtonDefaults.shapes()\n            ) {\n                Text(stringResource(R.string.api_url_dialog_save))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = { onSubmit(null) }, shapes = ButtonDefaults.shapes()) {\n                Text(stringResource(R.string.cancel))\n            }\n        },\n        icon = {\n            Icon(Icons.Outlined.Api, null)\n        },\n        title = {\n            Text(\n                text = stringResource(R.string.api_url_dialog_title),\n                style = MaterialTheme.typography.headlineSmall.copy(textAlign = TextAlign.Center),\n                color = MaterialTheme.colorScheme.onSurface,\n            )\n        },\n        text = {\n            Column(\n                modifier = Modifier.verticalScroll(rememberScrollState()),\n                verticalArrangement = Arrangement.spacedBy(16.dp)\n            ) {\n                Text(\n                    text = stringResource(R.string.api_url_dialog_description),\n                    style = MaterialTheme.typography.bodyMedium,\n                    color = MaterialTheme.colorScheme.onSurfaceVariant\n                )\n                Text(\n                    text = stringResource(R.string.api_url_dialog_warning),\n                    style = MaterialTheme.typography.bodyMedium,\n                    color = MaterialTheme.colorScheme.error\n                )\n                OutlinedTextField(\n                    modifier = Modifier.fillMaxWidth(),\n                    value = url,\n                    onValueChange = { url = it },\n                    label = { Text(stringResource(R.string.api_url)) },\n                    trailingIcon = {\n                        TooltipIconButton(\n                            onClick = { url = defaultUrl },\n                            tooltip = stringResource(R.string.api_url_dialog_reset)\n                        ) {\n                            Icon(Icons.Outlined.Restore, stringResource(R.string.api_url_dialog_reset))\n                        }\n                    }\n                )\n            }\n        }\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/settings/DownloadersInfoScreen.kt",
    "content": "package app.revanced.manager.ui.screen.settings\n\nimport android.webkit.URLUtil.isValidUrl\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material.icons.filled.Check\nimport androidx.compose.material.icons.filled.Close\nimport androidx.compose.material.icons.filled.Delete\nimport androidx.compose.material.icons.filled.Refresh\nimport androidx.compose.material.icons.filled.Update\nimport androidx.compose.material.icons.outlined.Delete\nimport androidx.compose.material.icons.outlined.Download\nimport androidx.compose.material.icons.outlined.SignalWifiOff\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItemDefaults\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.MediumFlexibleTopAppBar\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.SegmentedListItem\nimport androidx.compose.material3.SwitchDefaults\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport app.revanced.manager.R\nimport app.revanced.manager.domain.sources.Extensions.asRemoteOrNull\nimport app.revanced.manager.ui.component.ColumnWithScrollbar\nimport app.revanced.manager.ui.component.ConfirmDialog\nimport app.revanced.manager.ui.component.EmptyState\nimport app.revanced.manager.ui.component.ListSection\nimport app.revanced.manager.ui.component.TextInputDialog\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.haptics.HapticSwitch\nimport app.revanced.manager.ui.component.settings.SafeguardBooleanItem\nimport app.revanced.manager.ui.component.settings.SettingsListItem\nimport app.revanced.manager.ui.viewmodel.DownloadsViewModel\nimport kotlinx.coroutines.launch\nimport org.koin.androidx.compose.koinViewModel\n\n@OptIn(\n    ExperimentalMaterial3Api::class,\n    ExperimentalMaterial3ExpressiveApi::class,\n    ExperimentalStdlibApi::class\n)\n@Composable\nfun DownloaderInfoScreen(\n    uid: Int,\n    onBackClick: () -> Unit,\n    viewModel: DownloadsViewModel = koinViewModel()\n) {\n    val downloaderStates by viewModel.downloaderSources.collectAsStateWithLifecycle(emptyMap())\n    val source = downloaderStates[uid] ?: return\n    val remote = source.asRemoteOrNull\n\n\n    val appName = source.name\n    val displayNames = remember(source) {\n        source.loaded?.downloaders?.map { it.name }.orEmpty()\n    }\n    val version = source.loaded?.version.orEmpty()\n    val isDeleting = viewModel.deletingDownloaderUid == uid\n\n    var showDeleteConfirmationDialog by rememberSaveable { mutableStateOf(false) }\n    val scrollState = androidx.compose.foundation.rememberScrollState()\n    val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(\n        canScroll = {\n            scrollState.canScrollBackward || scrollState.canScrollForward\n        }\n    )\n    val coroutineScope = rememberCoroutineScope()\n\n    if (showDeleteConfirmationDialog) {\n        ConfirmDialog(\n            onDismiss = { showDeleteConfirmationDialog = false },\n            onConfirm = {\n                coroutineScope.launch {\n                    viewModel.deleteDownloader(source).join()\n                    onBackClick()\n                }\n            },\n            title = stringResource(R.string.delete),\n            description = stringResource(R.string.downloader_delete_single_description, appName),\n            icon = Icons.Outlined.Delete\n        )\n    }\n\n    Scaffold(\n        topBar = {\n            MediumFlexibleTopAppBar(\n                title = { Text(appName) },\n                subtitle = version.takeIf { it.isNotEmpty() }?.let {\n                    { Text(\"v$it\") }\n                },\n                navigationIcon = {\n                    TooltipIconButton(\n                        onClick = onBackClick,\n                        tooltip = stringResource(R.string.back)\n                    ) {\n                        Icon(\n                            Icons.AutoMirrored.Filled.ArrowBack,\n                            contentDescription = stringResource(R.string.back)\n                        )\n                    }\n                },\n                actions = {\n                    if (!source.isDefault) TooltipIconButton(\n                        onClick = { showDeleteConfirmationDialog = true },\n                        enabled = !isDeleting,\n                        tooltip = stringResource(R.string.delete)\n                    ) {\n                        Icon(Icons.Filled.Delete, stringResource(R.string.delete))\n                    }\n\n                    remote?.let {\n                        val hasNetwork = remember { viewModel.networkInfo.isConnected() }\n                        if (!hasNetwork) return@let\n\n                        TooltipIconButton(\n                            onClick = { viewModel.updateDownloader(it) },\n                            enabled = !isDeleting,\n                            tooltip = stringResource(R.string.update)\n                        ) {\n                            Icon(Icons.Filled.Refresh, stringResource(R.string.update))\n                        }\n                    }\n                },\n                scrollBehavior = scrollBehavior\n            )\n        },\n        modifier = Modifier.then(\n            scrollBehavior.let { Modifier.nestedScroll(it.nestedScrollConnection) }\n        )\n    ) { paddingValues ->\n        ColumnWithScrollbar(\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(paddingValues),\n            state = scrollState,\n        ) {\n            ListSection(\n                modifier = Modifier.padding(top = 16.dp)\n            ) {\n                remote?.let { remoteSource ->\n                    val autoUpdate = remoteSource.autoUpdate\n                    SettingsListItem(\n                        headlineContent = stringResource(R.string.auto_update),\n                        supportingContent = stringResource(R.string.auto_update_description),\n                        trailingContent = {\n                            HapticSwitch(\n                                checked = autoUpdate,\n                                onCheckedChange = { viewModel.setAutoUpdate(remoteSource, it) },\n                                thumbContent = if (autoUpdate) {\n                                    {\n                                        Icon(\n                                            imageVector = Icons.Filled.Check,\n                                            contentDescription = null,\n                                            modifier = Modifier.size(SwitchDefaults.IconSize)\n                                        )\n                                    }\n                                } else {\n                                    {\n                                        Icon(\n                                            imageVector = Icons.Filled.Close,\n                                            contentDescription = null,\n                                            modifier = Modifier.size(SwitchDefaults.IconSize)\n                                        )\n                                    }\n                                }\n                            )\n                        },\n                        onClick = { viewModel.setAutoUpdate(remoteSource, !autoUpdate) }\n                    )\n                }\n\n                if (source.isDefault) {\n                    SafeguardBooleanItem(\n                        preference = viewModel.usePrereleases,\n                        headline = R.string.downloader_prereleases,\n                        description = stringResource(\n                            R.string.downloader_prereleases_description,\n                            source.name\n                        ),\n                        dialogTitle = R.string.prerelease_title,\n                        confirmationText = R.string.prereleases_warning,\n                        onValueChange = viewModel::updateUsePrereleases\n                    )\n                }\n\n                remote?.endpoint?.takeUnless { source.isDefault }?.let { url ->\n                    var showUrlInputDialog by rememberSaveable { mutableStateOf(false) }\n\n                    if (showUrlInputDialog) {\n                        TextInputDialog(\n                            initial = url,\n                            title = stringResource(R.string.downloader_url),\n                            onDismissRequest = { showUrlInputDialog = false },\n                            onConfirm = {\n                                showUrlInputDialog = false\n                                // TODO: Not implemented\n                            },\n                            validator = {\n                                if (it.isEmpty()) return@TextInputDialog false\n                                isValidUrl(it)\n                            }\n                        )\n                    }\n\n                    SettingsListItem(\n                        headlineContent = stringResource(R.string.downloader_url),\n                        supportingContent = url.ifEmpty {\n                            stringResource(R.string.field_not_set)\n                        },\n                        onClick = null\n                    )\n                }\n            }\n\n            if (displayNames.isNotEmpty()) {\n                ListSection(\n                    title = stringResource(R.string.downloaders),\n                    leadingContent = {\n                        Icon(\n                            Icons.Outlined.Download,\n                            contentDescription = null,\n                            modifier = Modifier.size(18.dp)\n                        )\n                    }\n                ) {\n                    displayNames.forEachIndexed { index, downloaderName ->\n                        SegmentedListItem(\n                            onClick = {},\n                            colors = ListItemDefaults.colors(\n                                containerColor = MaterialTheme.colorScheme.surfaceContainerLow\n                            ),\n                            shapes = ListItemDefaults.segmentedShapes(\n                                index = index,\n                                count = displayNames.size\n                            )\n                        ) {\n                            Text(downloaderName)\n                        }\n                    }\n                }\n            } else {\n                Box(\n                    modifier = Modifier\n                        .fillMaxSize()\n                        .padding(paddingValues)\n                ) {\n                    EmptyState(\n                        icon = Icons.Outlined.SignalWifiOff,\n                        title = R.string.downloader_sources_unavailable_title,\n                        description = R.string.downloader_sources_unavailable_description\n                    )\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/settings/DownloadsSettingsScreen.kt",
    "content": "package app.revanced.manager.ui.screen.settings\n\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.foundation.pager.HorizontalPager\nimport androidx.compose.foundation.pager.rememberPagerState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material.icons.filled.Add\nimport androidx.compose.material.icons.filled.Delete\nimport androidx.compose.material.icons.outlined.Apps\nimport androidx.compose.material.icons.outlined.Delete\nimport androidx.compose.material.icons.outlined.Download\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItem\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.MediumFlexibleTopAppBar\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.pulltorefresh.PullToRefreshBox\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.vector.ImageVector\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport app.revanced.manager.R\nimport app.revanced.manager.data.room.apps.downloaded.DownloadedApp\nimport app.revanced.manager.domain.sources.Source\nimport app.revanced.manager.domain.sources.Source.State\nimport app.revanced.manager.network.downloader.DownloaderPackage\nimport app.revanced.manager.ui.component.ConfirmDialog\nimport app.revanced.manager.ui.component.EmptyState\nimport app.revanced.manager.ui.component.LazyColumnWithScrollbar\nimport app.revanced.manager.ui.component.PillTab\nimport app.revanced.manager.ui.component.PillTabBar\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.sources.ImportSourceDialog\nimport app.revanced.manager.ui.component.sources.ImportSourceDialogStrings\nimport app.revanced.manager.ui.component.haptics.HapticCheckbox\nimport app.revanced.manager.ui.component.haptics.HapticExtendedFloatingActionButton\nimport app.revanced.manager.ui.viewmodel.DownloadsViewModel\nimport kotlinx.coroutines.launch\nimport org.koin.androidx.compose.koinViewModel\n\nprivate enum class DownloadsTab(\n    val titleResId: Int,\n    val icon: ImageVector\n) {\n    Downloaders(R.string.downloaders, Icons.Outlined.Download),\n    Apps(R.string.tab_apps, Icons.Outlined.Apps)\n}\n\n@OptIn(\n    ExperimentalMaterial3Api::class,\n    ExperimentalMaterial3ExpressiveApi::class,\n    ExperimentalStdlibApi::class\n)\n@Composable\nfun DownloadsSettingsScreen(\n    onBackClick: () -> Unit,\n    onDownloaderClick: (Int) -> Unit,\n    viewModel: DownloadsViewModel = koinViewModel()\n) {\n    val downloadedApps by viewModel.downloadedApps.collectAsStateWithLifecycle(emptyList())\n    val downloaderSources by viewModel.downloaderSources.collectAsStateWithLifecycle(emptyMap())\n\n    val pagerState = rememberPagerState(pageCount = { DownloadsTab.entries.size })\n    val scope = rememberCoroutineScope()\n    val downloaderListState = rememberLazyListState()\n    val appsListState = rememberLazyListState()\n    val selectedListState = rememberSelectedListState(\n        selectedPage = pagerState.currentPage,\n        downloaderListState = downloaderListState,\n        appsListState = appsListState\n    )\n    val canScroll by remember(selectedListState) {\n        derivedStateOf {\n            selectedListState.canScrollBackward || selectedListState.canScrollForward\n        }\n    }\n    val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(\n        canScroll = { canScroll }\n    )\n    val currentTab = DownloadsTab.entries[pagerState.currentPage]\n    var showImportDialog by rememberSaveable { mutableStateOf(false) }\n    var showDeleteConfirmationDialog by rememberSaveable { mutableStateOf(false) }\n\n    if (showDeleteConfirmationDialog) {\n        ConfirmDialog(\n            onDismiss = { showDeleteConfirmationDialog = false },\n            onConfirm = viewModel::deleteApps,\n            title = stringResource(R.string.downloader_delete_apps_title),\n            description = stringResource(R.string.downloader_delete_apps_description),\n            icon = Icons.Outlined.Delete\n        )\n    }\n\n    if (showImportDialog) {\n        ImportSourceDialog(\n            strings = ImportSourceDialogStrings.DOWNLOADERS,\n            onDismiss = { showImportDialog = false },\n            onLocalSubmit = { uri ->\n                showImportDialog = false\n                viewModel.createLocalSource(uri)\n            },\n            onRemoteSubmit = { url, autoUpdate ->\n                showImportDialog = false\n                viewModel.createRemoteSource(url, autoUpdate)\n            }\n        )\n    }\n\n    Scaffold(\n        topBar = {\n            MediumFlexibleTopAppBar(\n                title = { Text(stringResource(R.string.downloads)) },\n                navigationIcon = {\n                    TooltipIconButton(\n                        onClick = onBackClick,\n                        tooltip = stringResource(R.string.back),\n                    ) { contentDescription ->\n                        Icon(\n                            Icons.AutoMirrored.Filled.ArrowBack,\n                            contentDescription = contentDescription\n                        )\n                    }\n                },\n                scrollBehavior = scrollBehavior,\n                actions = {\n                    if (currentTab == DownloadsTab.Apps && viewModel.appSelection.isNotEmpty()) {\n                        TooltipIconButton(\n                            onClick = { showDeleteConfirmationDialog = true },\n                            tooltip = stringResource(R.string.delete),\n                        ) { contentDescription ->\n                            Icon(Icons.Default.Delete, contentDescription)\n                        }\n                    }\n                }\n            )\n        },\n        floatingActionButton = {\n            if (pagerState.currentPage != DownloadsTab.Downloaders.ordinal) return@Scaffold\n            HapticExtendedFloatingActionButton(\n                onClick = { showImportDialog = true },\n                tooltip = stringResource(R.string.add),\n                icon = { Icon(Icons.Default.Add, contentDescription = null) },\n                text = { Text(stringResource(R.string.add)) }\n            )\n        },\n        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),\n    ) { paddingValues ->\n        Column(\n            modifier = Modifier\n                .padding(paddingValues)\n                .fillMaxSize()\n        ) {\n            PillTabBar(\n                pagerState = pagerState,\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .padding(horizontal = 8.dp, vertical = 8.dp)\n            ) {\n                DownloadsTab.entries.forEachIndexed { index, tab ->\n                    PillTab(\n                        index = index,\n                        onClick = { scope.launch { pagerState.animateScrollToPage(index) } },\n                        text = { Text(stringResource(tab.titleResId)) },\n                        icon = { Icon(tab.icon, null) }\n                    )\n                }\n            }\n\n            PullToRefreshBox(\n                onRefresh = viewModel::refreshDownloaders,\n                isRefreshing = viewModel.isRefreshingDownloaders,\n                modifier = Modifier.fillMaxSize()\n            ) {\n                HorizontalPager(\n                    state = pagerState,\n                    modifier = Modifier.fillMaxSize()\n                ) { page ->\n                    when (DownloadsTab.entries[page]) {\n                        DownloadsTab.Downloaders -> DownloadersTabContent(\n                            sources = downloaderSources,\n                            listState = downloaderListState,\n                            onDownloaderClick = onDownloaderClick,\n                        )\n\n                        DownloadsTab.Apps -> AppsTabContent(\n                            downloadedApps = downloadedApps,\n                            listState = appsListState,\n                            appSelection = viewModel.appSelection,\n                            onToggleApp = viewModel::toggleApp\n                        )\n                    }\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun rememberSelectedListState(\n    selectedPage: Int,\n    downloaderListState: LazyListState,\n    appsListState: LazyListState\n) = remember(selectedPage, downloaderListState, appsListState) {\n    if (selectedPage == DownloadsTab.Downloaders.ordinal) downloaderListState else appsListState\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nprivate fun DownloadersTabContent(\n    sources: Map<Int, Source<DownloaderPackage>>,\n    listState: LazyListState,\n    onDownloaderClick: (Int) -> Unit\n) {\n    Column(modifier = Modifier.fillMaxSize()) {\n        LazyColumnWithScrollbar(\n            modifier = Modifier.weight(1f),\n            state = listState\n        ) {\n            sources.entries\n                .sortedBy { it.key }\n                .forEach { (uid, source) ->\n                    item(key = uid) {\n                        DownloaderItem(\n                            source = source,\n                            onClick = { onDownloaderClick(uid) }\n                        )\n                    }\n                }\n        }\n    }\n}\n\n@Composable\nprivate fun AppsTabContent(\n    downloadedApps: List<DownloadedApp>,\n    listState: LazyListState,\n    appSelection: Set<DownloadedApp>,\n    onToggleApp: (DownloadedApp) -> Unit,\n) {\n    if (downloadedApps.isEmpty()) {\n        EmptyState(\n            icon = Icons.Outlined.Download,\n            title = R.string.downloader_settings_no_apps,\n            description = R.string.downloader_settings_no_apps_description\n        )\n    } else {\n        LazyColumnWithScrollbar(\n            modifier = Modifier.fillMaxSize(),\n            state = listState\n        ) {\n            downloadedApps.forEach { app ->\n                item(key = \"${app.packageName}:${app.version}\") {\n                    val selected = app in appSelection\n                    ListItem(\n                        modifier = Modifier.clickable { onToggleApp(app) },\n                        headlineContent = { Text(app.packageName) },\n                        supportingContent = { Text(app.version) },\n                        leadingContent = (@Composable {\n                            HapticCheckbox(\n                                checked = selected,\n                                onCheckedChange = { onToggleApp(app) }\n                            )\n                        }).takeIf { appSelection.isNotEmpty() }\n                    )\n                }\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun DownloaderItem(\n    source: Source<DownloaderPackage>,\n    onClick: () -> Unit\n) {\n    ListItem(\n        modifier = Modifier.clickable(onClick = onClick),\n        headlineContent = {\n            Text(source.name, style = MaterialTheme.typography.bodyLarge)\n        },\n        supportingContent = {\n            Text(\n                stringResource(\n                    when (source.state) {\n                        is State.Available<*> -> R.string.downloader_state_loaded\n                        is State.Failed -> R.string.downloader_state_failed\n                        is State.Missing -> R.string.downloader_state_missing\n                    }\n                )\n            )\n        },\n        trailingContent = source.loaded?.version?.let { @Composable { Text(it) } }\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/settings/GeneralSettingsScreen.kt",
    "content": "package app.revanced.manager.ui.screen.settings\n\nimport android.os.Build\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.animation.animateColorAsState\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.lazy.items\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight\nimport androidx.compose.material.icons.filled.Search\nimport androidx.compose.material.icons.outlined.Palette\nimport androidx.compose.material.icons.outlined.Public\nimport androidx.compose.material.icons.outlined.Search\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.HorizontalDivider\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItem\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.MediumFlexibleTopAppBar\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.ColumnWithScrollbar\nimport app.revanced.manager.ui.component.FullscreenDialog\nimport app.revanced.manager.ui.component.LazyColumnWithScrollbar\nimport app.revanced.manager.ui.component.ListSection\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.haptics.HapticRadioButton\nimport app.revanced.manager.ui.component.settings.BooleanItem\nimport app.revanced.manager.ui.component.settings.SettingsListItem\nimport app.revanced.manager.ui.component.settings.ThemeSelector\nimport app.revanced.manager.ui.theme.Theme\nimport app.revanced.manager.ui.viewmodel.GeneralSettingsViewModel\nimport app.revanced.manager.util.transparentListItemColors\nimport org.koin.androidx.compose.koinViewModel\nimport java.util.Locale\nimport app.revanced.manager.ui.component.SearchView as SearchViewComponent\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun GeneralSettingsScreen(\n    onBackClick: () -> Unit,\n    viewModel: GeneralSettingsViewModel = koinViewModel()\n) {\n    val prefs = viewModel.prefs\n    val coroutineScope = viewModel.viewModelScope\n    var showLanguagePicker by rememberSaveable { mutableStateOf(false) }\n    val scrollState = androidx.compose.foundation.rememberScrollState()\n    val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(\n        canScroll = {\n            scrollState.canScrollBackward || scrollState.canScrollForward\n        }\n    )\n\n    if (showLanguagePicker) {\n        LanguagePicker(\n            supportedLocales = viewModel.getSupportedLocales(),\n            currentLocale = viewModel.getCurrentLocale(),\n            onDismiss = { showLanguagePicker = false },\n            onSelect = { viewModel.setLocale(it) }\n        )\n    }\n\n    val animatedSurfaceColor = animateColorAsState(\n        targetValue = MaterialTheme.colorScheme.surface,\n        animationSpec = MaterialTheme.motionScheme.defaultEffectsSpec(),\n        label = \"surface\"\n    ).value\n\n    Scaffold(\n        topBar = {\n            MediumFlexibleTopAppBar(\n                title = { Text(stringResource(R.string.general)) },\n                navigationIcon = {\n                    TooltipIconButton(\n                        onClick = onBackClick,\n                        tooltip = stringResource(R.string.back)\n                    ) {\n                        Icon(\n                            Icons.AutoMirrored.Filled.ArrowBack,\n                            contentDescription = stringResource(R.string.back)\n                        )\n                    }\n                },\n                colors = TopAppBarDefaults.topAppBarColors(\n                    containerColor = animatedSurfaceColor,\n                    scrolledContainerColor = animatedSurfaceColor\n                ),\n                scrollBehavior = scrollBehavior\n            )\n        },\n        containerColor = animatedSurfaceColor,\n        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),\n    ) { paddingValues ->\n        ColumnWithScrollbar(\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(paddingValues),\n            state = scrollState\n        ) {\n            ListSection(\n                title = stringResource(R.string.appearance),\n                leadingContent = { Icon(Icons.Outlined.Palette, contentDescription = null, modifier = Modifier.size(18.dp)) }\n            ) {\n                val currentLocale = viewModel.getCurrentLocale()\n                val currentLanguageDisplay = remember(currentLocale) {\n                    currentLocale?.let { viewModel.getLocaleDisplayName(it) }\n                }\n                val theme by prefs.theme.getAsState()\n                \n                ThemeSelector(\n                    currentTheme = theme,\n                    onThemeSelected = { viewModel.setTheme(it) }\n                )\n\n                SettingsListItem(\n                    headlineContent = stringResource(R.string.language),\n                    supportingContent = stringResource(R.string.language_description),\n                    onClick = { showLanguagePicker = true },\n                    trailingContent = {\n                        Row(\n                            verticalAlignment = Alignment.CenterVertically\n                        ) {\n                            Text(\n                                text = currentLanguageDisplay\n                                    ?: stringResource(R.string.language_system_default),\n                                style = MaterialTheme.typography.bodyMedium,\n                                color = MaterialTheme.colorScheme.onSurfaceVariant\n                            )\n                            Spacer(modifier = Modifier.width(4.dp))\n                            Icon(\n                                Icons.AutoMirrored.Filled.KeyboardArrowRight,\n                                contentDescription = null,\n                                tint = MaterialTheme.colorScheme.onSurfaceVariant\n                            )\n                        }\n                    }\n                )\n\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                    BooleanItem(\n                        preference = prefs.dynamicColor,\n                        coroutineScope = coroutineScope,\n                        headline = R.string.dynamic_color,\n                        description = R.string.dynamic_color_description\n                    )\n                }\n                AnimatedVisibility(theme != Theme.LIGHT) {\n                    BooleanItem(\n                        preference = prefs.pureBlackTheme,\n                        coroutineScope = coroutineScope,\n                        headline = R.string.pure_black_theme,\n                        description = R.string.pure_black_theme_description\n                    )\n                }\n            }\n\n            ListSection(\n                title = stringResource(R.string.networking),\n                leadingContent = { Icon(Icons.Outlined.Public, contentDescription = null, modifier = Modifier.size(18.dp)) }\n            ) {\n                BooleanItem(\n                    preference = prefs.allowMeteredNetworks,\n                    coroutineScope = coroutineScope,\n                    headline = R.string.allow_metered_networks,\n                    description = R.string.allow_metered_networks_description\n                )\n            }\n        }\n    }\n}\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nprivate fun LanguagePicker(\n    supportedLocales: List<Locale>,\n    currentLocale: Locale?,\n    onDismiss: () -> Unit,\n    onSelect: (Locale?) -> Unit\n) {\n    val systemDefaultString = stringResource(R.string.language_system_default)\n    var searchQuery by rememberSaveable { mutableStateOf(\"\") }\n    var isSearchActive by rememberSaveable { mutableStateOf(false) }\n    val languageListState = rememberLazyListState()\n    val isLanguageListScrollable by remember {\n        derivedStateOf {\n            languageListState.canScrollBackward || languageListState.canScrollForward\n        }\n    }\n\n    val filteredLocales = remember(searchQuery, supportedLocales, currentLocale) {\n        if (searchQuery.isEmpty()) {\n            supportedLocales\n        } else {\n            supportedLocales.filter { locale ->\n                val currentAppLocale = currentLocale ?: Locale.getDefault()\n                val localizedName = locale.getDisplayName(currentAppLocale)\n                val nativeName = locale.getDisplayName(locale)\n\n                localizedName.contains(searchQuery, ignoreCase = true) ||\n                nativeName.contains(searchQuery, ignoreCase = true)\n            }\n        }\n    }\n\n    val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(\n        canScroll = { isLanguageListScrollable }\n    )\n\n    FullscreenDialog(onDismissRequest = onDismiss) {\n        if (isSearchActive) {\n            SearchViewComponent(\n                query = searchQuery,\n                onQueryChange = { searchQuery = it },\n                onActiveChange = {\n                    isSearchActive = it\n                    if (!it) searchQuery = \"\"\n                },\n                placeholder = { Text(stringResource(R.string.search_languages)) },\n            ) {\n                if (searchQuery.isEmpty()) {\n                    Column(\n                        modifier = Modifier.fillMaxSize(),\n                        verticalArrangement = Arrangement.Center,\n                        horizontalAlignment = Alignment.CenterHorizontally\n                    ) {\n                        Icon(\n                            imageVector = Icons.Outlined.Search,\n                            contentDescription = stringResource(R.string.search_languages),\n                            modifier = Modifier.size(64.dp),\n                            tint = MaterialTheme.colorScheme.onSurfaceVariant\n                        )\n\n                        Text(\n                            text = stringResource(R.string.type_anything),\n                            style = MaterialTheme.typography.bodyLarge,\n                            color = MaterialTheme.colorScheme.onSurfaceVariant\n                        )\n                    }\n                } else {\n                    LazyColumnWithScrollbar(\n                        modifier = Modifier.fillMaxSize(),\n                        contentPadding = PaddingValues(vertical = 8.dp)\n                    ) {\n                        items(filteredLocales) { locale ->\n                            val currentAppLocale = currentLocale ?: Locale.getDefault()\n                            val localizedName = locale.getDisplayName(currentAppLocale)\n                            val nativeName = locale.getDisplayName(locale)\n\n                            ListItem(\n                                modifier = Modifier.clickable {\n                                    onSelect(locale)\n                                    onDismiss()\n                                },\n                                leadingContent = {\n                                    HapticRadioButton(\n                                        selected = currentLocale == locale,\n                                        onClick = {\n                                            onSelect(locale)\n                                            onDismiss()\n                                        }\n                                    )\n                                },\n                                headlineContent = { Text(localizedName) },\n                                supportingContent = if (nativeName != localizedName) {\n                                    { Text(nativeName) }\n                                } else null,\n                                colors = transparentListItemColors\n                            )\n                        }\n                    }\n                }\n            }\n        } else {\n            Scaffold(\n                topBar = {\n                    MediumFlexibleTopAppBar(\n                        title = { Text(stringResource(R.string.language)) },\n                        navigationIcon = {\n                            TooltipIconButton(\n                                onClick = onDismiss,\n                                tooltip = stringResource(R.string.back)\n                            ) {\n                                Icon(\n                                    Icons.AutoMirrored.Filled.ArrowBack,\n                                    contentDescription = stringResource(R.string.back)\n                                )\n                            }\n                        },\n                        actions = {\n                            TooltipIconButton(\n                                onClick = { isSearchActive = true },\n                                tooltip = stringResource(R.string.search_languages)\n                            ) {\n                                Icon(\n                                    Icons.Filled.Search,\n                                    contentDescription = stringResource(R.string.search_languages)\n                                )\n                            }\n                        },\n                        scrollBehavior = scrollBehavior\n                    )\n                },\n                modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)\n            ) { paddingValues ->\n                LazyColumnWithScrollbar(\n                    modifier = Modifier\n                        .fillMaxSize()\n                        .padding(paddingValues),\n                    state = languageListState,\n                    contentPadding = PaddingValues(vertical = 8.dp)\n                ) {\n                    item {\n                        ListItem(\n                            modifier = Modifier.clickable {\n                                onSelect(null)\n                                onDismiss()\n                            },\n                            leadingContent = {\n                                HapticRadioButton(\n                                    selected = currentLocale == null,\n                                    onClick = {\n                                        onSelect(null)\n                                        onDismiss()\n                                    }\n                                )\n                            },\n                            headlineContent = { Text(systemDefaultString) }\n                        )\n                    }\n\n                    item {\n                        HorizontalDivider(\n                            modifier = Modifier.padding(vertical = 8.dp, horizontal = 16.dp)\n                        )\n                    }\n\n                    items(supportedLocales) { locale ->\n                        val currentAppLocale = currentLocale ?: Locale.getDefault()\n                        val localizedName = locale.getDisplayName(currentAppLocale)\n                        val nativeName = locale.getDisplayName(locale)\n\n                        ListItem(\n                            modifier = Modifier.clickable {\n                                onSelect(locale)\n                                onDismiss()\n                            },\n                            leadingContent = {\n                                HapticRadioButton(\n                                    selected = currentLocale == locale,\n                                    onClick = {\n                                        onSelect(locale)\n                                        onDismiss()\n                                    }\n                                )\n                            },\n                            headlineContent = { Text(localizedName) },\n                            supportingContent = if (nativeName != localizedName) {\n                                { Text(nativeName) }\n                            } else null\n                        )\n                    }\n                }\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/settings/ImportExportSettingsScreen.kt",
    "content": "package app.revanced.manager.ui.screen.settings\n\nimport android.content.ClipData\nimport android.content.ClipDescription\nimport android.content.ClipboardManager\nimport android.os.Build\nimport android.os.PersistableBundle\nimport androidx.activity.compose.rememberLauncherForActivityResult\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.compose.animation.animateColorAsState\nimport androidx.compose.foundation.MarqueeSpacing\nimport androidx.compose.foundation.basicMarquee\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.RowScope\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material.icons.outlined.ContentCopy\nimport androidx.compose.material.icons.outlined.FileDownload\nimport androidx.compose.material.icons.outlined.Key\nimport androidx.compose.material.icons.outlined.Restore\nimport androidx.compose.material.icons.outlined.Save\nimport androidx.compose.material.icons.outlined.Source\nimport androidx.compose.material.icons.outlined.Visibility\nimport androidx.compose.material.icons.outlined.VisibilityOff\nimport androidx.compose.material.icons.outlined.WarningAmber\nimport androidx.compose.material3.AlertDialog\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.FilledTonalButton\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.ListItemDefaults\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.MediumFlexibleTopAppBar\nimport androidx.compose.material3.ModalBottomSheet\nimport androidx.compose.material3.OutlinedTextField\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.SegmentedListItem\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TextButton\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.rememberModalBottomSheetState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.runtime.saveable.rememberSaveable\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.clip\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalResources\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.unit.dp\nimport androidx.core.content.getSystemService\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.ColumnWithScrollbar\nimport app.revanced.manager.ui.component.ConfirmDialog\nimport app.revanced.manager.ui.component.ListSection\nimport app.revanced.manager.ui.component.PasswordField\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.bundle.BundleSelector\nimport app.revanced.manager.ui.component.haptics.HapticCheckbox\nimport app.revanced.manager.ui.component.settings.SettingsListItem\nimport app.revanced.manager.ui.viewmodel.ImportExportViewModel\nimport app.revanced.manager.ui.viewmodel.PatchStorageStats\nimport app.revanced.manager.ui.viewmodel.ResetDialogState\nimport app.revanced.manager.util.toast\nimport app.revanced.manager.util.uiSafe\nimport kotlinx.coroutines.launch\nimport org.koin.androidx.compose.koinViewModel\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun ImportExportSettingsScreen(\n    onBackClick: () -> Unit,\n    vm: ImportExportViewModel = koinViewModel()\n) {\n    val context = LocalContext.current\n    val resources = LocalResources.current\n    val prefs = vm.prefs\n    val contentScrollState = rememberScrollState()\n    val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(\n        canScroll = {\n            contentScrollState.canScrollBackward || contentScrollState.canScrollForward\n        }\n    )\n    val clipboard = remember { context.getSystemService<ClipboardManager>()!! }\n    var showResetSheet by rememberSaveable { mutableStateOf(false) }\n    var showKeystorePassword by rememberSaveable { mutableStateOf(false) }\n    val keystoreAlias by prefs.keystoreAlias.getAsState()\n    val keystorePass by prefs.keystorePass.getAsState()\n\n    val importKeystoreLauncher =\n        rememberLauncherForActivityResult(contract = ActivityResultContracts.GetContent()) {\n            it?.let { uri -> vm.startKeystoreImport(uri) }\n        }\n    val exportKeystoreLauncher =\n        rememberLauncherForActivityResult(ActivityResultContracts.CreateDocument(\"*/*\")) {\n            it?.let(vm::exportKeystore)\n        }\n\n    val patchBundles by vm.patchBundles.collectAsStateWithLifecycle(initialValue = emptyList())\n    val patchStorageStats by vm.patchStorageStats.collectAsStateWithLifecycle(\n        initialValue = PatchStorageStats()\n    )\n\n    vm.selectionAction?.let { action ->\n        val launcher = rememberLauncherForActivityResult(action.activityContract) { uri ->\n            if (uri == null) {\n                vm.clearSelectionAction()\n            } else {\n                vm.executeSelectionAction(uri)\n            }\n        }\n\n        if (vm.selectedBundle == null) {\n            BundleSelector(\n                sources = patchBundles,\n                title = action.bundleSelectorTitle\n            ) {\n                if (it == null) {\n                    vm.clearSelectionAction()\n                } else {\n                    vm.selectBundle(it)\n                    launcher.launch(action.activityArg)\n                }\n            }\n        }\n    }\n\n    if (vm.showCredentialsDialog) {\n        KeystoreCredentialsDialog(\n            onDismissRequest = vm::cancelKeystoreImport,\n            onSubmit = { alias, pass ->\n                vm.viewModelScope.launch {\n                    uiSafe(context, R.string.failed_to_import_keystore, \"Failed to import keystore\") {\n                        val result = vm.tryKeystoreImport(alias, pass)\n                        if (!result) context.toast(resources.getString(R.string.import_keystore_wrong_credentials))\n                    }\n                }\n            }\n        )\n    }\n\n    vm.resetDialogState?.let { dialogState ->\n        ConfirmDialog(\n            onDismiss = { vm.resetDialogState = null },\n            onConfirm = dialogState.onConfirm,\n            title = stringResource(dialogState.titleResId),\n            description = dialogState.dialogOptionName?.let {\n                stringResource(dialogState.descriptionResId, it)\n            } ?: stringResource(dialogState.descriptionResId),\n            icon = Icons.Outlined.WarningAmber\n        )\n    }\n\n    Scaffold(\n        topBar = {\n            MediumFlexibleTopAppBar(\n                title = { Text(stringResource(R.string.import_export)) },\n                navigationIcon = {\n                    TooltipIconButton(\n                        onClick = onBackClick,\n                        tooltip = stringResource(R.string.back)\n                    ) {\n                        Icon(\n                            Icons.AutoMirrored.Filled.ArrowBack,\n                            contentDescription = stringResource(R.string.back)\n                        )\n                    }\n                },\n                scrollBehavior = scrollBehavior\n            )\n        },\n        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),\n    ) { paddingValues ->\n        ColumnWithScrollbar(\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(paddingValues),\n            state = contentScrollState\n        ) {\n            ListSection(\n                title = stringResource(R.string.keystore),\n                leadingContent = { Icon(Icons.Outlined.Key, contentDescription = null, modifier = Modifier.size(18.dp)) }\n            ) {\n                Surface(\n                    modifier = Modifier\n                        .fillMaxWidth(),\n                    shape = RoundedCornerShape(4.dp),\n                    color = animateColorAsState(\n                        MaterialTheme.colorScheme.surfaceContainerLow,\n                        MaterialTheme.motionScheme.defaultEffectsSpec(),\n                        \"surfaceContainerLow\"\n                    ).value,\n                ) {\n                    Column(modifier = Modifier.fillMaxWidth().padding(start = 16.dp, top = 16.dp, bottom = 16.dp, end = 8.dp), verticalArrangement = Arrangement.spacedBy(16.dp)) {\n                            ImpoxportDetailColumn(\n                                title = stringResource(R.string.import_keystore_dialog_alias_field),\n                                value = keystoreAlias,\n                                leadingContent = {\n                                    TooltipIconButton(\n                                        onClick = {\n                                            clipboard.setPrimaryClip(\n                                                ClipData.newPlainText(\n                                                    resources.getString(R.string.import_keystore_dialog_alias_field),\n                                                    keystoreAlias\n                                                )\n                                            )\n                                            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) context.toast(resources.getString(R.string.toast_copied_to_clipboard))\n                                        },\n                                        tooltip = stringResource(R.string.copy_to_clipboard)\n                                    ) {\n                                        Icon(\n                                            imageVector = Icons.Outlined.ContentCopy,\n                                            contentDescription = stringResource(R.string.copy_to_clipboard)\n                                        )\n                                    }\n                                }\n                            )\n                            ImpoxportDetailColumn(\n                                title = stringResource(R.string.import_keystore_dialog_password_field),\n                                value = if (showKeystorePassword) keystorePass else \"•\".repeat(keystorePass.length),\n                                leadingContent = {\n                                    val hidePassword = showKeystorePassword\n                                    TooltipIconButton(\n                                        onClick = { showKeystorePassword = !showKeystorePassword },\n                                        tooltip = if (hidePassword) {\n                                            stringResource(R.string.hide_password_field)\n                                        } else {\n                                            stringResource(R.string.show_password_field)\n                                        }\n                                    ) {\n                                        Icon(\n                                            imageVector = if (hidePassword) Icons.Outlined.VisibilityOff else Icons.Outlined.Visibility,\n                                            contentDescription = if (hidePassword) {\n                                                stringResource(R.string.hide_password_field)\n                                            } else {\n                                                stringResource(R.string.show_password_field)\n                                            }\n                                        )\n                                    }\n                                    TooltipIconButton(\n                                        onClick = {\n                                            clipboard.setPrimaryClip(\n                                                ClipData.newPlainText(\n                                                    resources.getString(R.string.import_keystore_dialog_password_field),\n                                                    keystorePass\n                                                ).apply { description.extras = PersistableBundle().apply {\n                                                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                                                        putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)\n                                                    } else {\n                                                        putBoolean(\"android.content.extra.IS_SENSITIVE\", true)\n                                                    }\n                                                } }\n                                            )\n                                            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) context.toast(resources.getString(R.string.toast_copied_to_clipboard))\n                                        },\n                                        tooltip = stringResource(R.string.copy_to_clipboard)\n                                    ) {\n                                        Icon(\n                                            imageVector = Icons.Outlined.ContentCopy,\n                                            contentDescription = stringResource(R.string.copy_to_clipboard)\n                                        )\n                                    }\n                                }\n                            )\n                    }\n                }\n                Surface(\n                    modifier = Modifier.fillMaxWidth(),\n                    shape = RoundedCornerShape(4.dp),\n                    color = animateColorAsState(\n                        MaterialTheme.colorScheme.surfaceContainerLow,\n                        MaterialTheme.motionScheme.defaultEffectsSpec(),\n                        \"surfaceContainerLow\"\n                    ).value,\n                ) {\n                    Row(\n                        modifier = Modifier\n                            .fillMaxWidth()\n                            .padding(16.dp),\n                        horizontalArrangement = Arrangement.spacedBy(12.dp)\n                    ) {\n                        FilledTonalButton(\n                            onClick = { importKeystoreLauncher.launch(\"*/*\") },\n                            modifier = Modifier.weight(1f),\n                            shapes = ButtonDefaults.shapes()\n                        ) {\n                            Icon(\n                                imageVector = Icons.Outlined.FileDownload,\n                                contentDescription = null\n                            )\n                            Spacer(modifier = Modifier.size(8.dp))\n                            Text(stringResource(R.string.import_))\n                        }\n                        FilledTonalButton(\n                            onClick = {\n                                if (!vm.canExport()) {\n                                    context.toast(resources.getString(R.string.export_keystore_unavailable))\n                                    return@FilledTonalButton\n                                }\n                                exportKeystoreLauncher.launch(\"Manager.keystore\")\n                            },\n                            modifier = Modifier.weight(1f),\n                            shapes = ButtonDefaults.shapes()\n                        ) {\n                            Icon(\n                                imageVector = Icons.Outlined.Save,\n                                contentDescription = null\n                            )\n                            Spacer(modifier = Modifier.size(8.dp))\n                            Text(stringResource(R.string.export))\n                        }\n                    }\n                }\n            }\n\n            ListSection(\n                title = stringResource(R.string.patches_selections),\n                leadingContent = { Icon(Icons.Outlined.Source, contentDescription = null, modifier = Modifier.size(18.dp)) }\n            ) {\n                Surface(\n                    modifier = Modifier.fillMaxWidth(),\n                    shape = RoundedCornerShape(4.dp),\n                    color = animateColorAsState(\n                        MaterialTheme.colorScheme.surfaceContainerLow,\n                        MaterialTheme.motionScheme.defaultEffectsSpec(),\n                        \"surfaceContainerLow\"\n                    ).value,\n                ) {\n                    Column(\n                        modifier = Modifier\n                            .fillMaxWidth()\n                            .padding(start = 16.dp, top = 16.dp, bottom = 16.dp, end = 8.dp),\n                        verticalArrangement = Arrangement.spacedBy(16.dp)\n                    ) {\n                        ImpoxportDetailColumn(\n                            title = stringResource(R.string.patch_selection_packages),\n                            value = patchStorageStats.selectionPackageCount.toString()\n                        )\n                        ImpoxportDetailColumn(\n                            title = stringResource(R.string.patch_selection_entries),\n                            value = patchStorageStats.selectedPatchCount.toString()\n                        )\n                    }\n                }\n                Surface(\n                    modifier = Modifier.fillMaxWidth(),\n                    shape = RoundedCornerShape(4.dp),\n                    color = animateColorAsState(\n                        MaterialTheme.colorScheme.surfaceContainerLow,\n                        MaterialTheme.motionScheme.defaultEffectsSpec(),\n                        \"surfaceContainerLow\"\n                    ).value,\n                ) {\n                    Row(\n                        modifier = Modifier\n                            .fillMaxWidth()\n                            .padding(16.dp),\n                        horizontalArrangement = Arrangement.spacedBy(12.dp)\n                    ) {\n                        FilledTonalButton(\n                            onClick = vm::importSelection,\n                            modifier = Modifier.weight(1f),\n                            shapes = ButtonDefaults.shapes()\n                        ) {\n                            Icon(\n                                imageVector = Icons.Outlined.FileDownload,\n                                contentDescription = null\n                            )\n                            Spacer(modifier = Modifier.size(8.dp))\n                            Text(stringResource(R.string.import_))\n                        }\n                        FilledTonalButton(\n                            onClick = vm::exportSelection,\n                            modifier = Modifier.weight(1f),\n                            shapes = ButtonDefaults.shapes()\n                        ) {\n                            Icon(\n                                imageVector = Icons.Outlined.Save,\n                                contentDescription = null\n                            )\n                            Spacer(modifier = Modifier.size(8.dp))\n                            Text(stringResource(R.string.export))\n                        }\n                    }\n                }\n            }\n            ListSection(\n                title = stringResource(R.string.reset),\n                leadingContent = { Icon(Icons.Outlined.Restore, contentDescription = null, modifier = Modifier.size(18.dp)) }\n            ) {\n                SettingsListItem(\n                    onClick = {\n                        vm.resetDialogState = ResetDialogState.Keystore {\n                            vm.regenerateKeystore()\n                        }\n                    },\n                    headlineContent = stringResource(R.string.regenerate_keystore),\n                    supportingContent = stringResource(R.string.regenerate_keystore_description)\n                )\n            Surface(\n                modifier = Modifier\n                    .fillMaxWidth(),\n                shape = RoundedCornerShape(4.dp),\n                color = animateColorAsState(\n                    MaterialTheme.colorScheme.surfaceContainerLow,\n                    MaterialTheme.motionScheme.defaultEffectsSpec(),\n                    \"surfaceContainerLow\"\n                ).value,\n            ) {\n                FilledTonalButton(\n                    onClick = { showResetSheet = true },\n                    modifier = Modifier\n                        .fillMaxWidth()\n                        .padding(16.dp),\n                    shapes = ButtonDefaults.shapes()\n                ) {\n                    Icon(\n                        imageVector = Icons.Outlined.Restore,\n                        contentDescription = null\n                    )\n                    Spacer(modifier = Modifier.size(8.dp))\n                    Text(stringResource(R.string.reset))\n                }\n            }\n            }\n\n            if (showResetSheet) {\n                ResetBottomSheet(\n                    onDismiss = { showResetSheet = false },\n                    onReset = { resetSelections, resetOptions ->\n                        if (resetSelections) vm.resetSelection()\n                        if (resetOptions) vm.resetOptions()\n                    }\n                )\n            }\n        }\n    }\n}\n\n@Composable\nprivate fun ImpoxportDetailColumn(\n    modifier: Modifier = Modifier,\n    title: String,\n    value: String,\n    leadingContent: (@Composable RowScope.() -> Unit)? = null\n) {\n    Row(\n        modifier = modifier,\n        verticalAlignment = Alignment.CenterVertically,\n    ) {\n        Column(\n            modifier = Modifier.weight(1f),\n            verticalArrangement = Arrangement.spacedBy(4.dp)\n        ) {\n            Text(\n                text = title,\n                style = MaterialTheme.typography.labelMedium,\n                color = MaterialTheme.colorScheme.onSurfaceVariant\n            )\n            Text(\n                text = value,\n                modifier = Modifier.basicMarquee(\n                    iterations = Int.MAX_VALUE,\n                    repeatDelayMillis = 1500,\n                    initialDelayMillis = 2500,\n                    spacing = MarqueeSpacing.fractionOfContainer(1f / 5f),\n                    velocity = 55.dp,\n                ),\n                style = MaterialTheme.typography.bodyLarge,\n                color = MaterialTheme.colorScheme.onSurface,\n                maxLines = 1,\n            )\n        }\n\n        leadingContent?.let { content ->\n            Row(\n                verticalAlignment = Alignment.CenterVertically\n            ) {\n                content()\n            }\n        }\n    }\n}\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nprivate fun ResetBottomSheet(\n    onDismiss: () -> Unit,\n    onReset: (resetSelections: Boolean, resetOptions: Boolean) -> Unit\n) {\n    var resetSelections by rememberSaveable { mutableStateOf(true) }\n    var resetOptions by rememberSaveable { mutableStateOf(true) }\n    val sheetState = rememberModalBottomSheetState()\n    val scope = rememberCoroutineScope()\n\n    ModalBottomSheet(\n        onDismissRequest = onDismiss,\n        sheetState = sheetState,\n    ) {\n        Column(\n            modifier = Modifier\n                .fillMaxWidth()\n                .padding(bottom = 16.dp),\n            verticalArrangement = Arrangement.spacedBy(16.dp)\n        ) {\n            Text(\n                text = stringResource(R.string.reset_configuration),\n                style = MaterialTheme.typography.titleLarge,\n                color = MaterialTheme.colorScheme.onSurface,\n                modifier = Modifier.padding(horizontal = 16.dp)\n            )\n\n            Column(\n                modifier = Modifier\n                    .padding(horizontal = 16.dp)\n                    .clip(MaterialTheme.shapes.large),\n                verticalArrangement = Arrangement.spacedBy(ListItemDefaults.SegmentedGap)\n            ) {\n                SegmentedListItem(\n                    onClick = { resetSelections = !resetSelections },\n                    colors = ListItemDefaults.colors(\n                        containerColor = MaterialTheme.colorScheme.surfaceContainer\n                    ),\n                    shapes = ListItemDefaults.segmentedShapes(index = 0, count = 2),\n                    leadingContent = {\n                        HapticCheckbox(\n                            checked = resetSelections,\n                            onCheckedChange = null\n                        )\n                    },\n                ) {\n                    Text(stringResource(R.string.reset_patch_selection))\n                }\n                SegmentedListItem(\n                    onClick = { resetOptions = !resetOptions },\n                    colors = ListItemDefaults.colors(\n                        containerColor = MaterialTheme.colorScheme.surfaceContainer\n                    ),\n                    shapes = ListItemDefaults.segmentedShapes(index = 1, count = 2),\n                    leadingContent = {\n                        HapticCheckbox(\n                            checked = resetOptions,\n                            onCheckedChange = null\n                        )\n                    },\n                ) {\n                    Text(stringResource(R.string.reset_patch_options))\n                }\n            }\n\n            Spacer(Modifier.height(16.dp))\n\n            Button(\n                onClick = {\n                    scope.launch {\n                        sheetState.hide()\n                        onDismiss()\n                    }\n                    onReset(resetSelections, resetOptions)\n                },\n                enabled = resetSelections || resetOptions,\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .padding(horizontal = 16.dp)\n                    .height(56.dp),\n                colors = ButtonDefaults.buttonColors(\n                    containerColor = MaterialTheme.colorScheme.error,\n                    contentColor = MaterialTheme.colorScheme.onError\n                ),\n                shapes = ButtonDefaults.shapes()\n            ) {\n                Text(stringResource(R.string.reset))\n            }\n        }\n    }\n}\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun KeystoreCredentialsDialog(\n    onDismissRequest: () -> Unit,\n    onSubmit: (String, String) -> Unit\n) {\n    var alias by rememberSaveable { mutableStateOf(\"\") }\n    var pass by rememberSaveable { mutableStateOf(\"\") }\n\n    AlertDialog(\n        onDismissRequest = onDismissRequest,\n        confirmButton = {\n            TextButton(\n                onClick = {\n                    onSubmit(alias, pass)\n                },\n                shapes = ButtonDefaults.shapes()\n            ) {\n                Text(stringResource(R.string.import_keystore_dialog_button))\n            }\n        },\n        dismissButton = {\n            TextButton(onClick = onDismissRequest, shapes = ButtonDefaults.shapes()) {\n                Text(stringResource(R.string.cancel))\n            }\n        },\n        icon = {\n            Icon(Icons.Outlined.Key, null)\n        },\n        title = {\n            Text(\n                text = stringResource(R.string.import_keystore_dialog_title),\n                style = MaterialTheme.typography.headlineSmall.copy(textAlign = TextAlign.Center),\n                color = MaterialTheme.colorScheme.onSurface,\n            )\n        },\n        text = {\n            Column(\n                modifier = Modifier.verticalScroll(rememberScrollState()),\n                horizontalAlignment = Alignment.CenterHorizontally,\n                verticalArrangement = Arrangement.spacedBy(16.dp)\n            ) {\n                Text(\n                    text = stringResource(R.string.import_keystore_dialog_description),\n                    style = MaterialTheme.typography.bodyMedium,\n                    color = MaterialTheme.colorScheme.onSurfaceVariant\n                )\n                OutlinedTextField(\n                    value = alias,\n                    onValueChange = { alias = it },\n                    label = { Text(stringResource(R.string.import_keystore_dialog_alias_field)) }\n                )\n                PasswordField(\n                    value = pass,\n                    onValueChange = { pass = it },\n                    label = { Text(stringResource(R.string.import_keystore_dialog_password_field)) }\n                )\n            }\n        }\n    )\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/settings/LicensesSettingsScreen.kt",
    "content": "package app.revanced.manager.ui.screen.settings\n\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.lazy.rememberLazyListState\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.res.stringResource\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.AppScaffold\nimport app.revanced.manager.ui.component.AppTopBar\nimport app.revanced.manager.ui.component.Scrollbar\nimport com.mikepenz.aboutlibraries.ui.compose.LibraryDefaults\nimport com.mikepenz.aboutlibraries.ui.compose.android.produceLibraries\nimport com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer\nimport com.mikepenz.aboutlibraries.ui.compose.m3.chipColors\nimport com.mikepenz.aboutlibraries.ui.compose.m3.libraryColors\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun LicensesSettingsScreen(\n    onBackClick: () -> Unit,\n) {\n    AppScaffold(\n        topBar = { scrollBehavior ->\n            AppTopBar(\n                title = stringResource(R.string.opensource_licenses),\n                scrollBehavior = scrollBehavior,\n                onBackClick = onBackClick\n            )\n        }\n    ) { paddingValues ->\n        Column(modifier = Modifier.padding(paddingValues)) {\n            val lazyListState = rememberLazyListState()\n            val libraries by produceLibraries(R.raw.aboutlibraries)\n            val chipColors = LibraryDefaults.chipColors(\n                containerColor = MaterialTheme.colorScheme.primary,\n                contentColor = MaterialTheme.colorScheme.onPrimary,\n            )\n\n            LibrariesContainer(\n                modifier = Modifier\n                    .fillMaxSize(),\n                libraries = libraries,\n                lazyListState = lazyListState,\n                colors = LibraryDefaults.libraryColors(\n                    libraryBackgroundColor = MaterialTheme.colorScheme.background,\n                    libraryContentColor = MaterialTheme.colorScheme.onBackground,\n                    versionChipColors = chipColors,\n                    licenseChipColors = chipColors,\n                    fundingChipColors = chipColors,\n                )\n            )\n            Scrollbar(lazyListState = lazyListState, modifier = Modifier.padding(paddingValues))\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/settings/update/ChangelogsSettingsScreen.kt",
    "content": "package app.revanced.manager.ui.screen.settings.update\n\n\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.TopAppBar\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.material3.rememberTopAppBarState\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.AppTopBar\nimport app.revanced.manager.ui.component.ColumnWithScrollbar\nimport app.revanced.manager.ui.component.LoadingIndicator\nimport app.revanced.manager.ui.component.settings.Changelog\nimport app.revanced.manager.ui.viewmodel.ChangelogsViewModel\nimport app.revanced.manager.util.relativeTime\nimport org.koin.androidx.compose.koinViewModel\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun ChangelogsSettingsScreen(\n    onBackClick: () -> Unit,\n    vm: ChangelogsViewModel = koinViewModel()\n) {\n    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())\n\n    Scaffold(\n        topBar = {\n            AppTopBar(\n                title = {},\n                scrollBehavior = scrollBehavior,\n                onBackClick = onBackClick\n            )\n        },\n        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),\n    ) { paddingValues ->\n        ColumnWithScrollbar(\n            modifier = Modifier\n                .padding(paddingValues)\n                .fillMaxSize(),\n            horizontalAlignment = Alignment.CenterHorizontally,\n            verticalArrangement = if (vm.releaseInfo == null) Arrangement.Center else Arrangement.Top\n        ) {\n            vm.releaseInfo?.let { info ->\n                Column(modifier = Modifier.padding(16.dp)) {\n                    Changelog(\n                        markdown = info.description.replace(\"`\", \"\"),\n                        version = info.version,\n                        publishDate = info.createdAt.relativeTime(LocalContext.current)\n                    )\n                }\n            } ?: LoadingIndicator()\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/screen/settings/update/UpdatesSettingsScreen.kt",
    "content": "package app.revanced.manager.ui.screen.settings.update\n\nimport androidx.appcompat.content.res.AppCompatResources\nimport androidx.compose.animation.AnimatedVisibility\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.Spacer\nimport androidx.compose.foundation.layout.heightIn\nimport androidx.compose.foundation.layout.fillMaxSize\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.navigationBarsPadding\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.layout.width\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.automirrored.filled.ArrowBack\nimport androidx.compose.material.icons.filled.Update\nimport androidx.compose.material.icons.outlined.Download\nimport androidx.compose.material.icons.outlined.WorkOutline\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.ButtonDefaults\nimport androidx.compose.material3.CircularProgressIndicator\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.ExperimentalMaterial3ExpressiveApi\nimport androidx.compose.material3.FilledTonalButton\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.MediumFlexibleTopAppBar\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Surface\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBarDefaults\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.rememberCoroutineScope\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.input.nestedscroll.nestedScroll\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalResources\nimport androidx.compose.ui.res.stringResource\nimport androidx.compose.ui.unit.dp\nimport androidx.lifecycle.compose.collectAsStateWithLifecycle\nimport app.revanced.manager.R\nimport app.revanced.manager.ui.component.BottomContentBar\nimport app.revanced.manager.ui.component.ColumnWithScrollbar\nimport app.revanced.manager.ui.component.ListSection\nimport app.revanced.manager.ui.component.TooltipIconButton\nimport app.revanced.manager.ui.component.settings.BooleanItem\nimport app.revanced.manager.ui.component.settings.SafeguardBooleanItem\nimport app.revanced.manager.ui.viewmodel.UpdatesSettingsViewModel\nimport app.revanced.manager.util.toast\nimport com.google.accompanist.drawablepainter.rememberDrawablePainter\nimport kotlinx.coroutines.launch\nimport org.koin.androidx.compose.koinViewModel\n\n@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun UpdatesSettingsScreen(\n    onBackClick: () -> Unit,\n    onChangelogClick: () -> Unit,\n    onUpdateClick: () -> Unit,\n    vm: UpdatesSettingsViewModel = koinViewModel(),\n) {\n    val context = LocalContext.current\n    val resources = LocalResources.current\n    val coroutineScope = rememberCoroutineScope()\n    var checkingForUpdate by remember { mutableStateOf(false) }\n    val availableUpdate by vm.availableManagerUpdate.collectAsStateWithLifecycle()\n    val scrollState = androidx.compose.foundation.rememberScrollState()\n    val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(\n        canScroll = {\n            scrollState.canScrollBackward || scrollState.canScrollForward\n        }\n    )\n    val appIcon = rememberDrawablePainter(\n        drawable = remember(context) {\n            AppCompatResources.getDrawable(context, R.drawable.ic_logo_ring)\n        }\n    )\n\n    Scaffold(\n        topBar = {\n            MediumFlexibleTopAppBar(\n                title = { Text(stringResource(R.string.updates)) },\n                navigationIcon = {\n                    TooltipIconButton(\n                        onClick = onBackClick,\n                        tooltip = stringResource(R.string.back)\n                    ) {\n                        Icon(\n                            Icons.AutoMirrored.Filled.ArrowBack,\n                            contentDescription = stringResource(R.string.back)\n                        )\n                    }\n                },\n                scrollBehavior = scrollBehavior\n            )\n        },\n        bottomBar = {\n            BottomContentBar(modifier = Modifier.navigationBarsPadding()) {\n                FilledTonalButton(\n                    modifier = Modifier\n                        .fillMaxWidth()\n                        .height(56.dp),\n                    enabled = !checkingForUpdate,\n                    onClick = {\n                        coroutineScope.launch {\n                            if (availableUpdate != null) {\n                                onUpdateClick()\n                                return@launch\n                            }\n\n                            if (!vm.isConnected) {\n                                context.toast(resources.getString(R.string.no_network_toast))\n                                return@launch\n                            }\n                            checkingForUpdate = true\n                            try {\n                                val version = vm.checkForUpdates()\n                                if (!version.isNullOrEmpty()) onUpdateClick()\n                            } finally {\n                                checkingForUpdate = false\n                            }\n                        }\n                    },\n                    shapes = ButtonDefaults.shapes()\n                ) {\n                    if (checkingForUpdate) {\n                        CircularProgressIndicator(\n                            modifier = Modifier.size(20.dp),\n                            strokeWidth = 2.dp\n                        )\n                    } else {\n                        Icon(\n                            imageVector = Icons.Filled.Update,\n                            contentDescription = stringResource(R.string.refresh)\n                        )\n                    }\n                    Spacer(modifier = Modifier.width(8.dp))\n                    Text(\n                        text = stringResource(\n                            when {\n                                checkingForUpdate -> R.string.update_check\n                                availableUpdate != null -> R.string.view_update\n                                else -> R.string.manual_update_check\n                            }\n                        )\n                    )\n                }\n            }\n        },\n        modifier = Modifier.then(\n            scrollBehavior.let { Modifier.nestedScroll(it.nestedScrollConnection) }\n        ),\n    ) { paddingValues ->\n        ColumnWithScrollbar(\n            modifier = Modifier\n                .fillMaxSize()\n                .padding(paddingValues),\n            state = scrollState\n        ) {\n            ListSection(\n                title = stringResource(R.string.manager),\n                leadingContent = { Icon(Icons.Outlined.WorkOutline, contentDescription = null, modifier = Modifier.size(18.dp)) }\n            ) {\n                Surface(\n                    shape = RoundedCornerShape(4.dp),\n                    color = MaterialTheme.colorScheme.surfaceContainerLow,\n                    modifier = Modifier.fillMaxWidth(),\n                ) {\n                    Column(\n                        modifier = Modifier\n                            .fillMaxWidth()\n                            .padding(16.dp)\n                    ) {\n                        Row(\n                            modifier = Modifier\n                                .fillMaxWidth()\n                                .heightIn(min = 56.dp),\n                            verticalAlignment = Alignment.CenterVertically\n                        ) {\n                            Image(\n                                painter = appIcon,\n                                contentDescription = stringResource(R.string.app_name),\n                                modifier = Modifier\n                                    .size(42.dp)\n                                    .padding(start = 4.dp)\n                            )\n                            Spacer(modifier = Modifier.width(16.dp))\n                            Text(\n                                text = stringResource(R.string.app_name),\n                                style = MaterialTheme.typography.bodyLarge,\n                                color = MaterialTheme.colorScheme.onSurface\n                            )\n                        }\n                        Spacer(modifier = Modifier.height(4.dp))\n                        Button(\n                            onClick = {\n                                if (!vm.isConnected) {\n                                    context.toast(resources.getString(R.string.no_network_toast))\n                                } else {\n                                    onChangelogClick()\n                                }\n                            },\n                            colors = ButtonDefaults.buttonColors(\n                                containerColor = MaterialTheme.colorScheme.surfaceContainerHigh,\n                                contentColor = MaterialTheme.colorScheme.onSurface\n                            ),\n                            modifier = Modifier\n                                .fillMaxWidth(),\n                            shapes = ButtonDefaults.shapes()\n                        ) {\n                            Text(text = stringResource(R.string.changelog))\n                        }\n                    }\n                }\n            }\n\n            Spacer(modifier = Modifier.height(16.dp))\n\n            ListSection {\n                val managerAutoUpdates by vm.managerAutoUpdates.getAsState()\n\n                BooleanItem(\n                    preference = vm.managerAutoUpdates,\n                    headline = R.string.update_checking_manager,\n                    description = R.string.update_checking_manager_description\n                )\n\n                AnimatedVisibility(visible = managerAutoUpdates) {\n                    BooleanItem(\n                        preference = vm.showManagerUpdateDialogOnLaunch,\n                        headline = R.string.show_manager_update_dialog_on_launch,\n                        description = R.string.show_manager_update_dialog_on_launch_description\n                    )\n                }\n\n                SafeguardBooleanItem(\n                    preference = vm.useManagerPrereleases,\n                    headline = R.string.manager_prereleases,\n                    description = R.string.manager_prereleases_description,\n                    dialogTitle = R.string.prerelease_title,\n                    confirmationText = R.string.prereleases_warning,\n                    onValueChange = { value ->\n                        coroutineScope.launch {\n                            vm.useManagerPrereleases.update(value)\n                            vm.clearAvailableManagerUpdate()\n                        }\n                    }\n                )\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/theme/Color.kt",
    "content": "package app.revanced.manager.ui.theme\n\nimport androidx.compose.ui.graphics.Color\n\n// https://materialkolor.com\n// Seed: 005FACFF\n// Spec 2025, Expressive\n\nval RVThemePrimaryLight = Color(0xFF0061A7)\nval RVThemeOnPrimaryLight = Color(0xFFF7F9FF)\nval RVThemePrimaryContainerLight = Color(0xFF59A7FA)\nval RVThemeOnPrimaryContainerLight = Color(0xFF002647)\nval RVThemeInversePrimaryLight = Color(0xFF59A7FA)\nval RVThemeSecondaryLight = Color(0xFF546071)\nval RVThemeOnSecondaryLight = Color(0xFFF7F9FF)\nval RVThemeSecondaryContainerLight = Color(0xFFD7E3F8)\nval RVThemeOnSecondaryContainerLight = Color(0xFF475363)\nval RVThemeTertiaryLight = Color(0xFF615984)\nval RVThemeOnTertiaryLight = Color(0xFFFCF7FF)\nval RVThemeTertiaryContainerLight = Color(0xFFD3C8F9)\nval RVThemeOnTertiaryContainerLight = Color(0xFF484068)\nval RVThemeBackgroundLight = Color(0xFFF9F9FE)\nval RVThemeOnBackgroundLight = Color(0xFF2E333A)\nval RVThemeSurfaceLight = Color(0xFFF9F9FE)\nval RVThemeOnSurfaceLight = Color(0xFF2E333A)\nval RVThemeSurfaceVariantLight = Color(0xFFDFE2EC)\nval RVThemeOnSurfaceVariantLight = Color(0xFF5B5F67)\nval RVThemeSurfaceTintLight = Color(0xFF0061A7)\nval RVThemeInverseSurfaceLight = Color(0xFF0C0E12)\nval RVThemeInverseOnSurfaceLight = Color(0xFF9C9DA1)\nval RVThemeErrorLight = Color(0xFFA83836)\nval RVThemeOnErrorLight = Color(0xFFFFF7F6)\nval RVThemeErrorContainerLight = Color(0xFFFA746F)\nval RVThemeOnErrorContainerLight = Color(0xFF6E0A12)\nval RVThemeOutlineLight = Color(0xFF767B83)\nval RVThemeOutlineVariantLight = Color(0xFFAEB2BB)\nval RVThemeScrimLight = Color(0xFF000000)\nval RVThemeSurfaceBrightLight = Color(0xFFF9F9FE)\nval RVThemeSurfaceContainerLight = Color(0xFFEBEEF5)\nval RVThemeSurfaceContainerHighLight = Color(0xFFE5E8F0)\nval RVThemeSurfaceContainerHighestLight = Color(0xFFDFE2EC)\nval RVThemeSurfaceContainerLowLight = Color(0xFFF2F3FA)\nval RVThemeSurfaceContainerLowestLight = Color(0xFFFFFFFF)\nval RVThemeSurfaceDimLight = Color(0xFFD6DAE3)\n\nval RVThemePrimaryDark = Color(0xFFA0C9FF)\nval RVThemeOnPrimaryDark = Color(0xFF004274)\nval RVThemePrimaryContainerDark = Color(0xFF1777C7)\nval RVThemeOnPrimaryContainerDark = Color(0xFFFFFFFF)\nval RVThemeInversePrimaryDark = Color(0xFF0061A7)\nval RVThemeSecondaryDark = Color(0xFFBBC7DB)\nval RVThemeOnSecondaryDark = Color(0xFF354151)\nval RVThemeSecondaryContainerDark = Color(0xFF303C4C)\nval RVThemeOnSecondaryContainerDark = Color(0xFFB4C0D4)\nval RVThemeTertiaryDark = Color(0xFFE1D8FF)\nval RVThemeOnTertiaryDark = Color(0xFF504972)\nval RVThemeTertiaryContainerDark = Color(0xFFD3C8F9)\nval RVThemeOnTertiaryContainerDark = Color(0xFF484068)\nval RVThemeBackgroundDark = Color(0xFF0C0E12)\nval RVThemeOnBackgroundDark = Color(0xFFE1E5EF)\nval RVThemeSurfaceDark = Color(0xFF0C0E12)\nval RVThemeOnSurfaceDark = Color(0xFFE1E5EF)\nval RVThemeSurfaceVariantDark = Color(0xFF21262D)\nval RVThemeOnSurfaceVariantDark = Color(0xFFA7ABB4)\nval RVThemeSurfaceTintDark = Color(0xFFA0C9FF)\nval RVThemeInverseSurfaceDark = Color(0xFFF9F9FE)\nval RVThemeInverseOnSurfaceDark = Color(0xFF535559)\nval RVThemeErrorDark = Color(0xFFFA746F)\nval RVThemeOnErrorDark = Color(0xFF490006)\nval RVThemeErrorContainerDark = Color(0xFF871F21)\nval RVThemeOnErrorContainerDark = Color(0xFFFF9993)\nval RVThemeOutlineDark = Color(0xFF71767E)\nval RVThemeOutlineVariantDark = Color(0xFF434850)\nval RVThemeScrimDark = Color(0xFF000000)\nval RVThemeSurfaceBrightDark = Color(0xFF282C34)\nval RVThemeSurfaceContainerDark = Color(0xFF161A1F)\nval RVThemeSurfaceContainerHighDark = Color(0xFF1C2026)\nval RVThemeSurfaceContainerHighestDark = Color(0xFF21262D)\nval RVThemeSurfaceContainerLowDark = Color(0xFF101418)\nval RVThemeSurfaceContainerLowestDark = Color(0xFF000000)\nval RVThemeSurfaceDimDark = Color(0xFF0C0E12)\n\nval RVThemePrimaryFixed = Color(0xFF59A7FA)\nval RVThemePrimaryFixedDim = Color(0xFF4A9AEB)\nval RVThemeOnPrimaryFixed = Color(0xFF000001)\nval RVThemeOnPrimaryFixedVariant = Color(0xFF003056)\nval RVThemeSecondaryFixed = Color(0xFFD7E3F8)\nval RVThemeSecondaryFixedDim = Color(0xFFC9D5E9)\nval RVThemeOnSecondaryFixed = Color(0xFF344050)\nval RVThemeOnSecondaryFixedVariant = Color(0xFF505C6D)\nval RVThemeTertiaryFixed = Color(0xFFD3C8F9)\nval RVThemeTertiaryFixedDim = Color(0xFFC5BBEB)\nval RVThemeOnTertiaryFixed = Color(0xFF342D54)\nval RVThemeOnTertiaryFixedVariant = Color(0xFF514972)\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/theme/Theme.kt",
    "content": "package app.revanced.manager.ui.theme\n\nimport android.app.Activity\nimport android.os.Build\nimport androidx.compose.material3.*\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.SideEffect\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.toArgb\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.platform.LocalView\nimport androidx.core.view.WindowCompat\nimport app.revanced.manager.R\n\nprivate val LightColorScheme = lightColorScheme(\n    primary = RVThemePrimaryLight,\n    onPrimary = RVThemeOnPrimaryLight,\n    primaryContainer = RVThemePrimaryContainerLight,\n    onPrimaryContainer = RVThemeOnPrimaryContainerLight,\n    inversePrimary = RVThemeInversePrimaryLight,\n    secondary = RVThemeSecondaryLight,\n    onSecondary = RVThemeOnSecondaryLight,\n    secondaryContainer = RVThemeSecondaryContainerLight,\n    onSecondaryContainer = RVThemeOnSecondaryContainerLight,\n    tertiary = RVThemeTertiaryLight,\n    onTertiary = RVThemeOnTertiaryLight,\n    tertiaryContainer = RVThemeTertiaryContainerLight,\n    onTertiaryContainer = RVThemeOnTertiaryContainerLight,\n    background = RVThemeBackgroundLight,\n    onBackground = RVThemeOnBackgroundLight,\n    surface = RVThemeSurfaceLight,\n    onSurface = RVThemeOnSurfaceLight,\n    surfaceVariant = RVThemeSurfaceVariantLight,\n    onSurfaceVariant = RVThemeOnSurfaceVariantLight,\n    surfaceTint = RVThemeSurfaceTintLight,\n    inverseSurface = RVThemeInverseSurfaceLight,\n    inverseOnSurface = RVThemeInverseOnSurfaceLight,\n    error = RVThemeErrorLight,\n    onError = RVThemeOnErrorLight,\n    errorContainer = RVThemeErrorContainerLight,\n    onErrorContainer = RVThemeOnErrorContainerLight,\n    outline = RVThemeOutlineLight,\n    outlineVariant = RVThemeOutlineVariantLight,\n    scrim = RVThemeScrimLight,\n    surfaceBright = RVThemeSurfaceBrightLight,\n    surfaceContainer = RVThemeSurfaceContainerLight,\n    surfaceContainerHigh = RVThemeSurfaceContainerHighLight,\n    surfaceContainerHighest = RVThemeSurfaceContainerHighestLight,\n    surfaceContainerLow = RVThemeSurfaceContainerLowLight,\n    surfaceContainerLowest = RVThemeSurfaceContainerLowestLight,\n    surfaceDim = RVThemeSurfaceDimLight,\n    primaryFixed = RVThemePrimaryFixed,\n    primaryFixedDim = RVThemePrimaryFixedDim,\n    onPrimaryFixed = RVThemeOnPrimaryFixed,\n    onPrimaryFixedVariant = RVThemeOnPrimaryFixedVariant,\n    secondaryFixed = RVThemeSecondaryFixed,\n    secondaryFixedDim = RVThemeSecondaryFixedDim,\n    onSecondaryFixed = RVThemeOnSecondaryFixed,\n    onSecondaryFixedVariant = RVThemeOnSecondaryFixedVariant,\n    tertiaryFixed = RVThemeTertiaryFixed,\n    tertiaryFixedDim = RVThemeTertiaryFixedDim,\n    onTertiaryFixed = RVThemeOnTertiaryFixed,\n    onTertiaryFixedVariant = RVThemeOnTertiaryFixedVariant,\n)\n\nprivate val DarkColorScheme = darkColorScheme(\n    primary = RVThemePrimaryDark,\n    onPrimary = RVThemeOnPrimaryDark,\n    primaryContainer = RVThemePrimaryContainerDark,\n    onPrimaryContainer = RVThemeOnPrimaryContainerDark,\n    inversePrimary = RVThemeInversePrimaryDark,\n    secondary = RVThemeSecondaryDark,\n    onSecondary = RVThemeOnSecondaryDark,\n    secondaryContainer = RVThemeSecondaryContainerDark,\n    onSecondaryContainer = RVThemeOnSecondaryContainerDark,\n    tertiary = RVThemeTertiaryDark,\n    onTertiary = RVThemeOnTertiaryDark,\n    tertiaryContainer = RVThemeTertiaryContainerDark,\n    onTertiaryContainer = RVThemeOnTertiaryContainerDark,\n    background = RVThemeBackgroundDark,\n    onBackground = RVThemeOnBackgroundDark,\n    surface = RVThemeSurfaceDark,\n    onSurface = RVThemeOnSurfaceDark,\n    surfaceVariant = RVThemeSurfaceVariantDark,\n    onSurfaceVariant = RVThemeOnSurfaceVariantDark,\n    surfaceTint = RVThemeSurfaceTintDark,\n    inverseSurface = RVThemeInverseSurfaceDark,\n    inverseOnSurface = RVThemeInverseOnSurfaceDark,\n    error = RVThemeErrorDark,\n    onError = RVThemeOnErrorDark,\n    errorContainer = RVThemeErrorContainerDark,\n    onErrorContainer = RVThemeOnErrorContainerDark,\n    outline = RVThemeOutlineDark,\n    outlineVariant = RVThemeOutlineVariantDark,\n    scrim = RVThemeScrimDark,\n    surfaceBright = RVThemeSurfaceBrightDark,\n    surfaceContainer = RVThemeSurfaceContainerDark,\n    surfaceContainerHigh = RVThemeSurfaceContainerHighDark,\n    surfaceContainerHighest = RVThemeSurfaceContainerHighestDark,\n    surfaceContainerLow = RVThemeSurfaceContainerLowDark,\n    surfaceContainerLowest = RVThemeSurfaceContainerLowestDark,\n    surfaceDim = RVThemeSurfaceDimDark,\n    primaryFixed = RVThemePrimaryFixed,\n    primaryFixedDim = RVThemePrimaryFixedDim,\n    onPrimaryFixed = RVThemeOnPrimaryFixed,\n    onPrimaryFixedVariant = RVThemeOnPrimaryFixedVariant,\n    secondaryFixed = RVThemeSecondaryFixed,\n    secondaryFixedDim = RVThemeSecondaryFixedDim,\n    onSecondaryFixed = RVThemeOnSecondaryFixed,\n    onSecondaryFixedVariant = RVThemeOnSecondaryFixedVariant,\n    tertiaryFixed = RVThemeTertiaryFixed,\n    tertiaryFixedDim = RVThemeTertiaryFixedDim,\n    onTertiaryFixed = RVThemeOnTertiaryFixed,\n    onTertiaryFixedVariant = RVThemeOnTertiaryFixedVariant,\n)\n\n@OptIn(ExperimentalMaterial3ExpressiveApi::class)\n@Composable\nfun ReVancedManagerTheme(\n    darkTheme: Boolean,\n    dynamicColor: Boolean,\n    pureBlackTheme: Boolean,\n    content: @Composable () -> Unit\n) {\n    val colorScheme = when {\n        dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {\n            val context = LocalContext.current\n            if (darkTheme)\n                dynamicDarkColorScheme(context)\n            else\n                dynamicLightColorScheme(context)\n        }\n\n        darkTheme -> DarkColorScheme\n        else -> LightColorScheme\n    }.let {\n        if (darkTheme && pureBlackTheme)\n            it.copy(background = Color.Black, surface = Color.Black)\n        else it\n    }\n\n    val view = LocalView.current\n    if (!view.isInEditMode) {\n        SideEffect {\n            val activity = view.context as Activity\n\n            WindowCompat.setDecorFitsSystemWindows(activity.window, false)\n\n            activity.window.statusBarColor = Color.Transparent.toArgb()\n            activity.window.navigationBarColor = Color.Transparent.toArgb()\n\n            WindowCompat.getInsetsController(activity.window, view).isAppearanceLightStatusBars = !darkTheme\n            WindowCompat.getInsetsController(activity.window, view).isAppearanceLightNavigationBars = !darkTheme\n        }\n    }\n\n    MaterialExpressiveTheme(\n        colorScheme = colorScheme,\n        typography = Typography,\n        content = content,\n        motionScheme = MotionScheme.expressive()\n    )\n}\n\nenum class Theme(val displayName: Int) {\n    SYSTEM(R.string.system),\n    LIGHT(R.string.light),\n    DARK(R.string.dark);\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/theme/Type.kt",
    "content": "package app.revanced.manager.ui.theme\n\nimport androidx.compose.material3.Typography\nimport androidx.compose.ui.text.TextStyle\nimport androidx.compose.ui.text.font.FontFamily\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.unit.sp\n\nval Typography = Typography(\n    bodyLarge = TextStyle(\n        fontFamily = FontFamily.Default,\n        fontWeight = FontWeight.Normal,\n        fontSize = 16.sp,\n        lineHeight = 24.sp,\n        letterSpacing = 0.5.sp\n    )\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/AboutViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.outlined.Language\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.data.platform.NetworkInfo\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.network.api.ReVancedAPI\nimport app.revanced.manager.network.dto.ReVancedDonationLink\nimport app.revanced.manager.network.dto.ReVancedSocial\nimport app.revanced.manager.network.utils.getOrNull\nimport compose.icons.FontAwesomeIcons\nimport compose.icons.fontawesomeicons.Brands\nimport compose.icons.fontawesomeicons.brands.Discord\nimport compose.icons.fontawesomeicons.brands.Github\nimport compose.icons.fontawesomeicons.brands.Reddit\nimport compose.icons.fontawesomeicons.brands.Telegram\nimport compose.icons.fontawesomeicons.brands.XTwitter\nimport compose.icons.fontawesomeicons.brands.Youtube\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\n\nclass AboutViewModel(\n    private val reVancedAPI: ReVancedAPI,\n    private val network: NetworkInfo,\n    prefs: PreferencesManager,\n) : ViewModel() {\n    var socials by mutableStateOf(emptyList<ReVancedSocial>())\n        private set\n    var contact by mutableStateOf<String?>(null)\n        private set\n    var donate by mutableStateOf<String?>(null)\n        private set\n    val isConnected: Boolean\n        get() = network.isConnected()\n\n    val showDeveloperSettings = prefs.showDeveloperSettings\n\n    init {\n        viewModelScope.launch {\n            if (!isConnected) {\n                return@launch\n            }\n            withContext(Dispatchers.IO) {\n                reVancedAPI.getInfo().getOrNull()\n            }?.let {\n                socials = it.socials\n                contact = it.contact.email\n                donate = it.donations.links.find(ReVancedDonationLink::preferred)?.url\n            }\n        }\n    }\n\n    companion object {\n        const val DEVELOPER_OPTIONS_TAPS = 5\n\n        private val socialIcons = mapOf(\n            \"Discord\" to FontAwesomeIcons.Brands.Discord,\n            \"GitHub\" to FontAwesomeIcons.Brands.Github,\n            \"Reddit\" to FontAwesomeIcons.Brands.Reddit,\n            \"Telegram\" to FontAwesomeIcons.Brands.Telegram,\n            \"Twitter\" to FontAwesomeIcons.Brands.XTwitter,\n            \"X\" to FontAwesomeIcons.Brands.XTwitter,\n            \"YouTube\" to FontAwesomeIcons.Brands.Youtube,\n        )\n\n        fun getSocialIcon(name: String) = socialIcons[name] ?: Icons.Outlined.Language\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/AdvancedSettingsViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.app.Application\nimport android.net.Uri\nimport android.util.Log\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.R\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.repository.DownloaderRepository\nimport app.revanced.manager.domain.repository.PatchBundleRepository\nimport app.revanced.manager.util.tag\nimport app.revanced.manager.util.toast\nimport com.github.pgreze.process.Redirect\nimport com.github.pgreze.process.process\nimport kotlinx.coroutines.CancellationException\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.collect\nimport kotlinx.coroutines.flow.flowOn\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\nimport java.time.LocalDateTime\nimport java.time.format.DateTimeFormatter\n\nclass AdvancedSettingsViewModel(\n    val prefs: PreferencesManager,\n    private val app: Application,\n    private val patchBundleRepository: PatchBundleRepository,\n    private val downloaderRepository: DownloaderRepository\n) : ViewModel() {\n    val debugLogFileName: String\n        get() {\n            val time = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(LocalDateTime.now())\n\n            return \"revanced-manager_logcat_$time\"\n        }\n\n    fun exportDebugLogs(target: Uri) = viewModelScope.launch {\n        val exitCode = try {\n            withContext(Dispatchers.IO) {\n                app.contentResolver.openOutputStream(target)!!.bufferedWriter().use { writer ->\n                    val consumer = Redirect.Consume { flow ->\n                        flow.onEach {\n                            writer.write(\"${it}\\n\")\n                        }.flowOn(Dispatchers.IO).collect()\n                    }\n\n                    process(\"logcat\", \"-d\", stdout = consumer).resultCode\n                }\n            }\n        } catch (e: CancellationException) {\n            throw e\n        } catch (e: Exception) {\n            Log.e(tag, \"Got exception while exporting logs\", e)\n            app.toast(app.getString(R.string.debug_logs_export_failed))\n            return@launch\n        }\n\n        if (exitCode == 0)\n            app.toast(app.getString(R.string.debug_logs_export_success))\n        else\n            app.toast(app.getString(R.string.debug_logs_export_read_failed, exitCode))\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/AnnouncementsViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.data.platform.NetworkInfo\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.repository.AnnouncementRepository\nimport app.revanced.manager.network.dto.ReVancedAnnouncement\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\nimport kotlinx.datetime.TimeZone\nimport kotlinx.datetime.toInstant\nimport kotlin.time.Clock\n\ndata class AnnouncementSections(\n    val activeAnnouncements: List<ReVancedAnnouncement>,\n    val archivedAnnouncements: List<ReVancedAnnouncement>\n) {\n    val isEmpty: Boolean\n        get() = activeAnnouncements.isEmpty() && archivedAnnouncements.isEmpty()\n}\n\nclass AnnouncementsViewModel(\n    private val announcementRepository: AnnouncementRepository,\n    private val network: NetworkInfo,\n    private val preferences: PreferencesManager\n) : ViewModel() {\n    private val allAnnouncements = MutableStateFlow<List<ReVancedAnnouncement>?>(null)\n\n    val tags = allAnnouncements.map { it?.tags }\n    val selectedTags = preferences.selectedAnnouncementTags\n    val readAnnouncements = preferences.readAnnouncements\n\n    val announcements = combine(\n        allAnnouncements,\n        selectedTags.flow\n    ) { source, selectedTags ->\n        if (source == null) return@combine null\n        // Only filter by tags that actually exist\n        val availableTags = source.tags\n        val validSelected = selectedTags.intersect(availableTags)\n\n        if (validSelected.isEmpty()) {\n            source\n        } else {\n            source.filter { announcement ->\n                announcement.tags.any(validSelected::contains)\n            }\n        }\n    }\n\n    val announcementSections = announcements.map { announcementList ->\n        announcementList?.let { announcements ->\n            val now = Clock.System.now()\n            val (activeAnnouncements, archivedAnnouncements) = announcements.partition { announcement ->\n                announcement.archivedAt ?: return@partition true\n                announcement.archivedAt > now\n            }\n            AnnouncementSections(\n                activeAnnouncements = activeAnnouncements,\n                archivedAnnouncements = archivedAnnouncements\n            )\n        }\n    }\n\n    init {\n        loadData()\n    }\n\n    fun markAnnouncementRead(id: Long) {\n        viewModelScope.launch {\n            preferences.edit {\n                preferences.readAnnouncements += id\n            }\n        }\n    }\n\n    fun changeTagSelection(tag: String) = viewModelScope.launch {\n        preferences.edit {\n            if (tag in selectedTags.value) selectedTags -= tag\n            else selectedTags += tag\n        }\n    }\n\n    fun resetTagSelection() = viewModelScope.launch {\n        selectedTags.update(preferences.selectedAnnouncementTags.default)\n    }\n\n    private fun loadData() {\n        viewModelScope.launch {\n            if (!network.isConnected()) {\n                allAnnouncements.value = emptyList()\n                return@launch\n            }\n\n            withContext(Dispatchers.IO) {\n                announcementRepository.getAnnouncements()?.let {\n                    allAnnouncements.value = it\n                }\n            }\n        }\n    }\n\n    private companion object {\n        val List<ReVancedAnnouncement>.tags: Set<String>\n            get() = flatMapTo(\n                mutableSetOf()\n            ) { it.tags }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/AppSelectorViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.app.Application\nimport android.content.pm.PackageInfo\nimport android.net.Uri\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.lifecycle.SavedStateHandle\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi\nimport androidx.lifecycle.viewmodel.compose.saveable\nimport app.revanced.manager.R\nimport app.revanced.manager.data.platform.Filesystem\nimport app.revanced.manager.domain.repository.PatchBundleRepository\nimport app.revanced.manager.ui.model.SelectedApp\nimport app.revanced.manager.util.PM\nimport app.revanced.manager.util.toast\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.MutableStateFlow\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.StateFlow\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.flow.stateIn\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\nimport java.io.File\nimport java.nio.file.Files\n\n@OptIn(SavedStateHandleSaveableApi::class)\nclass AppSelectorViewModel(\n    private val app: Application,\n    private val pm: PM,\n    fs: Filesystem,\n    private val patchBundleRepository: PatchBundleRepository,\n    savedStateHandle: SavedStateHandle,\n) : ViewModel() {\n    private val inputFile = savedStateHandle.saveable(key = \"inputFile\") {\n        File(\n            fs.uiTempDir,\n            \"input.apk\"\n        ).also(File::delete)\n    }\n\n    val filterTextFlow = MutableStateFlow(\"\")\n    val filterText: StateFlow<String> = filterTextFlow\n\n    val apps = pm.appList.stateIn(\n        scope = viewModelScope,\n        started = SharingStarted.WhileSubscribed(),\n        initialValue = null,\n    )\n\n    val filteredApps = filterText\n        .combine(apps) { filter, apps ->\n            if (apps == null || filter.isBlank()) {\n                apps\n            } else {\n                apps.filter { app ->\n                    app.packageName.contains(filter, true) ||\n                            loadLabel(app.packageInfo).contains(filter)\n                }\n            }\n        }.stateIn(\n            scope = viewModelScope,\n            started = SharingStarted.WhileSubscribed(\n                stopTimeoutMillis = 0,\n                replayExpirationMillis = 10_000,\n            ),\n            initialValue = null,\n        )\n\n    private val storageSelectionChannel = Channel<SelectedApp.Local>()\n    val storageSelectionFlow = storageSelectionChannel.receiveAsFlow()\n\n    val suggestedAppVersions = patchBundleRepository.suggestedVersions.stateIn(\n        scope = viewModelScope,\n        started = SharingStarted.WhileSubscribed(),\n        initialValue = emptyMap(),\n    )\n\n    var nonSuggestedVersionDialogSubject by mutableStateOf<SelectedApp.Local?>(null)\n        private set\n\n    fun setFilterText(filter: String) {\n        filterTextFlow.value = filter\n    }\n\n    fun loadLabel(app: PackageInfo?) = with(pm) { app?.label() ?: \"Not installed\" }\n\n    fun dismissNonSuggestedVersionDialog() {\n        nonSuggestedVersionDialogSubject = null\n    }\n\n    fun handleStorageResult(uri: Uri) = viewModelScope.launch {\n        val selectedApp = withContext(Dispatchers.IO) {\n            loadSelectedFile(uri)\n        }\n\n        if (selectedApp == null) {\n            app.toast(app.getString(R.string.failed_to_load_apk))\n            return@launch\n        }\n\n        if (patchBundleRepository.isVersionAllowed(selectedApp.packageName, selectedApp.version)) {\n            storageSelectionChannel.send(selectedApp)\n        } else {\n            nonSuggestedVersionDialogSubject = selectedApp\n        }\n    }\n\n    private fun loadSelectedFile(uri: Uri) =\n        app.contentResolver.openInputStream(uri)?.use { stream ->\n            with(inputFile) {\n                delete()\n                Files.copy(stream, toPath())\n\n                pm.getPackageInfo(this)?.let { packageInfo ->\n                    SelectedApp.Local(\n                        packageName = packageInfo.packageName,\n                        version = packageInfo.versionName!!,\n                        file = this,\n                        temporary = true\n                    )\n                }\n            }\n        }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/AppliedPatchesViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.data.room.apps.installed.InstalledPatchBundle\nimport app.revanced.manager.domain.repository.InstalledAppRepository\nimport app.revanced.manager.util.PatchSelection\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\nimport org.koin.core.component.KoinComponent\nimport org.koin.core.component.inject\n\nclass AppliedPatchesViewModel(\n    packageName: String\n) : ViewModel(), KoinComponent {\n    private val installedAppRepository: InstalledAppRepository by inject()\n\n    var appliedPatches: PatchSelection? by mutableStateOf(null)\n        private set\n    var patchBundles: List<InstalledPatchBundle> by mutableStateOf(emptyList())\n        private set\n\n    init {\n        viewModelScope.launch {\n            appliedPatches = withContext(Dispatchers.IO) {\n                installedAppRepository.getAppliedPatches(packageName)\n            }\n            patchBundles = withContext(Dispatchers.IO) {\n                installedAppRepository.getInstalledPatchBundles(packageName)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/BundleInformationViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.data.platform.NetworkInfo\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.repository.PatchBundleRepository\nimport app.revanced.manager.domain.sources.Extensions.asRemoteOrNull\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.launch\nimport org.koin.core.component.KoinComponent\nimport org.koin.core.component.get\n\nclass BundleInformationViewModel(uid: Int) : ViewModel(), KoinComponent {\n    private val patchBundleRepository: PatchBundleRepository = get()\n    val networkInfo: NetworkInfo = get()\n    val prefs: PreferencesManager = get()\n\n    var bundle = patchBundleRepository.sources.map { sources -> sources.find { it.uid == uid } }\n    var patchCount = patchBundleRepository.patchCountsFlow.map { it[uid] ?: 0 }\n\n    fun delete() = viewModelScope.launch {\n        bundle.first()?.let { patchBundleRepository.remove(it) }\n    }\n\n    fun refresh() = viewModelScope.launch {\n        bundle.first()?.asRemoteOrNull?.let {\n            patchBundleRepository.update(it, showToast = true, force = true)\n        }\n    }\n\n    fun setAutoUpdate(value: Boolean) = viewModelScope.launch {\n        bundle.first()?.asRemoteOrNull?.let {\n            patchBundleRepository.run { it.setAutoUpdate(value) }\n        }\n    }\n\n    fun updateUsePrereleases(value: Boolean) = viewModelScope.launch {\n        prefs.usePatchesPrereleases.update(value)\n        refresh()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/BundleListViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.domain.sources.PatchBundleSource\nimport app.revanced.manager.domain.sources.RemotePatchBundle\nimport app.revanced.manager.domain.repository.PatchBundleRepository\nimport app.revanced.manager.util.mutableStateSetOf\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.launch\nimport org.koin.core.component.KoinComponent\nimport org.koin.core.component.get\n\nclass BundleListViewModel : ViewModel(), KoinComponent {\n    private val patchBundleRepository: PatchBundleRepository = get()\n    val patchCounts = patchBundleRepository.patchCountsFlow\n    var isRefreshing by mutableStateOf(false)\n        private set\n\n    val sources = combine(\n        patchBundleRepository.sources,\n        patchBundleRepository.patchCountsFlow\n    ) { sources, patchCounts ->\n        isRefreshing = false\n        sources.sortedByDescending { patchCounts[it.uid] ?: 0 }\n    }\n\n    val selectedSources = mutableStateSetOf<Int>()\n\n    fun refresh() = viewModelScope.launch {\n        isRefreshing = true\n        patchBundleRepository.reload()\n    }\n\n    private suspend fun getSelectedSources() = patchBundleRepository.sources\n        .first()\n        .filter { it.uid in selectedSources }\n        .also {\n            selectedSources.clear()\n        }\n\n    fun handleEvent(event: Event) {\n        when (event) {\n            Event.CANCEL -> selectedSources.clear()\n            Event.DELETE_SELECTED -> viewModelScope.launch {\n                patchBundleRepository.remove(*getSelectedSources().toTypedArray())\n            }\n\n            Event.UPDATE_SELECTED -> viewModelScope.launch {\n                patchBundleRepository.update(\n                    *getSelectedSources().filterIsInstance<RemotePatchBundle>().toTypedArray(),\n                    showToast = true,\n                    force = true\n                )\n            }\n        }\n    }\n\n    fun delete(src: PatchBundleSource) =\n        viewModelScope.launch { patchBundleRepository.remove(src) }\n\n    fun update(src: PatchBundleSource) = viewModelScope.launch {\n        if (src !is RemotePatchBundle) return@launch\n\n        patchBundleRepository.update(src, showToast = true, force = true)\n    }\n\n    enum class Event {\n        DELETE_SELECTED,\n        UPDATE_SELECTED,\n        CANCEL,\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/ChangelogsViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.app.Application\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.R\nimport app.revanced.manager.network.api.ReVancedAPI\nimport app.revanced.manager.network.dto.ReVancedAsset\nimport app.revanced.manager.network.utils.getOrThrow\nimport app.revanced.manager.util.uiSafe\nimport kotlinx.coroutines.launch\n\nclass ChangelogsViewModel(\n    private val api: ReVancedAPI,\n    private val app: Application,\n) : ViewModel() {\n    var releaseInfo: ReVancedAsset? by mutableStateOf(null)\n        private set\n\n    init {\n        viewModelScope.launch {\n            uiSafe(app, R.string.changelog_download_fail, \"Failed to download changelog\") {\n                releaseInfo = api.getLatestAppInfo().getOrThrow()\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/ContributorViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateListOf\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.network.api.ReVancedAPI\nimport app.revanced.manager.network.dto.ReVancedGitRepository\nimport app.revanced.manager.network.utils.getOrNull\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\n\nclass ContributorViewModel(private val reVancedAPI: ReVancedAPI) : ViewModel() {\n    var repositories: List<ReVancedGitRepository>? by mutableStateOf(null)\n    \tprivate set\n\n    init {\n        viewModelScope.launch {\n            repositories = withContext(Dispatchers.IO) {\n                reVancedAPI.getContributors().getOrNull()\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/DashboardViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.annotation.SuppressLint\nimport android.app.Application\nimport android.content.ContentResolver\nimport android.net.Uri\nimport android.os.Build\nimport android.os.PowerManager\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.core.content.getSystemService\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.R\nimport app.revanced.manager.data.platform.NetworkInfo\nimport app.revanced.manager.domain.sources.Extensions.asRemoteOrNull\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.repository.AnnouncementRepository\nimport app.revanced.manager.domain.repository.DownloaderRepository\nimport app.revanced.manager.domain.repository.ManagerUpdateRepository\nimport app.revanced.manager.domain.repository.PatchBundleRepository\nimport app.revanced.manager.network.dto.ReVancedAnnouncement\nimport app.revanced.manager.network.dto.ReVancedAsset\nimport app.revanced.manager.util.PM\nimport app.revanced.manager.util.uiSafe\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\n\nclass DashboardViewModel(\n    private val app: Application,\n    private val patchBundleRepository: PatchBundleRepository,\n    private val downloaderRepository: DownloaderRepository,\n    private val announcementRepository: AnnouncementRepository,\n    private val managerUpdateRepository: ManagerUpdateRepository,\n    private val networkInfo: NetworkInfo,\n    val prefs: PreferencesManager,\n    private val pm: PM,\n) : ViewModel() {\n    val availablePatches =\n        patchBundleRepository.bundleInfoFlow.map { it.values.sumOf { bundle -> bundle.patches.size } }\n    val bundleDownloadError = patchBundleRepository.apiOutageError\n    private val contentResolver: ContentResolver = app.contentResolver\n    private val powerManager = app.getSystemService<PowerManager>()!!\n\n    val availableManagerUpdate = managerUpdateRepository.availableVersion\n\n    val sourcesNotDownloaded = patchBundleRepository.bundleInfoFlow.map { it.isEmpty() }\n\n    fun downloadSources() = viewModelScope.launch(Dispatchers.Default) {\n        patchBundleRepository.updateCheck()\n        downloaderRepository.updateCheck()\n    }\n\n    /**\n     * Android 11 kills the app process after granting the \"install apps\" permission, which is a problem for the patcher screen.\n     * This value is true when the conditions that trigger the bug are met.\n     *\n     * See: https://github.com/ReVanced/revanced-manager/issues/2138\n     */\n    val android11BugActive get() = Build.VERSION.SDK_INT == Build.VERSION_CODES.R && !pm.canInstallPackages()\n\n    var unreadAnnouncement by mutableStateOf<ReVancedAnnouncement?>(null)\n        private set\n\n    private val bundleListEventsChannel = Channel<BundleListViewModel.Event>()\n    val bundleListEventsFlow = bundleListEventsChannel.receiveAsFlow()\n\n    init {\n        viewModelScope.launch {\n            checkForManagerUpdates()\n            checkForAnnouncements()\n        }\n    }\n\n    private suspend fun checkForManagerUpdates() {\n        if (!prefs.managerAutoUpdates.get() || !networkInfo.isConnected()) return\n\n        uiSafe(app, R.string.failed_to_check_updates, \"Failed to check for updates\") {\n            managerUpdateRepository.refreshAvailableVersion()\n        }\n    }\n\n    private suspend fun checkForAnnouncements() {\n        uiSafe(app, R.string.failed_to_check_updates, \"Failed to check for announcements\") {\n            val announcements = withContext(Dispatchers.IO) {\n                announcementRepository.getAnnouncements()\n            } ?: throw IllegalStateException(\"Announcements could not be retrieved\")\n\n            val readAnnouncements = prefs.readAnnouncements.get()\n\n            unreadAnnouncement = announcements.firstOrNull { announcement ->\n                val hasRelevantTag = announcement.tags.any {\n                    it == \"✨ ReVanced\" || it == \"💊 Manager\"\n                }\n                val isUnread = announcement.id !in readAnnouncements\n\n                !announcement.isArchived && hasRelevantTag && isUnread\n            }\n        }\n    }\n\n    fun markUnreadAnnouncementRead() {\n        viewModelScope.launch {\n            unreadAnnouncement?.let {\n                prefs.edit {\n                    prefs.readAnnouncements += it.id\n                }\n            }\n            unreadAnnouncement = null\n        }\n    }\n\n\n    fun setShowManagerUpdateDialogOnLaunch(value: Boolean) {\n        viewModelScope.launch {\n            prefs.showManagerUpdateDialogOnLaunch.update(value)\n        }\n    }\n\n    private fun sendEvent(event: BundleListViewModel.Event) {\n        viewModelScope.launch { bundleListEventsChannel.send(event) }\n    }\n\n    fun cancelSourceSelection() = sendEvent(BundleListViewModel.Event.CANCEL)\n    fun updateSources() = sendEvent(BundleListViewModel.Event.UPDATE_SELECTED)\n    fun deleteSources() = sendEvent(BundleListViewModel.Event.DELETE_SELECTED)\n\n    fun deleteSource(uid: Int) = viewModelScope.launch {\n        val source = patchBundleRepository.sources.first().firstOrNull { it.uid == uid } ?: return@launch\n        patchBundleRepository.remove(source)\n    }\n\n    @SuppressLint(\"Recycle\")\n    fun createLocalSource(patchBundle: Uri) = viewModelScope.launch {\n        patchBundleRepository.createLocal { contentResolver.openInputStream(patchBundle)!! }\n    }\n\n    fun createRemoteSource(apiUrl: String, autoUpdate: Boolean) = viewModelScope.launch {\n        patchBundleRepository.createRemote(apiUrl, autoUpdate)\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/DeveloperOptionsViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.app.Application\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.R\nimport app.revanced.manager.domain.sources.RemotePatchBundle\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.repository.DownloaderRepository\nimport app.revanced.manager.domain.repository.PatchBundleRepository\nimport app.revanced.manager.util.toast\nimport app.revanced.manager.util.uiSafe\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\n\nclass DeveloperOptionsViewModel(\n    val prefs: PreferencesManager,\n    private val app: Application,\n    private val patchBundleRepository: PatchBundleRepository,\n    private val downloaderRepository: DownloaderRepository\n) : ViewModel() {\n    fun redownloadBundles() = viewModelScope.launch {\n        uiSafe(app, R.string.patches_download_fail, RemotePatchBundle.updateFailMsg) {\n            patchBundleRepository.redownloadRemote()\n        }\n    }\n\n    fun setApiUrl(value: String) = viewModelScope.launch(Dispatchers.Default) {\n        if (value == prefs.api.get()) return@launch\n\n        prefs.api.update(value)\n\n        arrayOf(patchBundleRepository, downloaderRepository).forEach {\n            it.reloadApiSources()\n            it.updateCheck()\n        }\n    }\n\n    fun resetBundles() = viewModelScope.launch {\n        patchBundleRepository.reset()\n    }\n\n    fun resetOnboarding() = viewModelScope.launch {\n        prefs.completedOnboarding.update(false)\n        app.toast(app.getString(R.string.sideeffect_restart))\n    }\n\n    fun resetAnnouncement() = viewModelScope.launch {\n        prefs.readAnnouncements.update(emptySet())\n        app.toast(app.getString(R.string.sideeffect_restart))\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/DownloadsViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.annotation.SuppressLint\nimport android.app.Application\nimport android.net.Uri\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.data.platform.NetworkInfo\nimport app.revanced.manager.data.room.apps.downloaded.DownloadedApp\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.repository.DownloadedAppRepository\nimport app.revanced.manager.domain.repository.DownloaderRepository\nimport app.revanced.manager.domain.sources.Extensions.asRemoteOrNull\nimport app.revanced.manager.domain.sources.RemoteSource\nimport app.revanced.manager.domain.sources.Source\nimport app.revanced.manager.network.downloader.DownloaderPackage\nimport app.revanced.manager.util.PM\nimport app.revanced.manager.util.mutableStateSetOf\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.NonCancellable\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\n\nclass DownloadsViewModel(\n    app: Application,\n    private val downloadedAppRepository: DownloadedAppRepository,\n    private val downloaderRepository: DownloaderRepository,\n    prefs: PreferencesManager,\n    val pm: PM,\n    val networkInfo: NetworkInfo,\n) : ViewModel() {\n    private val contentResolver = app.contentResolver\n    val usePrereleases = prefs.useDownloaderPrerelease\n    val downloaderSources = downloaderRepository.downloaderSources\n    val downloadedApps = downloadedAppRepository.getAll().map { downloadedApps ->\n        downloadedApps.sortedWith(\n            compareBy<DownloadedApp> {\n                it.packageName\n            }.thenBy { it.version }\n        )\n    }\n    val appSelection = mutableStateSetOf<DownloadedApp>()\n\n    var isRefreshingDownloaders by mutableStateOf(false)\n        private set\n\n    var isUpdatingDownloader by mutableStateOf(false)\n        private set\n\n    var deletingDownloaderUid by mutableStateOf<Int?>(null)\n        private set\n\n    fun updateUsePrereleases(value: Boolean) = viewModelScope.launch {\n        usePrereleases.update(value)\n        val apiSource = downloaderRepository.downloaderSources.first()[0]?.asRemoteOrNull ?: return@launch\n        updateDownloader(apiSource)\n    }\n\n    @SuppressLint(\"Recycle\")\n    fun createLocalSource(downloaderUri: Uri) = viewModelScope.launch {\n        downloaderRepository.createLocal { contentResolver.openInputStream(downloaderUri)!! }\n    }\n\n    fun createRemoteSource(apiUrl: String, autoUpdate: Boolean) = viewModelScope.launch {\n        downloaderRepository.createRemote(apiUrl, autoUpdate)\n    }\n\n    fun toggleApp(downloadedApp: DownloadedApp) {\n        if (appSelection.contains(downloadedApp))\n            appSelection.remove(downloadedApp)\n        else\n            appSelection.add(downloadedApp)\n    }\n\n    fun deleteApps() {\n        viewModelScope.launch(NonCancellable) {\n            downloadedAppRepository.delete(appSelection)\n\n            withContext(Dispatchers.Main) {\n                appSelection.clear()\n            }\n        }\n    }\n\n    fun refreshDownloaders() = viewModelScope.launch {\n        isRefreshingDownloaders = true\n        downloaderRepository.updateCheck()\n        isRefreshingDownloaders = false\n    }\n\n    fun deleteDownloader(src: Source<DownloaderPackage>) = viewModelScope.launch {\n        try {\n            deletingDownloaderUid = src.uid\n            downloaderRepository.remove(src)\n        } finally {\n            deletingDownloaderUid = null\n        }\n    }\n\n    fun updateDownloader(src: RemoteSource<DownloaderPackage>) = viewModelScope.launch {\n        try {\n            isUpdatingDownloader = true\n            downloaderRepository.update(src, showToast = true, force = true)\n        } finally {\n            isUpdatingDownloader = false\n        }\n    }\n\n    fun setAutoUpdate(src: RemoteSource<DownloaderPackage>, value: Boolean) = viewModelScope.launch {\n        with(downloaderRepository) {\n            src.setAutoUpdate(value)\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/GeneralSettingsViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.app.Application\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.ui.theme.Theme\nimport app.revanced.manager.util.SupportedLocales\nimport app.revanced.manager.util.resetListItemColorsCached\nimport kotlinx.coroutines.launch\nimport java.util.Locale\n\nclass GeneralSettingsViewModel(\n    private val app: Application,\n    val prefs: PreferencesManager\n) : ViewModel() {\n    fun setTheme(theme: Theme) = viewModelScope.launch {\n        prefs.theme.update(theme)\n    }\n\n    fun getSupportedLocales() = SupportedLocales.getSupportedLocales(app)\n    fun getCurrentLocale() = SupportedLocales.getCurrentLocale()\n    fun setLocale(locale: Locale?) = SupportedLocales.setLocale(locale)\n    fun getLocaleDisplayName(locale: Locale) = SupportedLocales.getDisplayName(locale)\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/ImportExportViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.app.Application\nimport android.net.Uri\nimport androidx.activity.result.contract.ActivityResultContract\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.annotation.StringRes\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.R\nimport app.revanced.manager.domain.manager.KeystoreManager\nimport app.revanced.manager.domain.repository.PatchSelectionRepository\nimport app.revanced.manager.domain.repository.SerializedSelection\nimport app.revanced.manager.domain.repository.PatchBundleRepository\nimport app.revanced.manager.domain.sources.PatchBundleSource\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.repository.PatchOptionsRepository\nimport app.revanced.manager.util.JSON_MIMETYPE\nimport app.revanced.manager.util.toast\nimport app.revanced.manager.util.uiSafe\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\nimport kotlinx.serialization.ExperimentalSerializationApi\nimport kotlinx.serialization.json.Json\nimport kotlinx.serialization.json.decodeFromStream\nimport kotlinx.serialization.json.encodeToStream\nimport java.io.File\nimport java.nio.file.Files\nimport java.nio.file.Path\nimport java.nio.file.StandardCopyOption\nimport kotlin.io.path.deleteExisting\nimport kotlin.io.path.inputStream\n\nsealed class ResetDialogState(\n    @param:StringRes val titleResId: Int,\n    @param:StringRes val descriptionResId: Int,\n    val onConfirm: () -> Unit,\n    val dialogOptionName: String? = null,\n) {\n    class Keystore(onConfirm: () -> Unit) : ResetDialogState(\n        titleResId = R.string.regenerate_keystore,\n        descriptionResId = R.string.regenerate_keystore_dialog_description,\n        onConfirm = onConfirm\n    )\n}\n\ndata class PatchStorageStats(\n    val selectionPackageCount: Int = 0,\n    val selectedPatchCount: Int = 0\n)\n\n@OptIn(ExperimentalSerializationApi::class)\nclass ImportExportViewModel(\n    private val app: Application,\n    private val keystoreManager: KeystoreManager,\n    private val selectionRepository: PatchSelectionRepository,\n    private val optionsRepository: PatchOptionsRepository,\n    patchBundleRepository: PatchBundleRepository,\n    val prefs: PreferencesManager,\n) : ViewModel() {\n    private val contentResolver = app.contentResolver\n    val patchBundles = patchBundleRepository.sources\n    var selectedBundle by mutableStateOf<PatchBundleSource?>(null)\n        private set\n    var selectionAction by mutableStateOf<SelectionAction?>(null)\n        private set\n    private var keystoreImportPath by mutableStateOf<Path?>(null)\n    val showCredentialsDialog by derivedStateOf { keystoreImportPath != null }\n    val patchStorageStats = combine(\n        selectionRepository.getSelectionPackageCount(),\n        selectionRepository.getSelectedPatchCount()\n    ) { selectionPackageCount, selectedPatchCount ->\n        PatchStorageStats(\n            selectionPackageCount = selectionPackageCount,\n            selectedPatchCount = selectedPatchCount\n        )\n    }\n\n    var resetDialogState by mutableStateOf<ResetDialogState?>(null)\n\n    fun resetOptions() = viewModelScope.launch {\n        optionsRepository.reset()\n        app.toast(app.getString(R.string.patch_options_reset_toast))\n    }\n\n    fun startKeystoreImport(content: Uri) = viewModelScope.launch {\n        uiSafe(app, R.string.failed_to_import_keystore, \"Failed to import keystore\") {\n            val path = withContext(Dispatchers.IO) {\n                File.createTempFile(\"signing\", \"ks\", app.cacheDir).toPath().also {\n                    Files.copy(\n                        contentResolver.openInputStream(content)!!,\n                        it,\n                        StandardCopyOption.REPLACE_EXISTING\n                    )\n                }\n            }\n\n            aliases.forEach { alias ->\n                knownPasswords.forEach { pass ->\n                    if (tryKeystoreImport(alias, pass, path)) {\n                        return@launch\n                    }\n                }\n            }\n\n            keystoreImportPath = path\n        }\n    }\n\n    fun cancelKeystoreImport() {\n        keystoreImportPath?.deleteExisting()\n        keystoreImportPath = null\n    }\n\n    suspend fun tryKeystoreImport(alias: String, pass: String) =\n        tryKeystoreImport(alias, pass, keystoreImportPath!!)\n\n    private suspend fun tryKeystoreImport(alias: String, pass: String, path: Path): Boolean {\n        path.inputStream().use { stream ->\n            if (keystoreManager.import(alias, pass, stream)) {\n                app.toast(app.getString(R.string.import_keystore_success))\n                cancelKeystoreImport()\n                return true\n            }\n        }\n\n        return false\n    }\n\n    override fun onCleared() {\n        super.onCleared()\n\n        cancelKeystoreImport()\n    }\n\n    fun canExport() = keystoreManager.hasKeystore()\n\n    fun exportKeystore(target: Uri) = viewModelScope.launch {\n        keystoreManager.export(contentResolver.openOutputStream(target)!!)\n        app.toast(app.getString(R.string.export_keystore_success))\n    }\n\n    fun regenerateKeystore() = viewModelScope.launch {\n        keystoreManager.regenerate()\n        app.toast(app.getString(R.string.regenerate_keystore_success))\n    }\n\n    fun resetSelection() = viewModelScope.launch {\n        withContext(Dispatchers.Default) { selectionRepository.reset() }\n        app.toast(app.getString(R.string.reset_patch_selection_success))\n    }\n\n    fun executeSelectionAction(target: Uri) = viewModelScope.launch {\n        val source = selectedBundle!!\n        val action = selectionAction!!\n        clearSelectionAction()\n\n        action.execute(source.uid, target)\n    }\n\n    fun selectBundle(bundle: PatchBundleSource) {\n        selectedBundle = bundle\n    }\n\n    fun clearSelectionAction() {\n        selectionAction = null\n        selectedBundle = null\n    }\n\n    fun importSelection() = clearSelectionAction().also {\n        selectionAction = Import()\n    }\n\n    fun exportSelection() = clearSelectionAction().also {\n        selectionAction = Export()\n    }\n\n    sealed interface SelectionAction {\n        suspend fun execute(bundleUid: Int, location: Uri)\n        val activityContract: ActivityResultContract<String, Uri?>\n        val activityArg: String\n        val bundleSelectorTitle: String?\n    }\n\n    private inner class Import : SelectionAction {\n        override val activityContract = ActivityResultContracts.GetContent()\n        override val activityArg = JSON_MIMETYPE\n        override val bundleSelectorTitle = app.getString(R.string.select_bundle_for_import)\n        override suspend fun execute(bundleUid: Int, location: Uri) = uiSafe(\n            app,\n            R.string.import_patch_selection_fail,\n            \"Failed to restore patch selection\"\n        ) {\n            val selection = withContext(Dispatchers.IO) {\n                contentResolver.openInputStream(location)!!.use {\n                    Json.decodeFromStream<SerializedSelection>(it)\n                }\n            }\n\n            selectionRepository.import(bundleUid, selection)\n            app.toast(app.getString(R.string.import_patch_selection_success))\n        }\n    }\n\n    private inner class Export : SelectionAction {\n        override val activityContract = ActivityResultContracts.CreateDocument(JSON_MIMETYPE)\n        override val activityArg = \"selection.json\"\n        override val bundleSelectorTitle = app.getString(R.string.select_bundle_for_export)\n        override suspend fun execute(bundleUid: Int, location: Uri) = uiSafe(\n            app,\n            R.string.export_patch_selection_fail,\n            \"Failed to backup patch selection\"\n        ) {\n            val selection = selectionRepository.export(bundleUid)\n\n            withContext(Dispatchers.IO) {\n                contentResolver.openOutputStream(location, \"wt\")!!.use {\n                    Json.Default.encodeToStream(selection, it)\n                }\n            }\n            app.toast(app.getString(R.string.export_patch_selection_success))\n        }\n    }\n\n    private companion object {\n        val knownPasswords = arrayOf(\"ReVanced\", \"s3cur3p@ssw0rd\")\n        val aliases = arrayOf(KeystoreManager.DEFAULT, \"alias\", \"ReVanced Key\")\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/InstalledAppInfoViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.app.Application\nimport android.content.pm.PackageInfo\nimport android.util.Log\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.R\nimport app.revanced.manager.data.room.apps.installed.InstallType\nimport app.revanced.manager.data.room.apps.installed.InstalledApp\nimport app.revanced.manager.data.room.apps.installed.InstalledPatchBundle\nimport app.revanced.manager.domain.installer.RootInstaller\nimport app.revanced.manager.domain.repository.InstalledAppRepository\nimport app.revanced.manager.util.PM\nimport app.revanced.manager.util.PatchSelection\nimport app.revanced.manager.util.simpleMessage\nimport app.revanced.manager.util.tag\nimport app.revanced.manager.util.toast\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\nimport org.koin.core.component.KoinComponent\nimport org.koin.core.component.inject\nimport ru.solrudev.ackpine.session.Session\nimport ru.solrudev.ackpine.uninstaller.UninstallFailure\n\nclass InstalledAppInfoViewModel(\n    packageName: String\n) : ViewModel(), KoinComponent {\n    private val context: Application by inject()\n    private val pm: PM by inject()\n    private val installedAppRepository: InstalledAppRepository by inject()\n    val rootInstaller: RootInstaller by inject()\n\n    lateinit var onBackClick: () -> Unit\n\n    var installedApp: InstalledApp? by mutableStateOf(null)\n        private set\n    var appInfo: PackageInfo? by mutableStateOf(null)\n        private set\n    var appliedPatches: PatchSelection? by mutableStateOf(null)\n    var patchBundles: List<InstalledPatchBundle> by mutableStateOf(emptyList())\n        private set\n    var isMounted by mutableStateOf(false)\n        private set\n\n    init {\n        viewModelScope.launch {\n            installedApp = installedAppRepository.get(packageName)?.also {\n                isMounted = rootInstaller.isAppMounted(it.currentPackageName)\n                appInfo = withContext(Dispatchers.IO) {\n                    pm.getPackageInfo(it.currentPackageName)\n                }\n                appliedPatches = withContext(Dispatchers.IO) {\n                    installedAppRepository.getAppliedPatches(it.currentPackageName)\n                }\n                patchBundles = withContext(Dispatchers.IO) {\n                    installedAppRepository.getInstalledPatchBundles(it.currentPackageName)\n                }\n            }\n        }\n    }\n\n    fun launch() = installedApp?.currentPackageName?.let(pm::launch)\n\n    fun mountOrUnmount() = viewModelScope.launch {\n        val pkgName = installedApp?.currentPackageName ?: return@launch\n        try {\n            if (isMounted)\n                rootInstaller.unmount(pkgName)\n            else\n                rootInstaller.mount(pkgName)\n        } catch (e: Exception) {\n            if (isMounted) {\n                context.toast(context.getString(R.string.failed_to_unmount, e.simpleMessage()))\n                Log.e(tag, \"Failed to unmount\", e)\n            } else {\n                context.toast(context.getString(R.string.failed_to_mount, e.simpleMessage()))\n                Log.e(tag, \"Failed to mount\", e)\n            }\n        } finally {\n            isMounted = rootInstaller.isAppMounted(pkgName)\n        }\n    }\n\n    fun uninstall() {\n        val app = installedApp ?: return\n        viewModelScope.launch {\n            when (app.installType) {\n                InstallType.DEFAULT -> {\n                    when (val result = pm.uninstallPackage(app.currentPackageName)) {\n                        is Session.State.Failed<UninstallFailure> -> {\n                            if (result.failure !is UninstallFailure.Aborted) {\n                                val msg = result.failure.message.orEmpty()\n                                context.toast(\n                                    this@InstalledAppInfoViewModel.context.getString(\n                                        R.string.uninstall_app_fail,\n                                        msg\n                                    )\n                                )\n                            }\n                            return@launch\n                        }\n                        Session.State.Succeeded -> {}\n                    }\n                }\n\n                InstallType.MOUNT -> rootInstaller.uninstall(app.currentPackageName)\n            }\n            installedAppRepository.delete(app)\n            onBackClick()\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/InstalledAppsViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.content.pm.PackageInfo\nimport androidx.compose.runtime.mutableStateMapOf\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.data.room.apps.installed.InstallType\nimport app.revanced.manager.data.room.apps.installed.InstalledApp\nimport app.revanced.manager.domain.installer.RootInstaller\nimport app.revanced.manager.domain.installer.RootServiceException\nimport app.revanced.manager.domain.repository.InstalledAppRepository\nimport app.revanced.manager.util.PM\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.SharingStarted\nimport kotlinx.coroutines.flow.collectLatest\nimport kotlinx.coroutines.flow.filterNotNull\nimport kotlinx.coroutines.flow.stateIn\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\n\nclass InstalledAppsViewModel(\n    private val installedAppsRepository: InstalledAppRepository,\n    private val pm: PM,\n    private val rootInstaller: RootInstaller\n) : ViewModel() {\n    val apps = installedAppsRepository.getAll()\n        .stateIn(\n            scope = viewModelScope,\n            started = SharingStarted.WhileSubscribed(),\n            initialValue = null,\n        )\n\n    val packageInfoMap = mutableStateMapOf<String, PackageInfo?>()\n\n    init {\n        viewModelScope.launch {\n            apps.filterNotNull().collectLatest(::fetchPackageInfos)\n        }\n    }\n\n    private suspend fun fetchPackageInfos(apps: List<InstalledApp>) {\n        for (app in apps) {\n            packageInfoMap[app.currentPackageName] = withContext(Dispatchers.IO) {\n                try {\n                    if (app.installType == InstallType.MOUNT &&\n                        !rootInstaller.isAppInstalled(app.currentPackageName)\n                    ) {\n                        installedAppsRepository.delete(app)\n                        return@withContext null\n                    }\n                } catch (_: RootServiceException) {\n                }\n\n                val packageInfo = pm.getPackageInfo(app.currentPackageName)\n\n                if (packageInfo == null && app.installType != InstallType.MOUNT) {\n                    installedAppsRepository.delete(app)\n                    return@withContext null\n                }\n\n                packageInfo\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/MainViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.app.Application\nimport android.content.Context.MODE_PRIVATE\nimport android.content.SharedPreferences\nimport android.util.Log\nimport androidx.core.content.edit\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.R\nimport app.revanced.manager.data.room.apps.installed.InstallType\nimport app.revanced.manager.domain.sources.Extensions.asRemoteOrNull\nimport app.revanced.manager.domain.manager.KeystoreManager\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.repository.DownloadedAppRepository\nimport app.revanced.manager.domain.repository.InstalledAppRepository\nimport app.revanced.manager.domain.repository.PatchBundleRepository\nimport app.revanced.manager.domain.repository.PatchSelectionRepository\nimport app.revanced.manager.domain.repository.SerializedSelection\nimport app.revanced.manager.ui.model.SelectedApp\nimport app.revanced.manager.ui.theme.Theme\nimport app.revanced.manager.util.tag\nimport app.revanced.manager.util.toast\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.launch\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.SerializationException\nimport kotlinx.serialization.json.Json\nimport org.json.JSONObject\nimport java.io.File\n\nprivate const val LEGACY_LIST_PREFIX = \"VGhpcyBpcyB0aGUgcHJlZml4IGZvciBhIGxpc3Qu!\"\n\nclass MainViewModel(\n    private val patchBundleRepository: PatchBundleRepository,\n    private val patchSelectionRepository: PatchSelectionRepository,\n    private val downloadedAppRepository: DownloadedAppRepository,\n    private val installedAppRepository: InstalledAppRepository,\n    private val keystoreManager: KeystoreManager,\n    private val app: Application,\n    val prefs: PreferencesManager,\n    private val json: Json\n) : ViewModel() {\n    private val appSelectChannel = Channel<SelectedApp>()\n    val appSelectFlow = appSelectChannel.receiveAsFlow()\n\n    private suspend fun suggestedVersion(packageName: String) =\n        patchBundleRepository.suggestedVersions.first()[packageName]\n\n    private suspend fun findDownloadedApp(app: SelectedApp): SelectedApp.Local? {\n        if (app !is SelectedApp.Search) return null\n\n        val suggestedVersion = suggestedVersion(app.packageName)\n        val downloadedApp = if (suggestedVersion != null) {\n            downloadedAppRepository.get(app.packageName, suggestedVersion, markUsed = true)\n        } else {\n            downloadedAppRepository.getLatestByPackage(app.packageName, markUsed = true)\n        } ?: return null\n\n        val file = try {\n            downloadedAppRepository.getApkFileForApp(downloadedApp)\n        } catch (e: Exception) {\n            Log.w(tag, \"Downloaded APK file not found for ${downloadedApp.packageName}\", e)\n            return null\n        }\n\n        return SelectedApp.Local(\n            downloadedApp.packageName,\n            downloadedApp.version,\n            file,\n            false\n        )\n    }\n\n    fun selectApp(app: SelectedApp) = viewModelScope.launch {\n        appSelectChannel.send(findDownloadedApp(app) ?: app)\n    }\n\n    fun selectApp(packageName: String) = viewModelScope.launch {\n        selectApp(SelectedApp.Search(packageName, suggestedVersion(packageName)))\n    }\n\n    init {\n        viewModelScope.launch {\n            if (prefs.completedOnboarding.get()) return@launch\n            val flutterPrefs = app.getSharedPreferences(\"FlutterSharedPreferences\", MODE_PRIVATE)\n            if (flutterPrefs.all.isNotEmpty()) applyLegacySettings(flutterPrefs)\n        }\n    }\n\n    fun applyLegacySettings(flutterPrefs: SharedPreferences) {\n        Log.d(tag, \"Migrating flutter preferences\")\n        val data = JSONObject().apply {\n            put(\"keystorePassword\", \"s3cur3p@ssw0rd\")\n\n            val allEntries: Map<String, *> = flutterPrefs.all\n            for ((key, value) in allEntries) {\n                put(key.replace(\"flutter.\", \"\"), value)\n            }\n        }\n\n        val storedPatchesFile = File(app.filesDir.parentFile.absolutePath, \"/app_flutter/selected-patches.json\")\n        val patches: SerializedSelection? =\n            if (storedPatchesFile.exists()) {\n                json.decodeFromString<SerializedSelection>(storedPatchesFile.readText())\n            } else {\n                null\n            }\n\n        val keystoreFile = File(app.getExternalFilesDir(null), \"/revanced-manager.keystore\")\n        val keystore: ByteArray? = if (keystoreFile.exists()) {\n            val bytes = keystoreFile.readBytes()\n\n            keystoreFile.delete()\n\n            bytes\n        } else {\n            null\n        }\n\n        flutterPrefs.edit(commit = true) { clear() }\n\n        val settings = try {\n            json.decodeFromString<LegacySettings>(data.toString())\n        } catch (e: SerializationException) {\n            app.toast(app.getString(R.string.legacy_import_failed))\n            Log.e(tag, \"Legacy settings data could not be deserialized\", e)\n            return\n        }\n\n        applyLegacySettings(settings, patches, keystore)\n    }\n\n    private fun applyLegacySettings(settings: LegacySettings, patches: SerializedSelection?, keystore: ByteArray?) = viewModelScope.launch {\n        settings.themeMode?.let { theme ->\n            val themeMap = mapOf(\n                0 to Theme.SYSTEM,\n                1 to Theme.LIGHT,\n                2 to Theme.DARK\n            )\n            prefs.theme.update(themeMap[theme] ?: Theme.SYSTEM)\n        }\n        settings.useDynamicTheme?.let { dynamicColor ->\n            prefs.dynamicColor.update(dynamicColor)\n        }\n        settings.usePrereleases?.let { prereleases ->\n            prefs.useManagerPrereleases.update(prereleases)\n            prefs.usePatchesPrereleases.update(prereleases)\n        }\n        settings.apiUrl?.let { api ->\n            prefs.api.update(api.removeSuffix(\"/\"))\n        }\n        settings.experimentalPatchesEnabled?.let { allowExperimental ->\n            prefs.disablePatchVersionCompatCheck.update(allowExperimental)\n        }\n        settings.patchesAutoUpdate?.let { autoUpdate ->\n            with(patchBundleRepository) {\n                sources\n                    .first()\n                    .find { it.uid == 0 }\n                    ?.asRemoteOrNull\n                    ?.setAutoUpdate(autoUpdate)\n\n                updateCheck()\n            }\n        }\n        settings.patchesChangeEnabled?.let { disableSelectionWarning ->\n            prefs.disableSelectionWarning.update(disableSelectionWarning)\n        }\n        keystore?.let { keystoreBytes ->\n            keystoreManager.import(\n                \"alias\",\n                settings.keystorePassword,\n                keystoreBytes.inputStream()\n            )\n        }\n        patches?.let { selection ->\n            patchSelectionRepository.import(0, selection)\n        }\n        settings.patchedApps?.let { apps ->\n            json.decodeFromString<List<String>>(apps.removePrefix(LEGACY_LIST_PREFIX)).forEach { appJson ->\n                val patchedApp = json.decodeFromString<LegacyPatchedApp>(appJson)\n                installedAppRepository.addOrUpdate(\n                    patchedApp.packageName,\n                    patchedApp.packageName,\n                    patchedApp.version,\n                    if (patchedApp.isRooted) InstallType.MOUNT else InstallType.DEFAULT,\n                    mapOf(0 to patchedApp.appliedPatches.toSet())\n                )\n            }\n        }\n        Log.d(tag, \"Imported legacy settings\")\n    }\n\n    @Serializable\n    private data class LegacyPatchedApp(\n        val packageName: String,\n        val version: String,\n        val isRooted: Boolean,\n        val appliedPatches: List<String>,\n    )\n\n    @Serializable\n    private data class LegacySettings(\n        val keystorePassword: String,\n        val themeMode: Int? = null,\n        val useDynamicTheme: Boolean? = null,\n        val usePrereleases: Boolean? = null,\n        val apiUrl: String? = null,\n        val experimentalPatchesEnabled: Boolean? = null,\n        val patchesAutoUpdate: Boolean? = null,\n        val patchesChangeEnabled: Boolean? = null,\n        val patchedApps: String? = null,\n    )\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/OnboardingViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.app.Application\nimport android.os.Build\nimport android.os.PowerManager\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.core.app.NotificationManagerCompat\nimport androidx.core.content.getSystemService\nimport androidx.lifecycle.ViewModel\nimport app.revanced.manager.data.platform.NetworkInfo\nimport app.revanced.manager.domain.sources.Extensions.asRemoteOrNull\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.repository.DownloaderRepository\nimport app.revanced.manager.domain.repository.PatchBundleRepository\nimport app.revanced.manager.patcher.aapt.Aapt\nimport app.revanced.manager.util.PM\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.map\n\nenum class OnboardingStep {\n    Permissions,\n    Updates,\n    Apps\n}\n\nclass OnboardingViewModel(\n    private val app: Application,\n    private val prefs: PreferencesManager,\n    private val pm: PM,\n    private val downloaderRepository: DownloaderRepository,\n    private val patchBundleRepository: PatchBundleRepository,\n    private val networkInfo: NetworkInfo,\n) : ViewModel() {\n    private val powerManager = app.getSystemService<PowerManager>()!!\n\n    val apps = pm.appList.map { apps ->\n        apps.filter { (it.patches ?: 0) > 0 }.ifEmpty { null }\n    }\n    val apiUrl = prefs.api.default\n\n    val hasNetworkError = combine(apps, patchBundleRepository.updateError) { apps, updateError ->\n        apps == null && (!networkInfo.isConnected() || updateError != null)\n    }\n\n    val suggestedVersions = patchBundleRepository.suggestedVersions\n\n    var canInstallUnknownApps by mutableStateOf(false)\n        private set\n    var isNotificationsEnabled by mutableStateOf(false)\n        private set\n    var isBatteryOptimizationExempt by mutableStateOf(false)\n        private set\n\n    val isDeviceSupported = Aapt.supportsDevice()\n\n    var currentStep by mutableStateOf(OnboardingStep.Permissions)\n        private set\n\n    val allPermissionsGranted\n        get() = canInstallUnknownApps && isNotificationsEnabled && isBatteryOptimizationExempt\n\n    init {\n        refreshPermissionStates()\n\n        currentStep =\n            if (allPermissionsGranted) OnboardingStep.Updates else OnboardingStep.Permissions\n    }\n\n    fun refreshPermissionStates() {\n        canInstallUnknownApps = pm.canInstallPackages()\n        isNotificationsEnabled = Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU ||\n                NotificationManagerCompat.from(app).areNotificationsEnabled()\n        isBatteryOptimizationExempt = powerManager.isIgnoringBatteryOptimizations(app.packageName)\n    }\n\n    fun advance() {\n        currentStep = nextStep(currentStep)\n    }\n\n    fun retreat() {\n        currentStep = previousStep(currentStep)\n    }\n\n    suspend fun applyAutoUpdatePrefs(managerEnabled: Boolean, patchesEnabled: Boolean, downloadersEnabled: Boolean) {\n        prefs.managerAutoUpdates.update(managerEnabled)\n\n        with(patchBundleRepository) {\n            val src = sources\n                .first()\n                .find { it.isDefault }\n                ?.asRemoteOrNull ?: return@with\n\n            src.setAutoUpdate(patchesEnabled)\n            if (networkInfo.isConnected()) update(src)\n        }\n\n        with(downloaderRepository) {\n            val src = downloaderSources\n                .first()[0]\n                ?.asRemoteOrNull ?: return@with\n\n            src.setAutoUpdate(downloadersEnabled)\n            if (networkInfo.isConnected()) update(src)\n        }\n    }\n\n    suspend fun completeOnboarding() {\n        prefs.completedOnboarding.update(true)\n    }\n\n    private fun nextStep(from: OnboardingStep) = when (from) {\n        OnboardingStep.Permissions -> OnboardingStep.Updates\n        OnboardingStep.Updates -> OnboardingStep.Apps\n        OnboardingStep.Apps -> OnboardingStep.Apps\n    }\n\n    private fun previousStep(from: OnboardingStep) = when (from) {\n        OnboardingStep.Permissions -> OnboardingStep.Permissions\n        OnboardingStep.Updates -> OnboardingStep.Permissions\n        OnboardingStep.Apps -> OnboardingStep.Updates\n    }\n\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/PatcherViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.app.ActivityManager\nimport android.app.Application\nimport android.content.ClipData\nimport android.content.ClipboardManager\nimport android.content.Context\nimport android.content.Intent\nimport android.net.Uri\nimport android.os.Build\nimport android.os.Environment\nimport android.os.ParcelUuid\nimport android.os.StatFs\nimport android.text.format.Formatter\nimport android.util.Log\nimport androidx.activity.result.ActivityResult\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.saveable.autoSaver\nimport androidx.compose.runtime.setValue\nimport androidx.compose.runtime.toMutableStateList\nimport androidx.lifecycle.SavedStateHandle\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.map\nimport androidx.lifecycle.viewModelScope\nimport androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi\nimport androidx.lifecycle.viewmodel.compose.saveable\nimport androidx.work.WorkInfo\nimport androidx.work.WorkManager\nimport app.revanced.manager.BuildConfig\nimport androidx.core.content.FileProvider\nimport app.revanced.manager.R\nimport app.revanced.manager.data.platform.Filesystem\nimport app.revanced.manager.data.room.apps.installed.InstallType\nimport app.revanced.manager.data.room.apps.installed.InstalledApp\nimport app.revanced.manager.domain.installer.RootInstaller\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.repository.DownloadedAppRepository\nimport app.revanced.manager.domain.repository.InstalledAppRepository\nimport app.revanced.manager.domain.repository.PatchBundleRepository\nimport app.revanced.manager.domain.worker.WorkerRepository\nimport app.revanced.manager.downloader.DownloaderHostApi\nimport app.revanced.manager.downloader.UserInteractionException\nimport app.revanced.manager.patcher.ProgressEvent\nimport app.revanced.manager.patcher.StepId\nimport app.revanced.manager.patcher.logger.LogLevel\nimport app.revanced.manager.patcher.logger.Logger\nimport app.revanced.manager.patcher.patch.PatchBundleInfo\nimport app.revanced.manager.patcher.patch.PatchBundleInfo.Extensions.toPatchSelection\nimport app.revanced.manager.patcher.worker.PatcherWorker\nimport app.revanced.manager.ui.model.InstallerModel\nimport app.revanced.manager.ui.model.SelectedApp\nimport app.revanced.manager.ui.model.State\nimport app.revanced.manager.ui.model.Step\nimport app.revanced.manager.ui.model.StepCategory\nimport app.revanced.manager.ui.model.navigation.Patcher\nimport app.revanced.manager.ui.model.withState\nimport app.revanced.manager.util.PM\nimport app.revanced.manager.util.PatchSelection\nimport app.revanced.manager.util.asCode\nimport app.revanced.manager.util.saveableVar\nimport app.revanced.manager.util.saver.snapshotStateListSaver\nimport app.revanced.manager.util.toast\nimport app.revanced.manager.util.uiSafe\nimport kotlinx.coroutines.CompletableDeferred\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.DelicateCoroutinesApi\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.GlobalScope\nimport kotlinx.coroutines.NonCancellable\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.cancel\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.time.withTimeout\nimport kotlinx.coroutines.withContext\nimport org.koin.core.component.KoinComponent\nimport org.koin.core.component.get\nimport org.koin.core.component.inject\nimport ru.solrudev.ackpine.installer.InstallFailure\nimport ru.solrudev.ackpine.installer.PackageInstaller\nimport ru.solrudev.ackpine.installer.createSession\nimport ru.solrudev.ackpine.installer.getSession\nimport ru.solrudev.ackpine.session.ProgressSession\nimport ru.solrudev.ackpine.session.Session\nimport ru.solrudev.ackpine.session.await\nimport ru.solrudev.ackpine.session.parameters.Confirmation\nimport ru.solrudev.ackpine.uninstaller.UninstallFailure\nimport java.io.File\nimport java.nio.file.Files\nimport java.time.Duration\nimport android.content.pm.PackageInstaller as AndroidPackageInstaller\n\n@OptIn(SavedStateHandleSaveableApi::class, DownloaderHostApi::class)\nclass PatcherViewModel(\n    private val input: Patcher.ViewModelParams\n) : ViewModel(), KoinComponent, InstallerModel {\n    private val app: Application by inject()\n    private val fs: Filesystem by inject()\n    private val pm: PM by inject()\n    private val workerRepository: WorkerRepository by inject()\n    private val installedAppRepository: InstalledAppRepository by inject()\n    private val patchBundleRepository: PatchBundleRepository by inject()\n    private val rootInstaller: RootInstaller by inject()\n    private val prefs: PreferencesManager by inject()\n    private val downloadedAppRepository: DownloadedAppRepository by inject()\n    private val savedStateHandle: SavedStateHandle = get()\n    private val ackpineInstaller: PackageInstaller = get()\n\n    private var installedApp: InstalledApp? = null\n    private val selectedApp = input.selectedApp\n    val packageName = selectedApp.packageName\n    val version = selectedApp.version\n\n    var installedPackageName by savedStateHandle.saveable(\n        key = \"installedPackageName\",\n        // Force Kotlin to select the correct overload.\n        stateSaver = autoSaver()\n    ) {\n        mutableStateOf<String?>(null)\n    }\n        private set\n    var packageInstallerStatus: Int? by savedStateHandle.saveable(\n        key = \"packageInstallerStatus\", stateSaver = autoSaver()\n    ) {\n        mutableStateOf(null)\n    }\n        private set\n\n    var isInstalling by mutableStateOf(false)\n        private set\n\n    private var currentActivityRequest: Pair<CompletableDeferred<Boolean>, String>? by mutableStateOf(\n        null\n    )\n    val activityPromptDialog by derivedStateOf { currentActivityRequest?.second }\n\n    private var launchedActivity: CompletableDeferred<ActivityResult>? = null\n    private val launchActivityChannel = Channel<Intent>()\n    val launchActivityFlow = launchActivityChannel.receiveAsFlow()\n\n    private val tempDir = savedStateHandle.saveable(key = \"tempDir\") {\n        fs.uiTempDir.resolve(\"installer\").also {\n            it.deleteRecursively()\n            it.mkdirs()\n        }\n    }\n\n    /**\n     * This coroutine scope is used to await installations.\n     * It should not be cancelled on system-initiated process death since that would cancel the installation process.\n     */\n    private val installerCoroutineScope = CoroutineScope(Dispatchers.Main)\n\n    /**\n     * Holds the package name of the Apk we are trying to install.\n     */\n    private var installerPkgName: String by savedStateHandle.saveableVar { \"\" }\n    private var installerSessionId: ParcelUuid? by savedStateHandle.saveableVar()\n\n    private var inputFile: File? by savedStateHandle.saveableVar()\n    private val outputFile = tempDir.resolve(\"output.apk\")\n    var preparedLogUri by mutableStateOf<Uri?>(null)\n        private set\n\n    private val logs by savedStateHandle.saveable<MutableList<Pair<LogLevel, String>>> { mutableListOf() }\n    private val logger = object : Logger() {\n        override fun log(level: LogLevel, message: String) {\n            level.androidLog(message)\n            if (level == LogLevel.TRACE) return\n\n            viewModelScope.launch {\n                logs.add(level to message)\n            }\n        }\n    }\n    val logPreviewText\n        get() = logs.takeLast(30).joinToString(\"\\n\") { (level, msg) -> \"[${level.name}]: $msg\" }\n\n    val steps by savedStateHandle.saveable(saver = snapshotStateListSaver()) {\n        generateSteps(app, input.selectedApp, input.selectedPatches).toMutableStateList()\n    }\n\n    val progress by derivedStateOf {\n        val steps = steps.filter { it.id != StepId.ExecutePatches }\n\n        val current = steps.count { it.state == State.COMPLETED }\n        val total = steps.size\n\n        current.toFloat() / total.toFloat()\n    }\n\n    private val workManager = WorkManager.getInstance(app)\n\n    private val patcherWorkerId by savedStateHandle.saveable<ParcelUuid> {\n        ParcelUuid(\n            workerRepository.launchExpedited<PatcherWorker, PatcherWorker.Args>(\n                \"patching\", PatcherWorker.Args(\n                    input.selectedApp,\n                    outputFile.path,\n                    input.selectedPatches,\n                    input.options,\n                    logger,\n                    setInputFile = { withContext(Dispatchers.Main) { inputFile = it } },\n                    handleStartActivityRequest = { downloader, intent ->\n                        withContext(Dispatchers.Main) {\n                            if (currentActivityRequest != null) throw Exception(\"Another request is already pending.\")\n                            try {\n                                // Wait for the dialog interaction.\n                                val accepted = with(CompletableDeferred<Boolean>()) {\n                                    currentActivityRequest = this to downloader.name\n\n                                    await()\n                                }\n                                if (!accepted) throw UserInteractionException.RequestDenied()\n\n                                // Launch the activity and wait for the result.\n                                try {\n                                    with(CompletableDeferred<ActivityResult>()) {\n                                        launchedActivity = this\n                                        launchActivityChannel.send(intent)\n                                        await()\n                                    }\n                                } finally {\n                                    launchedActivity = null\n                                }\n                            } finally {\n                                currentActivityRequest = null\n                            }\n                        }\n                    },\n                    onEvent = ::handleProgressEvent,\n                )\n            )\n        )\n    }\n\n    val patcherSucceeded =\n        workManager.getWorkInfoByIdLiveData(patcherWorkerId.uuid).map { workInfo: WorkInfo? ->\n            when (workInfo?.state) {\n                WorkInfo.State.SUCCEEDED -> true\n                WorkInfo.State.FAILED -> false\n                else -> null\n            }\n        }\n\n    init {\n        // TODO: detect system-initiated process death during the patching process.\n\n        installerSessionId?.uuid?.let { id ->\n            viewModelScope.launch {\n                try {\n                    isInstalling = true\n                    uiSafe(app, R.string.install_app_fail, \"Failed to install\") {\n                        // The process was killed during installation. Await the session again.\n                        withContext(Dispatchers.IO) {\n                            ackpineInstaller.getSession(id)\n                        }?.let {\n                            awaitInstallation(it)\n                        }\n                    }\n                } finally {\n                    isInstalling = false\n                }\n            }\n        }\n\n        viewModelScope.launch {\n            installedApp = installedAppRepository.get(packageName)\n        }\n    }\n\n    @OptIn(DelicateCoroutinesApi::class)\n    override fun onCleared() {\n        super.onCleared()\n        workManager.cancelWorkById(patcherWorkerId.uuid)\n\n        if (input.selectedApp is SelectedApp.Installed && installedApp?.installType == InstallType.MOUNT) {\n            GlobalScope.launch(Dispatchers.Main) {\n                uiSafe(app, R.string.failed_to_mount, \"Failed to mount\") {\n                    withTimeout(Duration.ofMinutes(1L)) {\n                        rootInstaller.mount(packageName)\n                    }\n                }\n            }\n        }\n    }\n\n    private fun handleProgressEvent(event: ProgressEvent) = viewModelScope.launch {\n        if (event is ProgressEvent.Failed && event.stepId == null && steps.any { it.state == State.FAILED }) {\n            return@launch\n        }\n\n        val stepIndex = steps.indexOfFirst {\n            event.stepId?.let { id -> id == it.id }\n                ?: (it.state == State.RUNNING || it.state == State.WAITING)\n        }\n\n        if (stepIndex != -1) {\n            val currentStep = steps[stepIndex]\n            val updatedStep = when (event) {\n                is ProgressEvent.Started -> currentStep.withState(State.RUNNING)\n\n                is ProgressEvent.Progress -> currentStep.withState(\n                    message = event.message ?: currentStep.message,\n                    progress = event.current?.let { event.current to event.total } ?: currentStep.progress\n                )\n\n                is ProgressEvent.Log -> currentStep.withState(\n                    message = appendLog(currentStep.message, formatLogLine(event.level, event.message))\n                )\n\n                is ProgressEvent.Completed -> currentStep.withState(State.COMPLETED, progress = null)\n                    .let { step ->\n                        if (step.id is StepId.ExecutePatch) step.copy(hide = false) else step\n                    }\n\n                is ProgressEvent.Failed -> currentStep.withState(\n                    State.FAILED,\n                    message = event.error.stackTrace,\n                    progress = null\n                ).let { step ->\n                    if (step.id is StepId.ExecutePatch) step.copy(hide = false) else step\n                }\n            }\n\n            steps[stepIndex] = updatedStep\n        }\n    }\n\n    fun onBack() {\n        installerCoroutineScope.cancel()\n        // tempDir cannot be deleted inside onCleared because it gets called on system-initiated process death.\n        tempDir.deleteRecursively()\n    }\n\n    fun isDeviceRooted() = rootInstaller.isDeviceRooted()\n\n    fun rejectInteraction() {\n        currentActivityRequest?.first?.complete(false)\n    }\n\n    fun allowInteraction() {\n        currentActivityRequest?.first?.complete(true)\n    }\n\n    fun handleActivityResult(result: ActivityResult) {\n        launchedActivity?.complete(result)\n    }\n\n    fun export(uri: Uri?) = viewModelScope.launch {\n        uri?.let {\n            withContext(Dispatchers.IO) {\n                app.contentResolver.openOutputStream(it)\n                    .use { stream -> Files.copy(outputFile.toPath(), stream) }\n            }\n            app.toast(app.getString(R.string.save_apk_success))\n        }\n    }\n\n    fun logFileName() = \"revanced_patcher_${packageName}_${version}_${System.currentTimeMillis()}.txt\"\n\n    fun prepareLogExport() = viewModelScope.launch {\n        val logSnapshot = logs.toList()\n        val uri = withContext(Dispatchers.IO) {\n            val content = buildLogExportText(app, logSnapshot)\n            tempDir.resolve(logFileName()).also {\n                it.writeText(content)\n            }.let {\n                FileProvider.getUriForFile(app, \"${app.packageName}.fileprovider\", it)\n            }\n        }\n\n        preparedLogUri = uri\n    }\n\n    fun copyLogs(context: Context) = viewModelScope.launch {\n        val logSnapshot = logs.toList()\n        withContext(Dispatchers.Main) {\n            val clipboardManager = app.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager\n            val content = buildLogExportText(app, logSnapshot)\n            val clip = ClipData.newPlainText(\"Logs\", content)\n            clipboardManager.setPrimaryClip(clip)\n            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {\n                context.toast(R.string.toast_copied_to_clipboard)\n            }\n        }\n    }\n\n    fun saveLogs(target: Uri?) = viewModelScope.launch {\n        val logSnapshot = logs.toList()\n        target?.let {\n            withContext(Dispatchers.IO) {\n                val content = buildLogExportText(app, logSnapshot)\n                app.contentResolver.openOutputStream(it)?.bufferedWriter().use { writer ->\n                    writer?.write(content)\n                }\n            }\n            app.toast(app.getString(R.string.save_logs_success))\n        }\n    }\n\n    fun clearPreparedLogExport() {\n        preparedLogUri = null\n    }\n\n    private suspend fun buildLogExportText(\n        context: Context,\n        logSnapshot: List<Pair<LogLevel, String>>\n    ): String {\n        val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager\n\n        val memInfo = ActivityManager.MemoryInfo().also {\n            activityManager.getMemoryInfo(it)\n        }\n\n        val statFs = StatFs(Environment.getDataDirectory().path)\n\n        val hasRoot = rootInstaller.hasRootAccess()\n        val suggestedVersion = patchBundleRepository.suggestedVersions.first()[packageName]\n        val allowIncompatiblePatches = prefs.disablePatchVersionCompatCheck.get()\n        val disableSelectionWarning = prefs.disableSelectionWarning.get()\n        val disableUniversalPatchCheck = prefs.disableUniversalPatchCheck.get()\n        val usePatchesPrereleases = prefs.usePatchesPrereleases.get()\n        val useProcessRuntime = prefs.useProcessRuntime.get()\n        val patcherProcessMemoryLimit = prefs.patcherProcessMemoryLimit.get()\n        val apiUrl = prefs.api.get()\n        val useManagerPrereleases = prefs.useManagerPrereleases.get()\n        val managerAutoUpdates = prefs.managerAutoUpdates.get()\n        val patchSelectionChanges = formatPatchSelectionChanges(\n            patchBundleRepository.scopedBundleInfoFlow(packageName, selectedApp.version).first(),\n            input.selectedPatches,\n            allowIncompatiblePatches\n        )\n\n        val patchingConfiguration = buildList {\n            addPreferenceChange(\n                \"Version compatibility check\",\n                allowIncompatiblePatches,\n                prefs.disablePatchVersionCompatCheck.default\n            ) { (!it).toString() }\n            addPreferenceChange(\n                \"Allow changing patch selection\",\n                disableSelectionWarning,\n                prefs.disableSelectionWarning.default\n            )\n            addPreferenceChange(\n                \"Show universal patches\",\n                disableUniversalPatchCheck,\n                prefs.disableUniversalPatchCheck.default\n            ) { (!it).toString() }\n            addPreferenceChange(\n                \"Use patches pre-releases\",\n                usePatchesPrereleases,\n                prefs.usePatchesPrereleases.default\n            )\n        }\n\n        val runtimeConfiguration = buildList {\n            addPreferenceChange(\n                \"Use process runtime\",\n                useProcessRuntime,\n                prefs.useProcessRuntime.default\n            )\n            addPreferenceChange(\n                \"Process runtime custom memory limit\",\n                patcherProcessMemoryLimit,\n                prefs.patcherProcessMemoryLimit.default\n            ) { \"${it}MB\" }\n            add(\"Memory limit: ${activityManager.memoryClass}MB (large: ${activityManager.largeMemoryClass}MB)\")\n        }\n\n        val managerConfiguration = buildList {\n            add(\"Manager version: ${BuildConfig.VERSION_NAME}\")\n            addPreferenceChange(\"API URL\", apiUrl, prefs.api.default)\n            addPreferenceChange(\n                \"Use manager pre-releases\",\n                useManagerPrereleases,\n                prefs.useManagerPrereleases.default\n            )\n            addPreferenceChange(\n                \"Manager auto-update\",\n                managerAutoUpdates,\n                prefs.managerAutoUpdates.default\n            )\n        }\n\n        val details = buildList {\n            add(formatAppLine(packageName, selectedApp.version, suggestedVersion))\n            addAll(patchSelectionChanges)\n            addAll(managerConfiguration)\n            addAll(patchingConfiguration)\n            addAll(runtimeConfiguration)\n            add(\"Root permissions: ${if (hasRoot) \"Yes\" else \"No\"}\")\n            add(\"RAM: ${Formatter.formatFileSize(context, memInfo.availMem)} / ${Formatter.formatFileSize(context, memInfo.totalMem)} available\")\n            add(\"Storage: ${Formatter.formatFileSize(context, statFs.availableBytes)} / ${Formatter.formatFileSize(context, statFs.totalBytes)} available\")\n            add(\"Android version: ${Build.VERSION.RELEASE} (API ${Build.VERSION.SDK_INT})\")\n            add(\"Supported architectures: ${Build.SUPPORTED_ABIS.joinToString()}\")\n            add(\"Model: ${Build.MODEL}\")\n        }.joinToString(\"\\n\")\n\n        val logsContent = logSnapshot.joinToString(\"\\n\") { (level, msg) ->\n            formatLogLine(level, msg)\n        }\n\n        return buildList {\n            add(details)\n            if (logsContent.isNotBlank()) add(logsContent)\n        }.joinToString(\"\\n\\n\")\n    }\n\n    fun open() = installedPackageName?.let(pm::launch)\n\n    private suspend fun startInstallation(file: File, packageName: String) {\n        val session = withContext(Dispatchers.IO) {\n            ackpineInstaller.createSession(Uri.fromFile(file)) {\n                confirmation = Confirmation.IMMEDIATE\n            }\n        }\n        withContext(Dispatchers.Main) {\n            installerPkgName = packageName\n        }\n        awaitInstallation(session)\n    }\n\n    private suspend fun awaitInstallation(session: ProgressSession<InstallFailure>) = withContext(\n        Dispatchers.Main\n    ) {\n        val result = installerCoroutineScope.async {\n            try {\n                installerSessionId = ParcelUuid(session.id)\n                withContext(Dispatchers.IO) {\n                    session.await()\n                }\n            } finally {\n                installerSessionId = null\n            }\n        }.await()\n\n        when (result) {\n            is Session.State.Failed<InstallFailure> -> {\n                result.failure.message?.let(logger::trace)\n                packageInstallerStatus = result.failure.asCode()\n            }\n\n            Session.State.Succeeded -> {\n                app.toast(app.getString(R.string.install_app_success))\n                installedPackageName = installerPkgName\n                val bundleInfo = patchBundleRepository.bundleInfoFlow.first()\n                installedAppRepository.addOrUpdate(\n                    installerPkgName,\n                    packageName,\n                    input.selectedApp.version ?: withContext(Dispatchers.IO) {\n                        pm.getPackageInfo(outputFile)?.versionName!!\n                    },\n                    InstallType.DEFAULT,\n                    input.selectedPatches,\n                    bundleInfo\n                )\n                downloadedAppRepository.deleteFor(installerPkgName)\n            }\n        }\n    }\n\n    fun install(installType: InstallType) = viewModelScope.launch {\n        isInstalling = true\n        var needsRootUninstall = false\n        try {\n            uiSafe(app, R.string.install_app_fail, \"Failed to install\") {\n                val currentPackageInfo =\n                    withContext(Dispatchers.IO) { pm.getPackageInfo(outputFile) }\n                        ?: throw Exception(\"Failed to load application info\")\n\n\n                when (installType) {\n                    InstallType.DEFAULT -> {\n                        // If the app is currently installed\n                        val existingPackageInfo =\n                            withContext(Dispatchers.IO) { pm.getPackageInfo(currentPackageInfo.packageName) }\n                        if (existingPackageInfo != null) {\n                            // Check if the app version is less than the installed version\n                            if (\n                                pm.getVersionCode(currentPackageInfo) < pm.getVersionCode(\n                                    existingPackageInfo\n                                )\n                            ) {\n                                // Exit if the selected app version is less than the installed version\n                                packageInstallerStatus =\n                                    AndroidPackageInstaller.STATUS_FAILURE_CONFLICT\n                                return@launch\n                            }\n                        }\n\n                        // Check if the app is mounted as root\n                        // If it is, unmount it first, silently\n                        if (rootInstaller.hasRootAccess() && rootInstaller.isAppMounted(packageName)) {\n                            rootInstaller.unmount(packageName)\n                        }\n\n                        // Install regularly\n                        startInstallation(outputFile, currentPackageInfo.packageName)\n                    }\n\n                    InstallType.MOUNT -> {\n                        val label = with(pm) {\n                            currentPackageInfo.label()\n                        }\n\n                        val inputVersion = input.selectedApp.version\n                            ?: withContext(Dispatchers.IO) { inputFile?.let(pm::getPackageInfo)?.versionName }\n                            ?: throw Exception(\"Failed to determine input APK version\")\n\n                        needsRootUninstall = true\n                        // Install as root\n                        rootInstaller.install(\n                            outputFile, inputFile, packageName, inputVersion, label\n                        )\n\n                        val bundleInfo = patchBundleRepository.bundleInfoFlow.first()\n                        installedAppRepository.addOrUpdate(\n                            currentPackageInfo.packageName,\n                            packageName,\n                            inputVersion,\n                            InstallType.MOUNT,\n                            input.selectedPatches,\n                            bundleInfo\n                        )\n\n                        rootInstaller.mount(packageName)\n                        installedPackageName = packageName\n\n                        app.toast(app.getString(R.string.install_app_success))\n                        needsRootUninstall = false\n                        downloadedAppRepository.deleteFor(packageName)\n                    }\n                }\n            }\n        } finally {\n            isInstalling = false\n            if (needsRootUninstall) {\n                try {\n                    withContext(NonCancellable) {\n                        rootInstaller.uninstall(packageName)\n                    }\n                } catch (_: Exception) {\n                }\n            }\n        }\n    }\n\n    override fun install() {\n        // InstallType.MOUNT is never used here since this overload is for the package installer status dialog.\n        install(InstallType.DEFAULT)\n    }\n\n    override fun reinstall() {\n        viewModelScope.launch {\n            try {\n                isInstalling = true\n                uiSafe(app, R.string.reinstall_app_fail, \"Failed to reinstall\") {\n                    val pkgName = withContext(Dispatchers.IO) {\n                        pm.getPackageInfo(outputFile)?.packageName\n                            ?: throw Exception(\"Failed to load application info\")\n                    }\n\n                    when (val result = pm.uninstallPackage(pkgName)) {\n                        is Session.State.Failed<UninstallFailure> -> {\n                            result.failure.message?.let(logger::trace)\n                            packageInstallerStatus = result.failure.asCode()\n                            return@launch\n                        }\n\n                        Session.State.Succeeded -> {}\n                    }\n                    startInstallation(outputFile, pkgName)\n                }\n            } finally {\n                isInstalling = false\n            }\n        }\n    }\n\n    fun dismissPackageInstallerDialog() {\n        packageInstallerStatus = null\n    }\n\n    private companion object {\n        const val TAG = \"ReVanced Patcher\"\n\n        fun LogLevel.androidLog(msg: String) = when (this) {\n            LogLevel.TRACE -> Log.v(TAG, msg)\n            LogLevel.INFO -> Log.i(TAG, msg)\n            LogLevel.WARN -> Log.w(TAG, msg)\n            LogLevel.ERROR -> Log.e(TAG, msg)\n        }\n\n        fun formatAppLine(packageName: String, selectedVersion: String?, suggestedVersion: String?): String {\n            val versionDetails = buildList {\n                selectedVersion?.let { add(\"Selected: $it\") }\n                suggestedVersion?.let { add(\"Suggested: $it\") }\n            }\n\n            return if (versionDetails.isEmpty()) {\n                \"App: $packageName\"\n            } else {\n                \"App: $packageName (${versionDetails.joinToString(\", \")})\"\n            }\n        }\n\n        inline fun <T> MutableList<String>.addPreferenceChange(\n            label: String,\n            value: T,\n            default: T,\n            formatter: (T) -> String = { it.toString() }\n        ) {\n            if (value != default) add(\"$label: ${formatter(value)}\")\n        }\n\n        fun formatPatchSelectionChanges(\n            bundles: List<PatchBundleInfo.Scoped>,\n            selectedPatches: PatchSelection,\n            allowIncompatible: Boolean\n        ): List<String> {\n            val defaultSelection = bundles.toPatchSelection(allowIncompatible) { _, patch -> patch.include }\n            val bundleNames = bundles.associate { it.uid to it.name }\n            val knownBundleIds = bundles.map(PatchBundleInfo.Scoped::uid)\n            val orderedBundleIds = knownBundleIds + (selectedPatches.keys + defaultSelection.keys)\n                .filterNot(knownBundleIds::contains)\n                .sorted()\n\n            return buildList {\n                orderedBundleIds.distinct().forEach { uid ->\n                    val selected = selectedPatches[uid].orEmpty()\n                    val defaults = defaultSelection[uid].orEmpty()\n                    val added = (selected - defaults).sorted()\n                    val removed = (defaults - selected).sorted()\n                    if (added.isEmpty() && removed.isEmpty()) return@forEach\n\n                    add(\"Source: ${bundleNames[uid] ?: \"Source $uid\"}\")\n                    if (added.isNotEmpty()) add(\"Added: ${added.joinToString()}\")\n                    if (removed.isNotEmpty()) add(\"Removed: ${removed.joinToString()}\")\n                }\n            }\n        }\n\n        fun formatLogLine(level: LogLevel, message: String) = when (level) {\n            LogLevel.INFO -> message\n            LogLevel.WARN -> \"Warning: $message\"\n            LogLevel.ERROR -> \"Error: $message\"\n            LogLevel.TRACE -> \"Debug: $message\"\n        }\n\n        fun appendLog(current: String?, line: String): String =\n            current?.takeIf { it.isNotBlank() }\n                ?.let { \"$it\\n$line\" }\n                ?: line\n\n        fun generateSteps(\n            context: Context, selectedApp: SelectedApp, selectedPatches: PatchSelection\n        ): List<Step> = buildList {\n            if (selectedApp is SelectedApp.Download || selectedApp is SelectedApp.Search) add(\n                Step(\n                    StepId.DownloadAPK,\n                    context.getString(R.string.download_apk),\n                    StepCategory.PREPARING\n                )\n            )\n\n            add(\n                Step(\n                    StepId.LoadPatches,\n                    context.getString(R.string.patcher_step_load_patches),\n                    StepCategory.PREPARING\n                )\n            )\n            add(\n                Step(\n                    StepId.ReadAPK,\n                    context.getString(R.string.patcher_step_unpack),\n                    StepCategory.PREPARING\n                )\n            )\n            add(\n                Step(\n                    StepId.ExecutePatches,\n                    context.getString(R.string.execute_patches),\n                    StepCategory.PATCHING\n                )\n            )\n\n            selectedPatches.values.asSequence().flatten().forEachIndexed { index, name ->\n                add(\n                    Step(\n                        StepId.ExecutePatch(index),\n                        name,\n                        StepCategory.PATCHING,\n                        hide = true\n                    )\n                )\n            }\n\n            add(\n                Step(\n                    StepId.WriteAPK,\n                    context.getString(R.string.patcher_step_write_patched),\n                    StepCategory.SAVING\n                )\n            )\n            add(\n                Step(\n                    StepId.SignAPK,\n                    context.getString(R.string.patcher_step_sign_apk),\n                    StepCategory.SAVING\n                )\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/PatchesSelectorViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.app.Application\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableIntStateOf\nimport androidx.compose.runtime.mutableStateMapOf\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.saveable.Saver\nimport androidx.compose.runtime.setValue\nimport androidx.compose.runtime.snapshots.SnapshotStateMap\nimport androidx.lifecycle.SavedStateHandle\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi\nimport androidx.lifecycle.viewmodel.compose.saveable\nimport app.revanced.manager.R\nimport app.revanced.manager.domain.sources.PatchBundleSource\nimport app.revanced.manager.domain.sources.Source.State\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.repository.PatchBundleRepository\nimport app.revanced.manager.domain.sources.Extensions.version\nimport app.revanced.manager.patcher.patch.PatchBundleInfo\nimport app.revanced.manager.patcher.patch.PatchBundleInfo.Extensions.toPatchSelection\nimport app.revanced.manager.patcher.patch.PatchInfo\nimport app.revanced.manager.ui.model.navigation.SelectedApplicationInfo\nimport app.revanced.manager.util.Options\nimport app.revanced.manager.util.PatchSelection\nimport app.revanced.manager.util.saver.Nullable\nimport app.revanced.manager.util.saver.nullableSaver\nimport app.revanced.manager.util.saver.persistentMapSaver\nimport app.revanced.manager.util.saver.persistentSetSaver\nimport app.revanced.manager.util.saver.snapshotStateMapSaver\nimport app.revanced.manager.util.toast\nimport kotlinx.collections.immutable.PersistentMap\nimport kotlinx.collections.immutable.PersistentSet\nimport kotlinx.collections.immutable.persistentMapOf\nimport kotlinx.collections.immutable.persistentSetOf\nimport kotlinx.collections.immutable.toPersistentMap\nimport kotlinx.collections.immutable.toPersistentSet\nimport kotlinx.coroutines.CoroutineStart\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.launch\nimport org.koin.core.component.KoinComponent\nimport org.koin.core.component.get\n\n@OptIn(SavedStateHandleSaveableApi::class)\nclass PatchesSelectorViewModel(input: SelectedApplicationInfo.PatchesSelector.ViewModelParams) :\n    ViewModel(), KoinComponent {\n    private val app: Application = get()\n    private val savedStateHandle: SavedStateHandle = get()\n    private val prefs: PreferencesManager = get()\n    private val bundleRepository: PatchBundleRepository = get()\n\n    val readOnly = input.readOnly\n    private val browseAllBundles = input.browseAllBundles\n    val packageName = input.app.packageName\n    val appVersion = input.app.version\n\n    var selectionWarningEnabled by mutableStateOf(true)\n        private set\n    var universalPatchWarningEnabled by mutableStateOf(true)\n        private set\n\n    val allowIncompatiblePatches =\n        get<PreferencesManager>().disablePatchVersionCompatCheck.getBlocking() || appVersion == null\n    val bundlesFlow = if (browseAllBundles) {\n        combine(bundleRepository.sources, bundleRepository.bundleInfoFlow) { sources, bundles ->\n            mergeSourcesWithBundleInfo(\n                sources,\n                bundles.mapValues { (_, bundle) -> bundle.asReadonlyScoped() }\n            )\n        }\n    } else {\n        combine(\n            bundleRepository.sources,\n            bundleRepository.scopedBundleInfoFlow(packageName, input.app.version)\n        ) { sources, bundles ->\n            mergeSourcesWithBundleInfo(\n                sources,\n                bundles.associateBy(PatchBundleInfo.Scoped::uid)\n            )\n        }\n    }\n\n    val bundleLoadIssuesFlow = bundleRepository.sources.map { sources ->\n        sources.mapNotNull { source ->\n            val messageId = when {\n                source.error != null -> R.string.patches_error_description\n                source.state is State.Missing -> R.string.patches_not_downloaded\n                else -> null\n            } ?: return@mapNotNull null\n\n            source.uid to messageId\n        }.toMap()\n    }\n\n    init {\n        viewModelScope.launch {\n            if (readOnly) {\n                universalPatchWarningEnabled = false\n                selectionWarningEnabled = false\n                return@launch\n            }\n\n            if (prefs.disableUniversalPatchCheck.get()) {\n                universalPatchWarningEnabled = false\n            }\n\n            if (prefs.disableSelectionWarning.get()) {\n                selectionWarningEnabled = false\n                return@launch\n            }\n\n            fun PatchBundleInfo.Scoped.hasDefaultPatches() =\n                patchSequence(allowIncompatiblePatches).any { it.include }\n\n            // Don't show the warning if there are no default patches.\n            selectionWarningEnabled = bundlesFlow.first().any(PatchBundleInfo.Scoped::hasDefaultPatches)\n        }\n    }\n\n    private var hasModifiedSelection = false\n    var customPatchSelection: PersistentPatchSelection? by savedStateHandle.saveable(\n        key = \"selection\",\n        stateSaver = selectionSaver,\n    ) {\n        mutableStateOf(input.currentSelection?.toPersistentPatchSelection())\n    }\n\n    private val patchOptions: PersistentOptions by savedStateHandle.saveable(\n        saver = optionsSaver,\n    ) {\n        // Convert Options to PersistentOptions\n        input.options.mapValuesTo(mutableStateMapOf()) { (_, allPatches) ->\n            allPatches.mapValues { (_, options) -> options.toPersistentMap() }.toPersistentMap()\n        }\n    }\n\n    /**\n     * Active dialog or bottom sheet state. Only one can be shown at a time.\n     */\n    var activeDialog by mutableStateOf<DialogState?>(null)\n        private set\n\n    var filter by mutableIntStateOf(SHOW_UNIVERSAL)\n        private set\n\n    private val defaultPatchSelection = bundlesFlow.map { bundles ->\n        bundles.toPatchSelection(allowIncompatiblePatches) { _, patch -> patch.include }\n            .toPersistentPatchSelection()\n    }\n\n    val defaultSelectionCount = defaultPatchSelection.map { selection ->\n        selection.values.sumOf { it.size }\n    }\n\n    // This is for the required options screen.\n    private val requiredOptsPatchesDeferred = viewModelScope.async(start = CoroutineStart.LAZY) {\n        bundlesFlow.first().map { bundle ->\n            bundle to bundle.patchSequence(allowIncompatiblePatches).filter { patch ->\n                val opts by lazy {\n                    getOptions(bundle.uid, patch).orEmpty()\n                }\n                isSelected(\n                    bundle.uid,\n                    patch\n                ) && patch.options?.any { it.required && it.default == null && it.name !in opts } ?: false\n            }.toList()\n        }.filter { (_, patches) -> patches.isNotEmpty() }\n    }\n    val requiredOptsPatches = flow { emit(requiredOptsPatchesDeferred.await()) }\n\n    fun selectionIsValid(bundles: List<PatchBundleInfo.Scoped>) = !readOnly && bundles.any { bundle ->\n        bundle.patchSequence(allowIncompatiblePatches).any { patch ->\n            isSelected(bundle.uid, patch)\n        }\n    }\n\n    fun isSelected(bundle: Int, patch: PatchInfo) = customPatchSelection?.let { selection ->\n        selection[bundle]?.contains(patch.name) == true\n    } ?: patch.include\n\n    fun togglePatch(bundle: Int, patch: PatchInfo) = viewModelScope.launch {\n        hasModifiedSelection = true\n\n        val selection = customPatchSelection ?: defaultPatchSelection.first()\n        val newPatches = selection[bundle]?.let { patches ->\n            if (patch.name in patches)\n                patches.remove(patch.name)\n            else\n                patches.add(patch.name)\n        } ?: persistentSetOf(patch.name)\n\n        customPatchSelection = selection.put(bundle, newPatches)\n    }\n\n    fun reset() {\n        patchOptions.clear()\n        customPatchSelection = null\n        hasModifiedSelection = false\n        app.toast(app.getString(R.string.patch_selection_reset_toast))\n    }\n\n    fun getCustomSelection(): PatchSelection? {\n        // Convert persistent collections to standard hash collections because persistent collections are not parcelable.\n\n        return customPatchSelection?.mapValues { (_, v) -> v.toSet() }\n    }\n\n    fun getOptions(): Options {\n        // Convert the collection for the same reasons as in getCustomSelection()\n\n        return patchOptions.mapValues { (_, allPatches) -> allPatches.mapValues { (_, options) -> options.toMap() } }\n    }\n\n    fun getOptions(bundle: Int, patch: PatchInfo) = patchOptions[bundle]?.get(patch.name)\n\n    fun setOption(bundle: Int, patch: PatchInfo, name: String, value: Any?) {\n        // All patches\n        val patchesToOpts = patchOptions.getOrElse(bundle, ::persistentMapOf)\n        // The key-value options of an individual patch\n        val patchToOpts = patchesToOpts\n            .getOrElse(patch.name, ::persistentMapOf)\n            .put(name, value)\n\n        patchOptions[bundle] = patchesToOpts.put(patch.name, patchToOpts)\n    }\n\n    fun resetOptions(bundle: Int, patch: PatchInfo) {\n        app.toast(app.getString(R.string.patch_options_reset_toast))\n        patchOptions[bundle] = patchOptions[bundle]?.remove(patch.name) ?: return\n    }\n\n    fun dismissDialogs() {\n        activeDialog = null\n    }\n\n    fun openIncompatibleDialog(incompatiblePatch: PatchInfo) {\n        val versions = incompatiblePatch.compatiblePackages\n            ?.find { it.packageName == packageName }?.versions.orEmpty()\n        activeDialog = DialogState.IncompatiblePatch(versions)\n    }\n\n    fun openOptionsDialog(bundle: Int, patch: PatchInfo) {\n        activeDialog = DialogState.Options(bundle, patch)\n    }\n\n    fun showSelectionWarning() {\n        activeDialog = DialogState.SelectionWarning\n    }\n\n    fun showUniversalPatchWarning() {\n        activeDialog = DialogState.UniversalPatchWarning\n    }\n\n    fun showIncompatiblePatchesInfo() {\n        activeDialog = DialogState.IncompatiblePatchesInfo\n    }\n\n    fun toggleFlag(flag: Int) {\n        filter = filter xor flag\n    }\n\n    fun getBundleSelectionState(bundle: PatchBundleInfo.Scoped): Boolean? {\n        val patches = bundle.patchSequence(allowIncompatiblePatches).toList()\n        if (patches.isEmpty()) return false\n\n        val selectedCount = patches.count { isSelected(bundle.uid, it) }\n        return when (selectedCount) {\n            patches.size -> true\n            0 -> false\n            else -> null\n        }\n    }\n\n    private suspend fun currentSelection(): PersistentPatchSelection =\n        customPatchSelection ?: defaultPatchSelection.first()\n\n    private suspend fun updateSelection(\n        update: (PersistentPatchSelection) -> PersistentPatchSelection\n    ) {\n        hasModifiedSelection = true\n        customPatchSelection = update(currentSelection())\n    }\n\n    fun deselectAll(bundles: List<PatchBundleInfo.Scoped>, bundleUid: Int?) = viewModelScope.launch {\n        updateSelection { selection ->\n            bundles.fold(selection) { acc, bundle ->\n                if (bundleUid != null && bundle.uid != bundleUid) return@fold acc\n                acc.put(bundle.uid, persistentSetOf())\n            }\n        }\n    }\n\n    fun invertSelection(bundles: List<PatchBundleInfo.Scoped>, bundleUid: Int?) = viewModelScope.launch {\n        updateSelection { selection ->\n            bundles.fold(selection) { acc, bundle ->\n                if (bundleUid != null && bundle.uid != bundleUid) return@fold acc\n\n                val currentSelected = acc[bundle.uid] ?: persistentSetOf()\n                val inverted = bundle.patchSequence(allowIncompatiblePatches)\n                    .filter { it.name !in currentSelected }\n                    .map { it.name }\n                    .toPersistentSet()\n                acc.put(bundle.uid, inverted)\n            }\n        }\n    }\n\n    fun restoreDefaults(bundleUid: Int?) = viewModelScope.launch {\n        if (bundleUid == null) {\n            customPatchSelection = null\n            hasModifiedSelection = false\n            return@launch\n        }\n\n        val defaults = defaultPatchSelection.first()\n        updateSelection { selection ->\n            selection.put(bundleUid, defaults[bundleUid] ?: persistentSetOf())\n        }\n    }\n\n    fun deselectAllExcept(bundles: List<PatchBundleInfo.Scoped>, keepBundleUid: Int) = viewModelScope.launch {\n        updateSelection { selection ->\n            bundles.fold(selection) { acc, bundle ->\n                if (bundle.uid == keepBundleUid) return@fold acc\n                acc.put(bundle.uid, persistentSetOf())\n            }\n        }\n    }\n\n    companion object {\n        const val SHOW_INCOMPATIBLE = 1 // 2^0\n        const val SHOW_UNIVERSAL = 2 // 2^1\n\n        private val optionsSaver: Saver<PersistentOptions, Options> = snapshotStateMapSaver(\n            // Patch name -> Options\n            valueSaver = persistentMapSaver(\n                // Option key -> Option value\n                valueSaver = persistentMapSaver()\n            )\n        )\n\n        private val selectionSaver: Saver<PersistentPatchSelection?, Nullable<PatchSelection>> =\n            nullableSaver(persistentMapSaver(valueSaver = persistentSetSaver()))\n    }\n\n    sealed interface DialogState {\n        data class Options(val bundle: Int, val patch: PatchInfo) : DialogState\n        data class IncompatiblePatch(val compatibleVersions: Set<String>) : DialogState\n        data object IncompatiblePatchesInfo : DialogState\n        data object SelectionWarning : DialogState\n        data object UniversalPatchWarning : DialogState\n    }\n\n    private fun mergeSourcesWithBundleInfo(\n        sources: List<PatchBundleSource>,\n        scopedBundleInfoByUid: Map<Int, PatchBundleInfo.Scoped>\n    ) = sources.map { source ->\n        scopedBundleInfoByUid[source.uid] ?: source.emptyScopedBundleInfo()\n    }\n}\n\n// Versions of other types, but utilizing persistent/observable collection types.\nprivate typealias PersistentOptions = SnapshotStateMap<Int, PersistentMap<String, PersistentMap<String, Any?>>>\nprivate typealias PersistentPatchSelection = PersistentMap<Int, PersistentSet<String>>\n\nprivate fun PatchSelection.toPersistentPatchSelection(): PersistentPatchSelection =\n    mapValues { (_, v) -> v.toPersistentSet() }.toPersistentMap()\n\nprivate fun PatchBundleInfo.Global.asReadonlyScoped() = PatchBundleInfo.Scoped(\n    name = name,\n    version = version,\n    uid = uid,\n    patches = patches,\n    compatible = patches,\n    incompatible = emptyList(),\n    universal = emptyList()\n)\n\nprivate fun PatchBundleSource.emptyScopedBundleInfo() = PatchBundleInfo.Scoped(\n    name = name,\n    version = version,\n    uid = uid,\n    patches = emptyList(),\n    compatible = emptyList(),\n    incompatible = emptyList(),\n    universal = emptyList()\n)\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/SelectedAppInfoViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.app.Activity\nimport android.app.Application\nimport android.content.Intent\nimport android.content.pm.PackageInfo\nimport android.net.Uri\nimport android.os.Parcelable\nimport android.util.Log\nimport androidx.activity.result.ActivityResult\nimport androidx.annotation.StringRes\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.compose.runtime.snapshotFlow\nimport androidx.lifecycle.SavedStateHandle\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi\nimport androidx.lifecycle.viewmodel.compose.saveable\nimport app.revanced.manager.R\nimport app.revanced.manager.data.platform.Filesystem\nimport app.revanced.manager.data.room.apps.installed.InstallType\nimport app.revanced.manager.data.room.apps.installed.InstalledApp\nimport app.revanced.manager.domain.installer.RootInstaller\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.repository.DownloadedAppRepository\nimport app.revanced.manager.domain.repository.DownloaderRepository\nimport app.revanced.manager.domain.repository.InstalledAppRepository\nimport app.revanced.manager.domain.repository.PatchBundleRepository\nimport app.revanced.manager.domain.repository.PatchOptionsRepository\nimport app.revanced.manager.domain.repository.PatchSelectionRepository\nimport app.revanced.manager.network.downloader.LoadedDownloader\nimport app.revanced.manager.network.downloader.ParceledDownloaderData\nimport app.revanced.manager.patcher.patch.PatchBundleInfo\nimport app.revanced.manager.patcher.patch.PatchBundleInfo.Extensions.requiredOptionsSet\nimport app.revanced.manager.patcher.patch.PatchBundleInfo.Extensions.toPatchSelection\nimport app.revanced.manager.downloader.GetScope\nimport app.revanced.manager.downloader.DownloaderHostApi\nimport app.revanced.manager.downloader.Scope\nimport app.revanced.manager.downloader.UserInteractionException\nimport app.revanced.manager.ui.model.SelectedApp\nimport app.revanced.manager.ui.model.navigation.Patcher\nimport app.revanced.manager.ui.model.navigation.SelectedApplicationInfo\nimport app.revanced.manager.util.APK_MIMETYPE\nimport app.revanced.manager.util.Options\nimport app.revanced.manager.util.PM\nimport app.revanced.manager.util.PatchSelection\nimport app.revanced.manager.util.isSplitApk\nimport app.revanced.manager.util.simpleMessage\nimport app.revanced.manager.util.tag\nimport app.revanced.manager.util.toast\nimport java.nio.file.Files\nimport kotlinx.coroutines.CancellationException\nimport kotlinx.coroutines.CompletableDeferred\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.Job\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.channels.Channel\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.first\nimport kotlinx.coroutines.flow.receiveAsFlow\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\nimport kotlinx.parcelize.Parcelize\nimport org.koin.core.component.KoinComponent\nimport org.koin.core.component.get\n\n@OptIn(SavedStateHandleSaveableApi::class, DownloaderHostApi::class)\nclass SelectedAppInfoViewModel(\n    input: SelectedApplicationInfo.ViewModelParams\n) : ViewModel(), KoinComponent {\n    private val app: Application = get()\n    private val bundleRepository: PatchBundleRepository = get()\n    private val selectionRepository: PatchSelectionRepository = get()\n    private val optionsRepository: PatchOptionsRepository = get()\n    private val downloadedAppRepository: DownloadedAppRepository = get()\n    private val downloaderRepository: DownloaderRepository = get()\n    private val installedAppRepository: InstalledAppRepository = get()\n    private val rootInstaller: RootInstaller = get()\n    private val fs: Filesystem = get()\n    private val pm: PM = get()\n    private val savedStateHandle: SavedStateHandle = get()\n    val prefs: PreferencesManager = get()\n    val downloaders = downloaderRepository.loadedDownloadersFlow\n    val allDownloaders = downloaderRepository.downloaderSources\n    val packageName = input.app.packageName\n\n    private val persistConfiguration = input.patches == null\n\n    val hasRoot = rootInstaller.hasRootAccess()\n    var installedAppData: Pair<SelectedApp.Installed, InstalledApp?>? by mutableStateOf(null)\n        private set\n    var downloadedApps: List<SelectedApp.Local> by mutableStateOf(emptyList())\n        private set\n\n    private var _selectedApp by savedStateHandle.saveable {\n        mutableStateOf(input.app)\n    }\n\n    var selectedAppInfo: PackageInfo? by mutableStateOf(null)\n        private set\n\n    var selectedApp\n        get() = _selectedApp\n        set(value) {\n            _selectedApp = value\n            invalidateSelectedAppInfo()\n        }\n\n    val desiredVersion get() = selectedApp.version\n\n    init {\n        invalidateSelectedAppInfo()\n        viewModelScope.launch(Dispatchers.Main) {\n            val packageInfo = async(Dispatchers.IO) { pm.getPackageInfo(packageName) }\n            val installedAppDeferred =\n                async(Dispatchers.IO) { installedAppRepository.get(packageName) }\n            val downloadedAppsDeferred =\n                async(Dispatchers.IO) { downloadedAppRepository.getAllByPackage(packageName) }\n\n        installedAppData =\n            packageInfo.await()?.let {\n                    // Split APKs cannot be used as a patch source.\n                    if (it.isSplitApk()) return@let null\n                    SelectedApp.Installed(\n                        packageName,\n                        it.versionName!!\n                    ) to installedAppDeferred.await()\n                }\n\n            downloadedApps = downloadedAppsDeferred.await().mapNotNull {\n                val file = try {\n                    downloadedAppRepository.getApkFileForApp(it)\n                } catch (_: Exception) {\n                    return@mapNotNull null\n                }\n                SelectedApp.Local(it.packageName, it.version, file, false)\n            }\n\n            // Eagerly apply the resolved auto source so the app info screen\n            // (icon, label, version) is populated immediately without the user\n            // having to open and re-select the source selector.\n            if (selectedApp is SelectedApp.Search) {\n                val resolved = resolveAutoSource(selectedApp.version)\n                if (resolved !is SelectedApp.Search) {\n                    selectedApp = resolved\n                }\n            }\n        }\n    }\n\n    val bundleInfoFlow by derivedStateOf {\n        bundleRepository.scopedBundleInfoFlow(packageName, selectedApp.version)\n    }\n\n    var options: Options by savedStateHandle.saveable {\n        viewModelScope.launch {\n            if (!persistConfiguration) return@launch // TODO: save options for patched apps.\n            val bundlePatches = bundleInfoFlow.first()\n                .associate { it.uid to it.patches.associateBy { patch -> patch.name } }\n\n            options = withContext(Dispatchers.Default) {\n                optionsRepository.getOptions(packageName, bundlePatches)\n            }\n        }\n\n        mutableStateOf(emptyMap())\n    }\n        private set\n\n    private var selectionState: SelectionState by savedStateHandle.saveable {\n        if (input.patches != null)\n            return@saveable mutableStateOf(SelectionState.Customized(input.patches))\n\n        // Try to get the previous selection if customization is enabled.\n        viewModelScope.launch {\n            if (!prefs.disableSelectionWarning.get()) return@launch\n\n            val previous = selectionRepository.getSelection(packageName)\n            if (previous.values.sumOf { it.size } == 0) return@launch\n            selectionState = SelectionState.Customized(previous)\n        }\n\n        mutableStateOf(SelectionState.Default)\n    }\n\n    init {\n        viewModelScope.launch {\n            prefs.disableSelectionWarning.flow.collect { customizationAllowed ->\n                // When customization safeguard is enabled again, return to defaults immediately.\n                if (!customizationAllowed) {\n                    selectionState = SelectionState.Default\n                }\n            }\n        }\n    }\n\n    var showSourceSelector by mutableStateOf(false)\n        private set\n    private var downloaderAction: Pair<LoadedDownloader, Job>? by mutableStateOf(null)\n    val activeDownloader get() = downloaderAction?.first\n    private var launchedActivity by mutableStateOf<CompletableDeferred<ActivityResult>?>(null)\n    private val launchActivityChannel = Channel<Intent>()\n    val launchActivityFlow = launchActivityChannel.receiveAsFlow()\n    private val storageSelectionChannel = Channel<SelectedApp.Local>()\n    val storageSelectionFlow = storageSelectionChannel.receiveAsFlow()\n\n    private val sourceInputFile by savedStateHandle.saveable(key = \"sourceInputFile\") {\n        mutableStateOf(\n            java.io.File(\n                fs.uiTempDir,\n                \"selected_source.apk\"\n            ).also(java.io.File::delete)\n        )\n    }\n\n    val errorFlow = combine(allDownloaders, snapshotFlow { selectedApp }) { allDownloaders, app ->\n        when (app) {\n            is SelectedApp.Search if allDownloaders.isEmpty() -> Error.NoDownloadersInstalled\n            else -> null\n        }\n    }\n\n    fun showSourceSelector() {\n        dismissSourceSelector()\n        showSourceSelector = true\n    }\n\n    fun setTargetVersion(version: String?) {\n        val current = selectedApp\n        selectedApp = when (current) {\n            is SelectedApp.Search -> current.copy(version = version)\n            is SelectedApp.Download -> if (current.version == version) current else SelectedApp.Search(packageName, version)\n            is SelectedApp.Installed -> if (current.version == version) current else SelectedApp.Search(packageName, version)\n            is SelectedApp.Local -> if (current.version == version) current else SelectedApp.Search(packageName, version)\n        }\n    }\n\n    fun resolveAutoSource(requiredVersion: String?): SelectedApp {\n        installedAppData?.let { (installed, meta) ->\n            val matchesVersion = requiredVersion == null || installed.version == requiredVersion\n            val usable = when {\n                meta?.installType == InstallType.MOUNT && !hasRoot -> false\n                meta?.installType == InstallType.DEFAULT -> false\n                else -> true\n            }\n            if (matchesVersion && usable) return installed\n        }\n\n        downloadedApps.firstOrNull { app ->\n            requiredVersion == null || app.version == requiredVersion\n        }?.let { return it }\n\n        return SelectedApp.Search(packageName, requiredVersion)\n    }\n\n    fun handleStorageResult(uri: Uri) = viewModelScope.launch {\n        val selectedApp = withContext(Dispatchers.IO) { loadSelectedStorageFile(uri) }\n\n        if (selectedApp == null) {\n            app.toast(app.getString(R.string.failed_to_load_apk))\n            return@launch\n        }\n\n        if (selectedApp.packageName != packageName) {\n            app.toast(app.getString(R.string.wrong_app_loading))\n            return@launch\n        }\n\n        val pkgInfo = withContext(Dispatchers.IO) { pm.getPackageInfo(selectedApp.file) }\n        if (pkgInfo != null && pkgInfo.isSplitApk()) {\n            app.toast(app.getString(R.string.split_apk_not_supported))\n            return@launch\n        }\n\n        storageSelectionChannel.send(selectedApp)\n    }\n\n    private fun loadSelectedStorageFile(uri: Uri) =\n        app.contentResolver.getType(uri)?.takeIf { it == APK_MIMETYPE || it.startsWith(\"application/\") }\n            ?.let {\n                app.contentResolver.openInputStream(uri)?.use { stream ->\n                    with(sourceInputFile) {\n                        delete()\n                        Files.copy(stream, toPath())\n                        pm.getPackageInfo(this)?.let { info ->\n                            SelectedApp.Local(\n                                packageName = info.packageName,\n                                version = info.versionName!!,\n                                file = this,\n                                temporary = true\n                            )\n                        }\n                    }\n                }\n            }\n\n    private fun cancelDownloaderAction() {\n        downloaderAction?.second?.cancel()\n        downloaderAction = null\n    }\n\n    fun dismissSourceSelector() {\n        cancelDownloaderAction()\n        showSourceSelector = false\n    }\n\n    fun searchUsingDownloader(downloader: LoadedDownloader) {\n        cancelDownloaderAction()\n        downloaderAction = downloader to viewModelScope.launch {\n            try {\n                val scope = object : GetScope, Scope by downloader.scopeImpl {\n                    override suspend fun requestStartActivity(intent: Intent) =\n                        withContext(Dispatchers.Main) {\n                            if (launchedActivity != null) error(\"Previous activity has not finished\")\n                            try {\n                                val result = with(CompletableDeferred<ActivityResult>()) {\n                                    launchedActivity = this\n                                    launchActivityChannel.send(intent)\n                                    await()\n                                }\n                                when (result.resultCode) {\n                                    Activity.RESULT_OK -> result.data\n                                    Activity.RESULT_CANCELED -> throw UserInteractionException.Activity.Cancelled()\n                                    else -> throw UserInteractionException.Activity.NotCompleted(\n                                        result.resultCode,\n                                        result.data\n                                    )\n                                }\n                            } finally {\n                                launchedActivity = null\n                            }\n                        }\n                }\n\n                withContext(Dispatchers.IO) {\n                    downloader.impl.get(scope, packageName, desiredVersion)\n                }?.let { (data, version) ->\n                    if (desiredVersion != null && version != desiredVersion) {\n                        app.toast(app.getString(R.string.downloader_invalid_version))\n                        return@launch\n                    }\n                    selectedApp = SelectedApp.Download(\n                        packageName,\n                        version,\n                        ParceledDownloaderData(downloader, data)\n                    )\n                } ?: app.toast(app.getString(R.string.downloader_app_not_found))\n            } catch (e: UserInteractionException.Activity) {\n                app.toast(e.message!!)\n            } catch (e: CancellationException) {\n                throw e\n            } catch (e: Exception) {\n                app.toast(app.getString(R.string.downloader_error, e.simpleMessage()))\n                Log.e(tag, \"Downloader.get threw an exception\", e)\n            } finally {\n                downloaderAction = null\n                dismissSourceSelector()\n            }\n        }\n    }\n\n    fun handleDownloaderActivityResult(result: ActivityResult) {\n        launchedActivity?.complete(result)\n    }\n\n    private fun invalidateSelectedAppInfo() = viewModelScope.launch {\n        val info = when (val app = selectedApp) {\n            is SelectedApp.Local -> withContext(Dispatchers.IO) { pm.getPackageInfo(app.file) }\n            is SelectedApp.Installed -> withContext(Dispatchers.IO) { pm.getPackageInfo(app.packageName) }\n            else -> null\n        }\n\n        selectedAppInfo = info\n    }\n\n    fun getOptionsFiltered(bundles: List<PatchBundleInfo.Scoped>) = options.filtered(bundles)\n    suspend fun hasSetRequiredOptions(\n        patchSelection: PatchSelection,\n        allowIncompatible: Boolean\n    ) = bundleInfoFlow\n        .first()\n        .requiredOptionsSet(\n            allowIncompatible = allowIncompatible,\n            isSelected = { bundle, patch -> patch.name in patchSelection[bundle.uid]!! },\n            optionsForPatch = { bundle, patch -> options[bundle.uid]?.get(patch.name) },\n        )\n\n    suspend fun getPatcherParams(): Patcher.ViewModelParams {\n        val allowIncompatible = prefs.disablePatchVersionCompatCheck.get()\n        val bundles = bundleInfoFlow.first()\n        return Patcher.ViewModelParams(\n            selectedApp,\n            getPatches(bundles, allowIncompatible),\n            getOptionsFiltered(bundles)\n        )\n    }\n\n    fun getPatches(bundles: List<PatchBundleInfo.Scoped>, allowIncompatible: Boolean) =\n        selectionState.patches(bundles, allowIncompatible)\n\n    fun hasModifiedPatchSelection(\n        bundles: List<PatchBundleInfo.Scoped>,\n        allowIncompatible: Boolean\n    ): Boolean {\n        val selected = getPatches(bundles, allowIncompatible)\n        val defaults = bundles.toPatchSelection(allowIncompatible) { _, patch -> patch.include }\n        return selected != defaults\n    }\n\n    fun getCustomPatches(\n        bundles: List<PatchBundleInfo.Scoped>,\n        allowIncompatible: Boolean\n    ): PatchSelection? =\n        (selectionState as? SelectionState.Customized)?.patches(bundles, allowIncompatible)\n\n\n    fun updateConfiguration(\n        selection: PatchSelection?,\n        options: Options\n    ) = viewModelScope.launch {\n        selectionState = selection?.let(SelectionState::Customized) ?: SelectionState.Default\n\n        val filteredOptions = options.filtered(bundleInfoFlow.first())\n        this@SelectedAppInfoViewModel.options = filteredOptions\n\n        if (!persistConfiguration) return@launch\n        viewModelScope.launch(Dispatchers.Default) {\n            selection?.let { selectionRepository.updateSelection(packageName, it) }\n                ?: selectionRepository.resetSelectionForPackage(packageName)\n\n            optionsRepository.saveOptions(packageName, filteredOptions)\n        }\n    }\n\n    enum class Error(@param:StringRes val resourceId: Int) {\n        NoDownloadersInstalled(R.string.no_downloaders_installed),\n    }\n\n    private companion object {\n        /**\n         * Returns a copy with all nonexistent options removed.\n         */\n        private fun Options.filtered(bundles: List<PatchBundleInfo.Scoped>): Options =\n            buildMap options@{\n                bundles.forEach bundles@{ bundle ->\n                    val bundleOptions = this@filtered[bundle.uid] ?: return@bundles\n\n                    val patches = bundle.patches.associateBy { it.name }\n\n                    this@options[bundle.uid] = buildMap bundleOptions@{\n                        bundleOptions.forEach patch@{ (patchName, values) ->\n                            // Get all valid option keys for the patch.\n                            val validOptionKeys =\n                                patches[patchName]?.options?.map { it.name }?.toSet() ?: return@patch\n\n                            this@bundleOptions[patchName] = values.filterKeys { key ->\n                                key in validOptionKeys\n                            }\n                        }\n                    }\n                }\n            }\n    }\n}\n\nprivate sealed interface SelectionState : Parcelable {\n    fun patches(bundles: List<PatchBundleInfo.Scoped>, allowIncompatible: Boolean): PatchSelection\n\n    @Parcelize\n    data class Customized(val patchSelection: PatchSelection) : SelectionState {\n        override fun patches(bundles: List<PatchBundleInfo.Scoped>, allowIncompatible: Boolean) =\n            bundles.toPatchSelection(\n                allowIncompatible\n            ) { uid, patch ->\n                patchSelection[uid]?.contains(patch.name) ?: false\n            }\n    }\n\n    @Parcelize\n    data object Default : SelectionState {\n        override fun patches(bundles: List<PatchBundleInfo.Scoped>, allowIncompatible: Boolean) =\n            bundles.toPatchSelection(allowIncompatible) { _, patch -> patch.include }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/UpdateViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.app.Application\nimport android.net.Uri\nimport androidx.annotation.StringRes\nimport androidx.compose.runtime.derivedStateOf\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.mutableLongStateOf\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.setValue\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport app.revanced.manager.R\nimport app.revanced.manager.data.platform.Filesystem\nimport app.revanced.manager.data.platform.NetworkInfo\nimport app.revanced.manager.network.api.ReVancedAPI\nimport app.revanced.manager.network.dto.ReVancedAsset\nimport app.revanced.manager.network.service.HttpService\nimport app.revanced.manager.util.toast\nimport app.revanced.manager.util.uiSafe\nimport io.ktor.client.plugins.onDownload\nimport io.ktor.client.request.url\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\nimport org.koin.core.component.KoinComponent\nimport org.koin.core.component.get\nimport org.koin.core.component.inject\nimport ru.solrudev.ackpine.installer.InstallFailure\nimport ru.solrudev.ackpine.installer.PackageInstaller\nimport ru.solrudev.ackpine.installer.createSession\nimport ru.solrudev.ackpine.session.Session\nimport ru.solrudev.ackpine.session.await\nimport ru.solrudev.ackpine.session.parameters.Confirmation\n\nclass UpdateViewModel(\n    private val downloadOnScreenEntry: Boolean\n) : ViewModel(), KoinComponent {\n    private val app: Application by inject()\n    private val reVancedAPI: ReVancedAPI by inject()\n    private val http: HttpService by inject()\n    private val networkInfo: NetworkInfo by inject()\n    private val fs: Filesystem by inject()\n    private val ackpineInstaller: PackageInstaller = get()\n\n    // TODO: save state to handle process death.\n    var downloadedSize by mutableLongStateOf(0L)\n        private set\n    var totalSize by mutableLongStateOf(0L)\n        private set\n    val downloadProgress by derivedStateOf {\n        if (downloadedSize == 0L || totalSize == 0L) return@derivedStateOf 0f\n\n        downloadedSize.toFloat() / totalSize.toFloat()\n    }\n    var showInternetCheckDialog by mutableStateOf(false)\n    var state by mutableStateOf(State.CAN_DOWNLOAD)\n        private set\n\n    var installError by mutableStateOf(\"\")\n\n    var releaseInfo: ReVancedAsset? by mutableStateOf(null)\n        private set\n\n    private val location = fs.tempDir.resolve(\"updater.apk\")\n\n    init {\n        viewModelScope.launch {\n            uiSafe(app, R.string.download_manager_failed, \"Failed to download ReVanced Manager\") {\n                releaseInfo = reVancedAPI.getAppUpdate() ?: throw Exception(\"No update available\")\n\n                if (downloadOnScreenEntry) {\n                    downloadUpdate()\n                } else {\n                    state = State.CAN_DOWNLOAD\n                }\n            }\n        }\n    }\n\n    fun downloadUpdate(ignoreInternetCheck: Boolean = false) = viewModelScope.launch {\n        uiSafe(app, R.string.failed_to_download_update, \"Failed to download update\") {\n            val release = releaseInfo!!\n            withContext(Dispatchers.IO) {\n                if (!networkInfo.isSafe(false) && !ignoreInternetCheck) {\n                    showInternetCheckDialog = true\n                } else {\n                    state = State.DOWNLOADING\n\n                    http.download(location) {\n                        url(release.downloadUrl)\n                        onDownload { bytesSentTotal, contentLength ->\n                            withContext(Dispatchers.Main) {\n                                downloadedSize = bytesSentTotal\n                                contentLength?.let { totalSize = it }\n                            }\n                        }\n                    }\n                    installUpdate()\n                }\n            }\n        }\n    }\n\n    fun installUpdate() = viewModelScope.launch {\n        state = State.INSTALLING\n        val result = withContext(Dispatchers.IO) {\n            ackpineInstaller.createSession(Uri.fromFile(location)) {\n                confirmation = Confirmation.IMMEDIATE\n            }.await()\n        }\n\n        when (result) {\n            is Session.State.Failed<InstallFailure> -> when (val failure = result.failure) {\n                is InstallFailure.Aborted -> state = State.CAN_INSTALL\n                else -> {\n                    val msg = failure.message.orEmpty()\n                    app.toast(app.getString(R.string.install_app_fail, msg))\n                    installError = msg\n                    state = State.FAILED\n                }\n            }\n\n            Session.State.Succeeded -> {\n                app.toast(app.getString(R.string.install_app_success))\n                state = State.SUCCESS\n            }\n        }\n    }\n\n    override fun onCleared() {\n        super.onCleared()\n        location.delete()\n    }\n\n    enum class State(@param:StringRes val title: Int) {\n        CAN_DOWNLOAD(R.string.update_available),\n        DOWNLOADING(R.string.downloading_manager_update),\n        CAN_INSTALL(R.string.ready_to_install_update),\n        INSTALLING(R.string.installing_manager_update),\n        FAILED(R.string.install_update_manager_failed),\n        SUCCESS(R.string.update_completed)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/ui/viewmodel/UpdatesSettingsViewModel.kt",
    "content": "package app.revanced.manager.ui.viewmodel\n\nimport android.app.Application\nimport androidx.lifecycle.ViewModel\nimport app.revanced.manager.R\nimport app.revanced.manager.data.platform.NetworkInfo\nimport app.revanced.manager.domain.manager.PreferencesManager\nimport app.revanced.manager.domain.repository.ManagerUpdateRepository\nimport app.revanced.manager.util.toast\nimport app.revanced.manager.util.uiSafe\n\nclass UpdatesSettingsViewModel(\n    prefs: PreferencesManager,\n    private val app: Application,\n    private val managerUpdateRepository: ManagerUpdateRepository,\n    private val network: NetworkInfo,\n) : ViewModel() {\n    val managerAutoUpdates = prefs.managerAutoUpdates\n    val showManagerUpdateDialogOnLaunch = prefs.showManagerUpdateDialogOnLaunch\n    val useManagerPrereleases = prefs.useManagerPrereleases\n    val availableManagerUpdate = managerUpdateRepository.availableVersion\n\n    val isConnected: Boolean\n        get() = network.isConnected()\n\n    suspend fun checkForUpdates(): String? {\n        var availableVersion: String? = null\n\n        uiSafe(app, R.string.failed_to_check_updates, \"Failed to check for updates\") {\n            availableVersion = managerUpdateRepository.refreshAvailableVersion()\n\n            if (availableVersion == null)\n                app.toast(app.getString(R.string.no_update_available))\n        }\n\n        return availableVersion\n    }\n\n    fun clearAvailableManagerUpdate() {\n        managerUpdateRepository.clearAvailableVersion()\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/util/Ackpine.kt",
    "content": "package app.revanced.manager.util\n\nimport android.annotation.SuppressLint\nimport android.content.pm.PackageInstaller\nimport ru.solrudev.ackpine.installer.InstallFailure\nimport ru.solrudev.ackpine.uninstaller.UninstallFailure\n\n/**\n * Converts an Ackpine installation failure into a PM status code\n */\nfun InstallFailure.asCode() = when (this) {\n    is InstallFailure.Aborted -> PackageInstaller.STATUS_FAILURE_ABORTED\n    is InstallFailure.Blocked -> PackageInstaller.STATUS_FAILURE_BLOCKED\n    is InstallFailure.Conflict -> PackageInstaller.STATUS_FAILURE_CONFLICT\n    is InstallFailure.Incompatible -> PackageInstaller.STATUS_FAILURE_INCOMPATIBLE\n    is InstallFailure.Invalid -> PackageInstaller.STATUS_FAILURE_INVALID\n    is InstallFailure.Storage -> PackageInstaller.STATUS_FAILURE_STORAGE\n    is InstallFailure.Timeout -> @SuppressLint(\"InlinedApi\") PackageInstaller.STATUS_FAILURE_TIMEOUT\n    else -> PackageInstaller.STATUS_FAILURE\n}\n\n/**\n * Converts an Ackpine uninstallation failure into a PM status code\n */\nfun UninstallFailure.asCode() = when (this) {\n    is UninstallFailure.Aborted -> PackageInstaller.STATUS_FAILURE_ABORTED\n    is UninstallFailure.Blocked -> PackageInstaller.STATUS_FAILURE_BLOCKED\n    is UninstallFailure.Conflict -> PackageInstaller.STATUS_FAILURE_CONFLICT\n    else -> PackageInstaller.STATUS_FAILURE\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/util/Constants.kt",
    "content": "package app.revanced.manager.util\n\nconst val tag = \"ReVanced Manager\"\n\nconst val JAR_MIMETYPE = \"application/java-archive\"\nconst val APK_MIMETYPE = \"application/vnd.android.package-archive\"\nconst val JSON_MIMETYPE = \"application/json\"\nconst val BIN_MIMETYPE = \"application/octet-stream\""
  },
  {
    "path": "app/src/main/java/app/revanced/manager/util/PM.kt",
    "content": "package app.revanced.manager.util\n\nimport android.annotation.SuppressLint\nimport android.app.Application\nimport android.content.Intent\nimport android.content.pm.PackageInfo\nimport android.content.pm.PackageManager\nimport android.content.pm.PackageManager.PackageInfoFlags\nimport android.content.pm.PackageManager.NameNotFoundException\nimport androidx.core.content.pm.PackageInfoCompat\nimport android.content.pm.Signature\nimport android.os.Build\nimport android.os.Parcelable\nimport androidx.compose.runtime.Immutable\nimport app.revanced.manager.domain.repository.PatchBundleRepository\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.flow.flowOn\nimport kotlinx.coroutines.flow.map\nimport kotlinx.coroutines.withContext\nimport kotlinx.parcelize.Parcelize\nimport ru.solrudev.ackpine.session.await\nimport ru.solrudev.ackpine.session.parameters.Confirmation\nimport ru.solrudev.ackpine.uninstaller.PackageUninstaller\nimport ru.solrudev.ackpine.uninstaller.createSession\nimport ru.solrudev.ackpine.uninstaller.parameters.UninstallParametersDsl\nimport java.io.File\n\n@Immutable\n@Parcelize\ndata class AppInfo(\n    val packageName: String,\n    val patches: Int?,\n    val packageInfo: PackageInfo?\n) : Parcelable\n\n@SuppressLint(\"QueryPermissionsNeeded\")\nclass PM(\n    private val app: Application,\n    patchBundleRepository: PatchBundleRepository,\n    private val uninstaller: PackageUninstaller\n) {\n    private val scope = CoroutineScope(Dispatchers.IO)\n\n    val appList = patchBundleRepository.bundleInfoFlow.map { bundles ->\n        val compatibleApps = scope.async {\n            val compatiblePackages = bundles\n                .flatMap { (_, bundle) -> bundle.patches }\n                .flatMap { it.compatiblePackages.orEmpty() }\n                .groupingBy { it.packageName }\n                .eachCount()\n\n            compatiblePackages.keys.map { pkg ->\n                getPackageInfo(pkg)?.let { packageInfo ->\n                    AppInfo(\n                        pkg,\n                        compatiblePackages[pkg],\n                        packageInfo\n                    )\n                } ?: AppInfo(\n                    pkg,\n                    compatiblePackages[pkg],\n                    null\n                )\n            }\n        }\n\n        val installedApps = scope.async {\n            getInstalledPackages().map { packageInfo ->\n                AppInfo(\n                    packageInfo.packageName,\n                    0,\n                    packageInfo\n                )\n            }\n        }\n\n        if (compatibleApps.await().isNotEmpty()) {\n            (compatibleApps.await() + installedApps.await())\n                .distinctBy { it.packageName }\n                .sortedWith(\n                    compareByDescending<AppInfo> {\n                        it.packageInfo != null && (it.patches ?: 0) > 0\n                    }.thenByDescending {\n                        it.patches\n                    }.thenBy {\n                        it.packageInfo?.label()\n                    }.thenBy { it.packageName }\n                )\n        } else {\n            emptyList()\n        }\n    }.flowOn(Dispatchers.IO)\n\n    private fun getInstalledPackages(flags: Int = 0): List<PackageInfo> =\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)\n            app.packageManager.getInstalledPackages(PackageInfoFlags.of(flags.toLong()))\n        else\n            app.packageManager.getInstalledPackages(flags)\n\n    fun getPackagesWithFeature(feature: String) =\n        getInstalledPackages(PackageManager.GET_CONFIGURATIONS)\n            .filter { pkg ->\n                pkg.reqFeatures?.any { it.name == feature } ?: false\n            }\n\n    fun getPackageInfo(packageName: String, flags: Int = 0): PackageInfo? =\n        try {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)\n                app.packageManager.getPackageInfo(packageName, PackageInfoFlags.of(flags.toLong()))\n            else\n                app.packageManager.getPackageInfo(packageName, flags)\n        } catch (_: NameNotFoundException) {\n            null\n        }\n\n    fun getPackageInfo(file: File): PackageInfo? {\n        val path = file.absolutePath\n        val pkgInfo = app.packageManager.getPackageArchiveInfo(path, 0) ?: return null\n\n        // This is needed in order to load label and icon.\n        pkgInfo.applicationInfo!!.apply {\n            sourceDir = path\n            publicSourceDir = path\n        }\n\n        return pkgInfo\n    }\n\n    @SuppressLint(\"InlinedApi\")\n    fun getApkSignature(file: File): Signature? {\n        val path = file.absolutePath\n        val pkgInfo = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)\n            app.packageManager.getPackageArchiveInfo(\n                path,\n                PackageInfoFlags.of(PackageManager.GET_SIGNING_CERTIFICATES.toLong())\n            )\n        else\n            app.packageManager.getPackageArchiveInfo(\n                path,\n                PackageManager.GET_SIGNING_CERTIFICATES\n            )\n\n        return pkgInfo?.signingInfo?.let { signingInfo ->\n            if (signingInfo.hasMultipleSigners()) {\n                val managerSignature = getManagerSignature()\n                signingInfo.apkContentsSigners.firstOrNull { it == managerSignature }\n                    ?: signingInfo.apkContentsSigners.lastOrNull()\n            } else {\n                signingInfo.signingCertificateHistory.lastOrNull()\n            }\n        }\n    }\n\n    fun getManagerSignature(): Signature = getSignature(app.packageName)\n\n    fun PackageInfo.label() = this.applicationInfo!!.loadLabel(app.packageManager).toString()\n\n    fun getVersionCode(packageInfo: PackageInfo) = PackageInfoCompat.getLongVersionCode(packageInfo)\n\n    fun getSignature(packageName: String): Signature =\n        // Get the last signature from the list because we want the newest one if SigningInfo.getSigningCertificateHistory() was used.\n        PackageInfoCompat.getSignatures(app.packageManager, packageName).last()\n\n    @SuppressLint(\"InlinedApi\")\n    fun hasSignature(packageName: String, signature: ByteArray) = PackageInfoCompat.hasSignatures(\n        app.packageManager,\n        packageName,\n        mapOf(signature to PackageManager.CERT_INPUT_RAW_X509),\n        false\n    )\n\n    suspend fun uninstallPackage(pkg: String, config: UninstallParametersDsl.() -> Unit = {}) = withContext(Dispatchers.IO) {\n        uninstaller.createSession(pkg) {\n            confirmation = Confirmation.IMMEDIATE\n            config()\n        }.await()\n    }\n\n    fun launch(pkg: String) = app.packageManager.getLaunchIntentForPackage(pkg)?.let {\n        it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)\n        app.startActivity(it)\n    }\n\n    fun canInstallPackages() = app.packageManager.canRequestPackageInstalls()\n}\n\n/**\n * Returns true if this package is a split APK (i.e. has multiple split source dirs).\n * Split APKs cannot be used directly as a patch source.\n */\nfun PackageInfo.isSplitApk(): Boolean =\n    !applicationInfo?.splitSourceDirs.isNullOrEmpty() || !splitNames.isNullOrEmpty()\n\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/util/RequestInstallAppsContract.kt",
    "content": "package app.revanced.manager.util\n\nimport android.content.Context\nimport android.content.Intent\nimport android.net.Uri\nimport android.provider.Settings\nimport androidx.activity.result.contract.ActivityResultContract\nimport org.koin.core.component.KoinComponent\nimport org.koin.core.component.inject\n\nobject RequestInstallAppsContract : ActivityResultContract<String, Boolean>(), KoinComponent {\n    private val pm: PM by inject()\n    override fun createIntent(context: Context, input: String) = Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, Uri.fromParts(\"package\", input, null))\n\n    override fun parseResult(resultCode: Int, intent: Intent?): Boolean {\n        return pm.canInstallPackages()\n    }\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/util/RequestManageStorageContract.kt",
    "content": "package app.revanced.manager.util\n\nimport android.content.Context\nimport android.content.Intent\nimport android.net.Uri\nimport android.os.Build\nimport android.os.Environment\nimport android.provider.Settings\nimport androidx.activity.result.contract.ActivityResultContract\nimport androidx.annotation.RequiresApi\n\n@RequiresApi(Build.VERSION_CODES.R)\nclass RequestManageStorageContract(private val forceLaunch: Boolean = false) : ActivityResultContract<String, Boolean>() {\n    override fun createIntent(context: Context, input: String) = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, Uri.fromParts(\"package\", context.packageName, null))\n\n    override fun getSynchronousResult(context: Context, input: String): SynchronousResult<Boolean>? = if (!forceLaunch && Environment.isExternalStorageManager()) SynchronousResult(true) else null\n\n    override fun parseResult(resultCode: Int, intent: Intent?) = Environment.isExternalStorageManager()\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/util/SnapshotStateSet.kt",
    "content": "package app.revanced.manager.util\n\n/*\n * Copyright 2022 The Android Open Source Project\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 *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Source: https://gist.github.com/alexvanyo/a31826820ded6f654fb96291aff6b425\n\nimport androidx.compose.runtime.Stable\nimport androidx.compose.runtime.mutableStateMapOf\nimport androidx.compose.runtime.snapshots.SnapshotStateMap\nimport androidx.compose.runtime.snapshots.StateObject\n\n/**\n * An implementation of [MutableSet] that can be observed and snapshot. This is the result type\n * created by [mutableStateSetOf].\n *\n * This class closely implements the same semantics as [HashSet].\n *\n * This class is backed by a [SnapshotStateMap].\n *\n * @see mutableStateSetOf\n */\n@Stable\nclass SnapshotStateSet<T> private constructor(\n    private val delegateSnapshotStateMap: SnapshotStateMap<T, Unit>,\n) : MutableSet<T> by delegateSnapshotStateMap.keys, StateObject by delegateSnapshotStateMap {\n    constructor() : this(delegateSnapshotStateMap = mutableStateMapOf())\n\n    override fun add(element: T): Boolean =\n        delegateSnapshotStateMap.put(element, Unit) == null\n\n    override fun addAll(elements: Collection<T>): Boolean =\n        elements.map(::add).any()\n\n    override fun remove(element: T) = delegateSnapshotStateMap.remove(element) != null\n}\n\n/**\n * Create a instance of [MutableSet]<T> that is observable and can be snapshot.\n */\nfun <T> mutableStateSetOf() = SnapshotStateSet<T>()\n\n/**\n * Create an instance of [MutableSet]<T> from a collection that is observable and can be\n * snapshot.\n */\nfun <T> Collection<T>.toMutableStateSet() = SnapshotStateSet<T>().also { it.addAll(this) }"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/util/SupportedLocales.kt",
    "content": "package app.revanced.manager.util\n\nimport android.app.LocaleConfig\nimport android.content.Context\nimport android.os.Build\nimport android.os.LocaleList\nimport androidx.appcompat.app.AppCompatDelegate\nimport androidx.core.os.LocaleListCompat\nimport app.revanced.manager.BuildConfig\nimport java.util.Locale\n\nobject SupportedLocales {\n    fun getSupportedLocales(context: Context): List<Locale> {\n        var result: List<Locale>? = null\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) result = runCatching {\n            LocaleConfig(context).supportedLocales?.toList()\n        }.getOrNull()\n\n        return result ?: generated\n    }\n\n    fun getCurrentLocale(): Locale? =\n        AppCompatDelegate.getApplicationLocales().takeIf { !it.isEmpty }?.get(0)\n\n    fun setLocale(locale: Locale?) = AppCompatDelegate.setApplicationLocales(\n        locale?.let { LocaleListCompat.create(it) } ?: LocaleListCompat.getEmptyLocaleList()\n    )\n\n    fun getDisplayName(locale: Locale) =\n        locale.getDisplayName(locale).replaceFirstChar { it.uppercase(locale) }\n\n    private fun LocaleList.toList() = (0 until size()).map { get(it) }\n\n    private val generated by lazy {\n        listOf(\n            Locale.ENGLISH,\n            *BuildConfig.SUPPORTED_LOCALES.map(Locale::forLanguageTag).toTypedArray()\n        )\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/util/Util.kt",
    "content": "@file:Suppress(\"DEPRECATION\")\n\npackage app.revanced.manager.util\n\nimport android.content.Context\nimport android.content.Intent\nimport android.content.pm.ApplicationInfo\nimport android.graphics.Bitmap\nimport android.os.Build\nimport android.renderscript.Allocation\nimport android.renderscript.Element\nimport android.renderscript.RenderScript\nimport android.renderscript.ScriptIntrinsicBlur\nimport android.util.Log\nimport android.widget.Toast\nimport androidx.annotation.FloatRange\nimport androidx.annotation.MainThread\nimport androidx.annotation.StringRes\nimport androidx.compose.foundation.ScrollState\nimport androidx.compose.foundation.lazy.LazyListState\nimport androidx.compose.material3.ListItemColors\nimport androidx.compose.material3.ListItemDefaults\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.ReadOnlyComposable\nimport androidx.compose.runtime.LaunchedEffect\nimport androidx.compose.runtime.State\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.produceState\nimport androidx.compose.runtime.rememberUpdatedState\nimport androidx.compose.runtime.snapshotFlow\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.draw.alpha\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.platform.LocalView\nimport androidx.core.graphics.scale\nimport androidx.core.net.toUri\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.LifecycleOwner\nimport androidx.lifecycle.compose.LocalLifecycleOwner\nimport androidx.lifecycle.SavedStateHandle\nimport androidx.lifecycle.lifecycleScope\nimport androidx.lifecycle.repeatOnLifecycle\nimport androidx.navigation.NavBackStackEntry\nimport androidx.navigation.NavGraphBuilder\nimport androidx.navigation.compose.composable\nimport androidx.navigation.navDeepLink\nimport app.revanced.manager.BuildConfig\nimport app.revanced.manager.R\nimport kotlinx.coroutines.CancellationException\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.DelicateCoroutinesApi\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.ExperimentalCoroutinesApi\nimport kotlinx.coroutines.GlobalScope\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.combine\nimport kotlinx.coroutines.flow.flatMapLatest\nimport kotlinx.coroutines.launch\nimport kotlinx.datetime.LocalDateTime\nimport kotlinx.datetime.TimeZone\nimport kotlinx.datetime.format.MonthNames\nimport kotlinx.datetime.format.char\nimport kotlinx.datetime.toInstant\nimport kotlinx.datetime.toLocalDateTime\nimport java.util.Locale\nimport kotlin.math.abs\nimport kotlin.properties.PropertyDelegateProvider\nimport kotlin.properties.ReadWriteProperty\nimport kotlin.reflect.KProperty\nimport kotlin.time.Clock\n\ntypealias PatchSelection = Map<Int, Set<String>>\ntypealias Options = Map<Int, Map<String, Map<String, Any?>>>\n\nval Context.isDebuggable get() = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE\n\nfun Context.openUrl(url: String) {\n    startActivity(Intent(Intent.ACTION_VIEW, url.toUri()).apply {\n        flags = Intent.FLAG_ACTIVITY_NEW_TASK\n    })\n}\n\nfun Context.toast(string: String, duration: Int = Toast.LENGTH_SHORT) {\n    Toast.makeText(this, string, duration).show()\n}\n\nfun Context.toast(@StringRes stringRes: Int, duration: Int = Toast.LENGTH_SHORT) {\n    Toast.makeText(this, getString(stringRes), duration).show()\n}\n\n/**\n * Safely perform an operation that may fail to avoid crashing the app.\n * If [block] fails, the error will be logged and a toast will be shown to the user to inform them that the action failed.\n *\n * @param context The android [Context].\n * @param toastMsg The toast message to show if [block] throws.\n * @param logMsg The log message.\n * @param block The code to execute.\n */\n@OptIn(DelicateCoroutinesApi::class)\ninline fun uiSafe(context: Context, @StringRes toastMsg: Int, logMsg: String, block: () -> Unit) {\n    try {\n        block()\n    } catch (e: CancellationException) {\n        throw e\n    } catch (error: Exception) {\n        // You can only toast on the main thread.\n        GlobalScope.launch(Dispatchers.Main) {\n            context.toast(\n                context.getString(\n                    toastMsg,\n                    error.simpleMessage()\n                )\n            )\n        }\n\n        Log.e(tag, logMsg, error)\n    }\n}\n\nfun Throwable.simpleMessage() = this.message ?: this.cause?.message ?: this::class.simpleName\n\ninline fun LifecycleOwner.launchAndRepeatWithViewLifecycle(\n    minActiveState: Lifecycle.State = Lifecycle.State.STARTED,\n    crossinline block: suspend CoroutineScope.() -> Unit\n) {\n    lifecycleScope.launch {\n        lifecycle.repeatOnLifecycle(minActiveState) {\n            block()\n        }\n    }\n}\n\n/**\n * Run [transformer] on the [Iterable] and then [combine] the result using [combiner].\n * This is used to transform collections that contain [Flow]s into something that is easier to work with.\n */\n@OptIn(ExperimentalCoroutinesApi::class)\ninline fun <T, reified R, C> Flow<Iterable<T>>.flatMapLatestAndCombine(\n    crossinline combiner: suspend (Array<R>) -> C,\n    crossinline transformer: suspend (T) -> Flow<R>,\n): Flow<C> = flatMapLatest { iterable ->\n    combine(iterable.map { transformer(it) }) {\n        combiner(it)\n    }\n}\n\nval Color.hexCode: String\n    inline get() {\n        val a: Int = (alpha * 255).toInt()\n        val r: Int = (red * 255).toInt()\n        val g: Int = (green * 255).toInt()\n        val b: Int = (blue * 255).toInt()\n        return java.lang.String.format(Locale.getDefault(), \"%02X%02X%02X%02X\", r, g, b, a)\n    }\n\nsuspend fun <T> Flow<Iterable<T>>.collectEach(block: suspend (T) -> Unit) {\n    this.collect { iterable ->\n        iterable.forEach {\n            block(it)\n        }\n    }\n}\n\nfun LocalDateTime.relativeTime(context: Context): String {\n    try {\n        val now = Clock.System.now()\n        val duration = now - this.toInstant(TimeZone.UTC)\n\n        return when {\n            duration.inWholeMinutes < 1 -> context.getString(R.string.just_now)\n            duration.inWholeMinutes < 60 -> context.getString(\n                R.string.minutes_ago,\n                duration.inWholeMinutes.toString()\n            )\n\n            duration.inWholeHours < 24 -> context.getString(\n                R.string.hours_ago,\n                duration.inWholeHours.toString()\n            )\n            duration.inWholeDays < 30 -> context.getString(\n                R.string.days_ago,\n                duration.inWholeDays.toString()\n            )\n\n            else -> LocalDateTime.Format {\n                monthName(MonthNames.ENGLISH_ABBREVIATED)\n                char(' ')\n                day()\n                if (now.toLocalDateTime(TimeZone.UTC).year != this@relativeTime.year) {\n                    chars(\", \")\n                    year()\n                }\n            }.format(this)\n        }\n    } catch (e: IllegalArgumentException) {\n        return context.getString(R.string.invalid_date)\n    }\n}\n\nprivate var transparentListItemColorsCached: ListItemColors? = null\n\nfun resetListItemColorsCached() {\n    transparentListItemColorsCached = null\n}\n\n/**\n * The default ListItem colors, but with [ListItemColors.containerColor] set to [Color.Transparent].\n */\nval transparentListItemColors\n    @Composable get() = transparentListItemColorsCached\n        ?: ListItemDefaults.colors(containerColor = Color.Transparent)\n            .also { transparentListItemColorsCached = it }\n\n@Composable\nfun <T> EventEffect(\n    flow: Flow<T>,\n    vararg keys: Any?,\n    state: Lifecycle.State = Lifecycle.State.STARTED,\n    block: suspend (T) -> Unit\n) {\n    val lifecycleOwner = LocalLifecycleOwner.current\n    val currentBlock by rememberUpdatedState(block)\n\n    LaunchedEffect(flow, state, *keys) {\n        lifecycleOwner.repeatOnLifecycle(state) {\n            flow.collect {\n                currentBlock(it)\n            }\n        }\n    }\n}\n\nconst val isScrollingUpSensitivity = 10\n\n@Composable\nfun LazyListState.isScrollingUp() = produceState(true, this) {\n    var previousIndex = firstVisibleItemIndex\n    var previousScrollOffset = firstVisibleItemScrollOffset\n\n    snapshotFlow {\n        firstVisibleItemIndex to firstVisibleItemScrollOffset\n    }.collect { (index, scrollOffset) ->\n        val indexChanged = previousIndex != index\n        val offsetChanged = abs(previousScrollOffset - scrollOffset) > isScrollingUpSensitivity\n\n        value = when {\n            indexChanged -> previousIndex > index\n            offsetChanged -> previousScrollOffset > scrollOffset\n            else -> value\n        }\n        previousIndex = index\n        previousScrollOffset = scrollOffset\n    }\n}\n\n@Composable\nfun ScrollState.isScrollingUp() = produceState(true, this) {\n    var previousScrollOffset = this@isScrollingUp.value\n\n    snapshotFlow { this@isScrollingUp.value }.collect { scrollOffset ->\n        if (abs(previousScrollOffset - scrollOffset) > isScrollingUpSensitivity) {\n            value = previousScrollOffset >= scrollOffset\n        }\n\n        previousScrollOffset = scrollOffset\n    }\n}\n\nval LazyListState.isScrollingUp: Boolean @Composable get() = this.isScrollingUp().value\nval ScrollState.isScrollingUp: Boolean @Composable get() = this.isScrollingUp().value\n\n@Composable\n@ReadOnlyComposable\nfun <R> (() -> R).withHapticFeedback(constant: Int): () -> R {\n    val view = LocalView.current\n    return {\n        view.performHapticFeedback(constant)\n        this()\n    }\n}\n\n@Composable\n@ReadOnlyComposable\nfun <T, R> ((T) -> R).withHapticFeedback(constant: Int): (T) -> R {\n    val view = LocalView.current\n    return {\n        view.performHapticFeedback(constant)\n        this(it)\n    }\n}\n\nfun Modifier.enabled(condition: Boolean) = if (condition) this else alpha(0.5f)\n\n@MainThread\nfun <T : Any> SavedStateHandle.saveableVar(init: () -> T): PropertyDelegateProvider<Any?, ReadWriteProperty<Any?, T>> =\n    PropertyDelegateProvider { _: Any?, property ->\n        val name = property.name\n        if (name !in this) this[name] = init()\n        object : ReadWriteProperty<Any?, T> {\n            override fun getValue(thisRef: Any?, property: KProperty<*>): T = get(name)!!\n            override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) =\n                set(name, value)\n        }\n    }\n\nfun <T : Any> SavedStateHandle.saveableVar(): ReadWriteProperty<Any?, T?> =\n    object : ReadWriteProperty<Any?, T?> {\n        override fun getValue(thisRef: Any?, property: KProperty<*>): T? = get(property.name)\n        override fun setValue(thisRef: Any?, property: KProperty<*>, value: T?) =\n            set(property.name, value)\n    }\n\ninline fun <reified T : Any> NavGraphBuilder.deepLinkedComposable(\n    path: String,\n    noinline content: @Composable (NavBackStackEntry) -> Unit\n) {\n    val uri = \"${BuildConfig.DEEP_LINK_SCHEME}://${path.trim('/')}\"\n    composable<T>(\n        deepLinks = setOf(uri, \"$uri/\").map { navDeepLink<T>(basePath = it) }\n    ) {\n        content(it)\n    }\n}\n\nfun androidx.navigation.NavController.navigateSafe(route: Any) {\n    if (currentBackStackEntry?.lifecycle?.currentState == Lifecycle.State.RESUMED) {\n        navigate(route)\n    }\n}\n\nfun androidx.navigation.NavController.navigateSafe(\n    route: Any,\n    builder: androidx.navigation.NavOptionsBuilder.() -> Unit\n) {\n    if (currentBackStackEntry?.lifecycle?.currentState == Lifecycle.State.RESUMED) {\n        navigate(route, builder)\n    }\n}\n\nfun androidx.navigation.NavController.popBackStackSafe(): Boolean {\n    return if (currentBackStackEntry?.lifecycle?.currentState == Lifecycle.State.RESUMED) {\n        popBackStack()\n    } else {\n        false\n    }\n}\n\n// Renderscript is deprecated on new Android, but it works perfectly for what is needed\nfun blurBackground(\n    context: Context,\n    image: Bitmap,\n    @Suppress(\"SameParameterValue\")\n    @FloatRange(0.0, 25.0)\n    radius: Float,\n): Bitmap {\n    val rs = RenderScript.create(context)\n    val workingBitmap = image.scale(64, 64)\n\n    val input = Allocation.createFromBitmap(\n        rs,\n        workingBitmap,\n        Allocation.MipmapControl.MIPMAP_NONE,\n        Allocation.USAGE_SCRIPT,\n    )\n    val output = Allocation.createTyped(rs, input.type)\n\n    ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)).apply {\n        setRadius(radius)\n        setInput(input)\n        forEach(output)\n    }\n\n    output.copyTo(workingBitmap)\n    rs.destroy()\n\n    return workingBitmap\n}"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/util/saver/NullableSaver.kt",
    "content": "package app.revanced.manager.util.saver\n\nimport android.os.Parcelable\nimport androidx.compose.runtime.saveable.Saver\nimport kotlinx.parcelize.Parcelize\nimport kotlinx.parcelize.RawValue\n\n@Parcelize\nclass Nullable<T>(val inner: @RawValue T?) : Parcelable\n\n/**\n * Creates a saver that can save nullable versions of types that have custom savers.\n */\nfun <Original : Any, Saveable : Any> nullableSaver(baseSaver: Saver<Original, Saveable>): Saver<Original?, Nullable<Saveable>> =\n    Saver(\n        save = { value ->\n            with(baseSaver) {\n                save(value ?: return@Saver Nullable(null))\n            }?.let(::Nullable)\n        },\n        restore = {\n            it.inner?.let(baseSaver::restore)\n        }\n    )"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/util/saver/PathSaver.kt",
    "content": "package app.revanced.manager.util.saver\n\nimport androidx.compose.runtime.saveable.Saver\nimport java.nio.file.Path\nimport kotlin.io.path.Path\n\n/**\n * A [Saver] that can save [Path]s. Only works with the default filesystem.\n */\nval PathSaver = Saver<Path, String>(\n    save = { it.toString() },\n    restore = { Path(it) }\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/util/saver/PersistentCollectionSavers.kt",
    "content": "package app.revanced.manager.util.saver\n\nimport androidx.compose.runtime.saveable.Saver\nimport kotlinx.collections.immutable.*\n\n/**\n * Create a [Saver] for [PersistentList]s.\n */\nfun <T> persistentListSaver() = Saver<PersistentList<T>, List<T>>(\n    save = {\n        it.toList()\n    },\n    restore = {\n        it.toPersistentList()\n    }\n)\n\n/**\n * Create a [Saver] for [PersistentSet]s.\n */\nfun <T> persistentSetSaver() = Saver<PersistentSet<T>, Set<T>>(\n    save = {\n        it.toSet()\n    },\n    restore = {\n        it.toPersistentSet()\n    }\n)\n\n/**\n * Create a [Saver] for [PersistentMap]s.\n */\nfun <K, V> persistentMapSaver() = Saver<PersistentMap<K, V>, Map<K, V>>(\n    save = {\n        it.toMap()\n    },\n    restore = {\n        it.toPersistentMap()\n    }\n)\n\n/**\n * Create a saver for [PersistentMap]s with a custom [Saver] used for the values.\n * Null values will not be saved by this [Saver].\n *\n * @param valueSaver The [Saver] used for the values of the [Map].\n */\nfun <K, Original, Saveable : Any> persistentMapSaver(\n    valueSaver: Saver<Original, Saveable>\n) = Saver<PersistentMap<K, Original>, Map<K, Saveable>>(\n    save = {\n        buildMap {\n            it.forEach { (key, value) ->\n                with(valueSaver) {\n                    save(value)?.let {\n                        this@buildMap[key] = it\n                    }\n                }\n            }\n        }\n    },\n    restore = {\n        buildMap {\n            it.forEach { (key, value) ->\n                this[key] = valueSaver.restore(value) ?: return@forEach\n            }\n        }.toPersistentMap()\n    }\n)"
  },
  {
    "path": "app/src/main/java/app/revanced/manager/util/saver/SnapshotStateCollectionSavers.kt",
    "content": "package app.revanced.manager.util.saver\n\nimport androidx.compose.runtime.mutableStateMapOf\nimport androidx.compose.runtime.saveable.Saver\nimport androidx.compose.runtime.snapshots.SnapshotStateList\nimport androidx.compose.runtime.snapshots.SnapshotStateMap\nimport androidx.compose.runtime.toMutableStateList\nimport androidx.compose.runtime.toMutableStateMap\nimport app.revanced.manager.util.SnapshotStateSet\nimport app.revanced.manager.util.toMutableStateSet\n\n/**\n * Create a [Saver] for [SnapshotStateList]s.\n */\nfun <T> snapshotStateListSaver() = Saver<SnapshotStateList<T>, List<T>>(\n    save = {\n        it.toMutableList()\n    },\n    restore = {\n        it.toMutableStateList()\n    }\n)\n\n/**\n * Create a [Saver] for [SnapshotStateSet]s.\n */\nfun <T> snapshotStateSetSaver() = Saver<SnapshotStateSet<T>, Set<T>>(\n    save = {\n        it.toMutableSet()\n    },\n    restore = {\n        it.toMutableStateSet()\n    }\n)\n\n/**\n * Create a [Saver] for [SnapshotStateMap]s.\n */\nfun <K, V> snapshotStateMapSaver() = Saver<SnapshotStateMap<K, V>, Map<K, V>>(\n    save = {\n        it.toMutableMap()\n    },\n    restore = {\n        mutableStateMapOf<K, V>().apply {\n            this.putAll(it)\n        }\n    }\n)\n\n/**\n * Create a saver for [SnapshotStateMap]s with a custom [Saver] used for the values.\n * Null values will not be saved by this [Saver].\n *\n * @param valueSaver The [Saver] used for the values of the [Map].\n */\nfun <K, Original, Saveable : Any> snapshotStateMapSaver(\n    valueSaver: Saver<Original, Saveable>\n) = Saver<SnapshotStateMap<K, Original>, Map<K, Saveable>>(\n    save = {\n        buildMap {\n            it.forEach { (key, value) ->\n                with(valueSaver) {\n                    save(value)?.let {\n                        this@buildMap[key] = it\n                    }\n                }\n            }\n        }\n    },\n    restore = {\n        it.mapNotNull { (key, value) ->\n            valueSaver.restore(value)?.let { restored -> key to restored }\n        }.toMutableStateMap()\n    }\n)"
  },
  {
    "path": "app/src/main/res/drawable/ic_launcher_foreground.xml",
    "content": "<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"256\"\n    android:viewportHeight=\"256\">\n\n    <group\n        android:scaleX=\"0.24\"\n        android:scaleY=\"0.24\"\n        android:translateX=\"97.28\"\n        android:translateY=\"97.28\">\n\n        <path\n            android:fillColor=\"#FFFFFFFF\"\n            android:pathData=\"M250.09,13.49C251.39,10.51 251.11,7.08 249.33,4.36C247.55,1.64 244.52,0 241.27,0H228.81C226.08,0 223.61,1.62 222.51,4.11C211.54,29.1 153.63,160.99 134.29,205.04C133.2,207.54 130.73,209.15 128,209.15C125.27,209.15 122.8,207.54 121.7,205.04C102.36,160.99 44.46,29.1 33.49,4.11C32.39,1.62 29.92,0 27.19,0H14.73C11.48,0 8.45,1.64 6.67,4.36C4.89,7.08 4.61,10.51 5.91,13.49C26.64,60.8 95.56,218.1 109.63,250.24C111.17,253.74 114.63,256 118.45,256H137.55C141.37,256 144.83,253.74 146.36,250.24C160.44,218.1 229.36,60.8 250.09,13.49Z\"/>\n        <path\n            android:pathData=\"M135.14,123.87C133.67,126.43 130.94,128 128,128C125.05,128 122.33,126.43 120.85,123.87C105.89,97.97 71.44,38.28 56.48,12.37C55,9.82 55,6.68 56.48,4.12C57.95,1.57 60.68,0 63.62,0H192.37C195.32,0 198.04,1.57 199.52,4.12C200.99,6.68 200.99,9.82 199.52,12.37C184.56,38.28 150.1,97.97 135.14,123.87Z\">\n            <aapt:attr name=\"android:fillColor\">\n                <gradient\n                    android:startX=\"128\"\n                    android:startY=\"0\"\n                    android:endX=\"128\"\n                    android:endY=\"254.6\"\n                    android:type=\"linear\">\n                    <item\n                        android:offset=\"0\"\n                        android:color=\"#FFF04E98\"/>\n                    <item\n                        android:offset=\"0.5\"\n                        android:color=\"#FF5F65D4\"/>\n                    <item\n                        android:offset=\"1\"\n                        android:color=\"#FF4E98F0\"/>\n                </gradient>\n            </aapt:attr>\n        </path>\n    </group>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_launcher_monochrome.xml",
    "content": "<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"256\"\n    android:viewportHeight=\"256\">\n\n    <group\n        android:scaleX=\"0.3\"\n        android:scaleY=\"0.3\"\n        android:translateX=\"89.6\"\n        android:translateY=\"89.6\">\n\n        <path\n            android:fillColor=\"#FF000000\"\n            android:pathData=\"M250.09,13.49C251.39,10.51 251.11,7.08 249.33,4.36C247.55,1.64 244.52,0 241.27,0H228.81C226.08,0 223.61,1.62 222.51,4.11C211.54,29.1 153.63,160.99 134.29,205.04C133.2,207.54 130.73,209.15 128,209.15C125.27,209.15 122.8,207.54 121.7,205.04C102.36,160.99 44.46,29.1 33.49,4.11C32.39,1.62 29.92,0 27.19,0H14.73C11.48,0 8.45,1.64 6.67,4.36C4.89,7.08 4.61,10.51 5.91,13.49C26.64,60.8 95.56,218.1 109.63,250.24C111.17,253.74 114.63,256 118.45,256H137.55C141.37,256 144.83,253.74 146.36,250.24C160.44,218.1 229.36,60.8 250.09,13.49Z\"/>\n        <path\n            android:fillColor=\"#FF000000\"\n            android:pathData=\"M135.14,123.87C133.67,126.43 130.94,128 128,128C125.05,128 122.33,126.43 120.85,123.87C105.89,97.97 71.44,38.28 56.48,12.37C55,9.82 55,6.68 56.48,4.12C57.95,1.57 60.68,0 63.62,0H192.37C195.32,0 198.04,1.57 199.52,4.12C200.99,6.68 200.99,9.82 199.52,12.37C184.56,38.28 150.1,97.97 135.14,123.87Z\"/>\n    </group>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_launcher_splash_screen.xml",
    "content": "<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"256\"\n    android:viewportHeight=\"256\">\n\n    <group\n        android:scaleX=\"0.3\"\n        android:scaleY=\"0.3\"\n        android:translateX=\"89.6\"\n        android:translateY=\"89.6\">\n\n        <path\n            android:fillColor=\"?android:attr/textColorPrimary\"\n            android:pathData=\"M250.09,13.49C251.39,10.51 251.11,7.08 249.33,4.36C247.55,1.64 244.52,0 241.27,0H228.81C226.08,0 223.61,1.62 222.51,4.11C211.54,29.1 153.63,160.99 134.29,205.04C133.2,207.54 130.73,209.15 128,209.15C125.27,209.15 122.8,207.54 121.7,205.04C102.36,160.99 44.46,29.1 33.49,4.11C32.39,1.62 29.92,0 27.19,0H14.73C11.48,0 8.45,1.64 6.67,4.36C4.89,7.08 4.61,10.51 5.91,13.49C26.64,60.8 95.56,218.1 109.63,250.24C111.17,253.74 114.63,256 118.45,256H137.55C141.37,256 144.83,253.74 146.36,250.24C160.44,218.1 229.36,60.8 250.09,13.49Z\"/>\n        <path\n            android:pathData=\"M135.14,123.87C133.67,126.43 130.94,128 128,128C125.05,128 122.33,126.43 120.85,123.87C105.89,97.97 71.44,38.28 56.48,12.37C55,9.82 55,6.68 56.48,4.12C57.95,1.57 60.68,0 63.62,0H192.37C195.32,0 198.04,1.57 199.52,4.12C200.99,6.68 200.99,9.82 199.52,12.37C184.56,38.28 150.1,97.97 135.14,123.87Z\">\n            <aapt:attr name=\"android:fillColor\">\n                <gradient\n                    android:startX=\"128\"\n                    android:startY=\"0\"\n                    android:endX=\"128\"\n                    android:endY=\"254.6\"\n                    android:type=\"linear\">\n                    <item\n                        android:offset=\"0\"\n                        android:color=\"#FFF04E98\"/>\n                    <item\n                        android:offset=\"0.5\"\n                        android:color=\"#FF5F65D4\"/>\n                    <item\n                        android:offset=\"1\"\n                        android:color=\"#FF4E98F0\"/>\n                </gradient>\n            </aapt:attr>\n        </path>\n    </group>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_logo_ring.xml",
    "content": "<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    android:width=\"72dp\"\n    android:height=\"72dp\"\n    android:viewportWidth=\"800\"\n    android:viewportHeight=\"800\">\n\n    <path\n        android:fillColor=\"#FF1B1B1B\"\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M400,400m-400,0a400,400 0,1 1,800 0a400,400 0,1 1,-800 0\"\n        android:strokeLineJoin=\"round\"/>\n    <path\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M400,0c220.77,0 400,179.23 400,400s-179.23,400 -400,400 -400,-179.23 -400,-400 179.23,-400 400,-400zM400,36c200.9,0 364,163.1 364,364s-163.1,364 -364,364 -364,-163.1 -364,-364 163.1,-364 364,-364z\"\n        android:strokeLineJoin=\"round\">\n        <aapt:attr name=\"android:fillColor\">\n            <gradient\n                android:startX=\"400\"\n                android:startY=\"0\"\n                android:endX=\"400\"\n                android:endY=\"800\"\n                android:type=\"linear\">\n                <item\n                    android:offset=\"0\"\n                    android:color=\"#FFF04E98\"/>\n                <item\n                    android:offset=\"0.5\"\n                    android:color=\"#FF5F65D4\"/>\n                <item\n                    android:offset=\"1\"\n                    android:color=\"#FF4E98F0\"/>\n            </gradient>\n        </aapt:attr>\n    </path>\n    <path\n        android:fillColor=\"#FFFFFFFF\"\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M538.74,269.87c1.48,-3.38 1.16,-7.28 -0.86,-10.37 -2.02,-3.09 -5.46,-4.95 -9.16,-4.95h-14.16c-3.1,0 -5.91,1.83 -7.15,4.67 -12.47,28.4 -78.27,178.27 -100.25,228.33 -1.25,2.84 -4.05,4.67 -7.15,4.67 -3.1,0 -5.91,-1.83 -7.15,-4.67 -21.98,-50.06 -87.78,-199.93 -100.25,-228.33 -1.25,-2.84 -4.05,-4.67 -7.15,-4.67h-14.16c-3.69,0 -7.14,1.86 -9.16,4.95 -2.02,3.09 -2.34,6.99 -0.86,10.37 23.56,53.77 101.87,232.52 117.87,269.03 1.74,3.98 5.67,6.55 10.02,6.55h21.7c4.34,0 8.27,-2.57 10.02,-6.55 16,-36.51 94.32,-215.27 117.87,-269.03z\"\n        android:strokeLineJoin=\"round\"/>\n    <path\n        android:fillType=\"evenOdd\"\n        android:pathData=\"M408.12,395.31c-1.67,2.9 -4.77,4.69 -8.12,4.69s-6.44,-1.79 -8.12,-4.69c-17,-29.44 -56.16,-97.26 -73.15,-126.7 -1.67,-2.9 -1.67,-6.47 0,-9.38s4.77,-4.69 8.12,-4.69h146.31c3.35,0 6.44,1.79 8.12,4.69s1.67,6.47 0,9.38c-17,29.44 -56.16,97.26 -73.15,126.7z\"\n        android:strokeLineJoin=\"round\">\n        <aapt:attr name=\"android:fillColor\">\n            <gradient\n                android:startX=\"400\"\n                android:startY=\"254.54\"\n                android:endX=\"400\"\n                android:endY=\"543.86\"\n                android:type=\"linear\">\n                <item\n                    android:offset=\"0\"\n                    android:color=\"#FFF04E98\"/>\n                <item\n                    android:offset=\"0.5\"\n                    android:color=\"#FF5F65D4\"/>\n                <item\n                    android:offset=\"1\"\n                    android:color=\"#FF4E98F0\"/>\n            </gradient>\n        </aapt:attr>\n    </path>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/ic_notification.xml",
    "content": "<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n\n    <path\n        android:fillColor=\"#FFFFFFFF\"\n        android:pathData=\"M4.03516,3C3.80859,3 3.59375,3.11719 3.46875,3.30469C3.34375,3.49609 3.32422,3.73828 3.41406,3.94922C4.87109,7.27344 9.71875,18.3359 10.707,20.5938C10.8164,20.8398 11.0586,21 11.3281,21H12.6719C12.9375,21 13.1836,20.8398 13.293,20.5938C14.2813,18.3359 19.1289,7.27344 20.5859,3.94922C20.6758,3.73828 20.6563,3.49609 20.5313,3.30469C20.4063,3.11719 20.1914,3 19.9648,3H19.0898C18.8984,3 18.7227,3.11328 18.6445,3.28906C17.875,5.04688 13.8008,14.3203 12.4414,17.418C12.3672,17.5938 12.1914,17.707 12,17.707C11.8086,17.707 11.6328,17.5938 11.5586,17.418C10.1992,14.3203 6.125,5.04688 5.35547,3.28906C5.27734,3.11328 5.10156,3 4.91016,3H7.47266C7.26563,3 7.07422,3.10938 6.97266,3.28906C6.86719,3.46875 6.86719,3.69141 6.97266,3.87109C8.02344,5.69141 10.4453,9.88672 11.4961,11.7109C11.6016,11.8906 11.793,12 12,12C12.207,12 12.3984,11.8906 12.5039,11.7109C13.5547,9.88672 15.9766,5.69141 17.0273,3.87109C17.1328,3.69141 17.1328,3.46875 17.0273,3.28906C16.9258,3.10938 16.7344,3 16.5273,3H7.47266\"/>\n</vector>\n"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi/ic_launcher.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <background android:drawable=\"@color/ic_launcher_background\"/>\n    <foreground android:drawable=\"@drawable/ic_launcher_foreground\"/>\n    <monochrome android:drawable=\"@drawable/ic_launcher_monochrome\"/>\n</adaptive-icon>\n"
  },
  {
    "path": "app/src/main/res/resources.properties",
    "content": "unqualifiedResLocale=en-US\n"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"ic_launcher_background\">#FF1B1B1B</color>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/id.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item type=\"id\" name=\"fragment_container\" />\n</resources>"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n    <string name=\"app_name\">ReVanced Manager</string>\n    <string name=\"patcher\">Patcher</string>\n    <string name=\"patches\">Patches</string>\n    <string name=\"cli\">CLI</string>\n    <string name=\"manager\">Manager</string>\n\n    <string name=\"onboarding_welcome_to\">Welcome to</string>\n    <string name=\"onboarding_welcome_back\">Hi! It\\'s the new</string>\n    <string name=\"onboarding_apps_subtitle\">You can select an app to patch now or do it later</string>\n    <string name=\"onboarding_apps_network_error\">Could not load patches because the network is unavailable or unstable. Connect to a stable network and try again.</string>\n    <string name=\"onboarding_updates_subtitle\">Configure automatic updates to keep ReVanced Manager and patches up to date</string>\n\n    <string name=\"banner_sources_not_downloaded_description\">Patches and downloaders could not be downloaded during setup. Tap update to download them.</string>\n    <string name=\"onboarding_updates_note\">ReVanced Manager will connect to %s in order to download initial versions if your device is connected to the internet.</string>\n\n    <string name=\"retry\">Retry</string>\n    <string name=\"onboarding_skip\">Skip for now</string>\n    <string name=\"onboarding_recommended_version\">Recommended version: %s</string>\n\n    <string name=\"onboarding_permissions_skip_title\">Skip permissions?</string>\n    <string name=\"onboarding_permissions_skip_description\">Without the required permissions, some features may not work correctly. You can grant them later in app settings.</string>\n    <string name=\"onboarding_permissions_skip_anyway\">Skip anyway</string>\n\n    <string name=\"onboarding_permissions_subtitle\">ReVanced Manager needs a few permissions to work properly</string>\n    <string name=\"permission_install_apps\">Install unknown apps</string>\n    <string name=\"permission_install_apps_description\">Required to install patched applications</string>\n    <string name=\"permission_notifications\">Notifications</string>\n    <string name=\"permission_notifications_description\">Allows for uninterrupted patching in the background</string>\n    <string name=\"permission_battery\">Battery optimization</string>\n    <string name=\"permission_battery_description\">Prevents patching from being interrupted in the background</string>\n    <string name=\"permission_grant\">Grant</string>\n\n    <string name=\"downloader_host_permission_label\">ReVanced Manager downloader host</string>\n    <string name=\"downloader_host_permission_description\">Used to control access to ReVanced Manager downloaders. Only ReVanced Manager has this.</string>\n\n    <string name=\"toast_copied_to_clipboard\">Copied!</string>\n    <string name=\"copy_to_clipboard\">Copy to clipboard</string>\n\n    <string name=\"dashboard\">Dashboard</string>\n    <string name=\"settings\">Settings</string>\n    <string name=\"select_app\">Select an app</string>\n    <string name=\"patches_count_selected\">%1$d/%2$d selected</string>\n\n    <string name=\"fab_patch_app\">Patch an app</string>\n    <string name=\"fab_add_patches\">Add patches</string>\n\n    <string name=\"new_downloader_notification\">New downloader(s) available. Click here to configure them.</string>\n    <string name=\"unsupported_architecture_warning\">Patching on this device architecture is unsupported and will most likely fail.</string>\n    <string name=\"onboarding_unsupported_device_title\">Device not supported</string>\n    <string name=\"onboarding_unsupported_device_description\">Your device\\'s architecture is not supported by ReVanced Manager. Patching will not work on this device.</string>\n\n    <string name=\"import_\">Import</string>\n    <string name=\"import_patches\">Import patches</string>\n    <string name=\"file_field_set\">Selected</string>\n    <string name=\"file_field_not_set\">Not selected</string>\n\n    <string name=\"field_not_set\">Not set</string>\n\n    <string name=\"patches_missing\">Missing</string>\n    <string name=\"patches_error\">Error</string>\n    <string name=\"patches_error_description\">Patches could not be loaded. Click to view the error</string>\n    <string name=\"patches_not_downloaded\">Patches has not been downloaded.</string>\n    <string name=\"patches_name_default\">Patches</string>\n    <string name=\"patches_name_fallback\">Unnamed</string>\n\n    <string name=\"android_11_bug_dialog_title\">Android 11 bug</string>\n    <string name=\"android_11_bug_dialog_description\">The app installation permission must be granted ahead of time to avoid a bug in the Android 11 system that will negatively affect the user experience.</string>\n\n    <string name=\"no_network_toast\">No internet connection available</string>\n\n    <string name=\"selected_app_meta_any_version\">Any available version</string>\n    <string name=\"app_source_dialog_title\">Select source</string>\n    <string name=\"app_source_dialog_option_auto\">Auto</string>\n    <string name=\"app_source_dialog_option_auto_description\">Use installed app, then downloaded APK, then available downloaders</string>\n    <string name=\"app_source_dialog_option_auto_unavailable\">No compatible found app or downloaders available</string>\n    <string name=\"app_source_dialog_option_installed_no_root\">Mounted apps can\\'t be patched again without root access</string>\n    <string name=\"app_source_dialog_option_installed_version_not_suggested\">Version %s does not match the suggested version</string>\n\n    <string name=\"patch_item_description\">Start patching the application</string>\n    <string name=\"patch_selector_item\">Select patches</string>\n    <string name=\"patch_selector_item_description\">%d patches selected</string>\n    <string name=\"patch_selection_changed_warning\">Selection of patches has been changed</string>\n    <string name=\"no_patches_selected\">No patches selected</string>\n\n    <string name=\"network_unavailable_warning\">Your device is not connected to the internet. Downloading will fail later.</string>\n    <string name=\"network_metered_warning\">You are currently on a metered connection. Data charges from your service provider may apply.</string>\n\n    <string name=\"apk_source_selector_item\">Select APK source</string>\n    <string name=\"apk_source_auto\">Auto</string>\n    <string name=\"apk_source_auto_installed\">Auto · Using installed APK</string>\n    <string name=\"apk_source_auto_downloaded\">Auto · Using downloaded APK</string>\n    <string name=\"apk_source_auto_downloader\">Auto · Using available downloaders</string>\n    <string name=\"apk_source_auto_storage\">Auto · Select from storage</string>\n    <string name=\"apk_source_downloader\">Using %s</string>\n    <string name=\"apk_source_installed\">Using installed APK</string>\n    <string name=\"apk_source_local\">Using a local APK file</string>\n    <string name=\"apk_source_downloaded\">Already downloaded</string>\n\n    <string name=\"legacy_import_failed\">Could not import legacy settings</string>\n\n\n    <string name=\"auto_updates_dialog_title\">Configure updates</string>\n    <string name=\"auto_updates_dialog_description\">Do you want ReVanced Manager to periodically check for updates for the following components?</string>\n    <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n    <string name=\"auto_updates_dialog_patches\">ReVanced Patches</string>\n    <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Downloaders</string>\n    <string name=\"auto_updates_dialog_note\">These settings can be changed later.\n\n    ReVanced Manager will connect to %s in order to download initial versions if your device is connected to the internet.</string>\n\n    <string name=\"announcements_filter_tag\">Filter by tag</string>\n    <string name=\"announcements_show_archived\">Show archived</string>\n\n    <string name=\"general\">General</string>\n    <string name=\"general_description\">Language, theme, dynamic color</string>\n    <string name=\"updates\">Updates</string>\n    <string name=\"updates_description\">Check for updates and view changelog</string>\n    <string name=\"downloads\">Downloads</string>\n    <string name=\"downloads_description\">Downloaders and downloaded apps</string>\n    <string name=\"import_export\">Import &amp; export</string>\n    <string name=\"import_export_description\">Keystore, patch options and selection</string>\n    <string name=\"advanced\">Advanced</string>\n    <string name=\"advanced_description\">API URL, memory limit, debugging</string>\n    <string name=\"safeguards_toggled_warning\">Safeguards have been toggled</string>\n    <string name=\"about\">About</string>\n    <string name=\"about_app_name\">About %1$s</string>\n    <string name=\"opensource_licenses\">Open source licenses</string>\n    <string name=\"opensource_licenses_description\">View all the libraries used to make this application</string>\n\n    <string name=\"contributors\">Contributors</string>\n    <string name=\"contributors_description\">View the contributors of ReVanced</string>\n    <string name=\"dynamic_color\">Dynamic color</string>\n    <string name=\"dynamic_color_description\">Adapt colors to the wallpaper</string>\n    <string name=\"pure_black_theme\">Pure black theme</string>\n    <string name=\"pure_black_theme_description\">Use pure black backgrounds for dark theme</string>\n    <string name=\"theme\">Theme</string>\n    <string name=\"theme_description\">Choose between light or dark theme</string>\n    <string name=\"language\">Language</string>\n    <string name=\"language_description\">Choose the app display language</string>\n    <string name=\"language_system_default\">System default</string>\n    <string name=\"search_languages\">Search languages…</string>\n\n    <string name=\"safeguards\">Safeguards</string>\n    <string name=\"patch_compat_check\">Disable version compatibility check</string>\n    <string name=\"patch_compat_check_description\">Do not restrict patches to compatible app versions</string>\n    <string name=\"patch_compat_check_title\">Disable version compatibility check?</string>\n    <string name=\"patch_compat_check_confirmation\">Selecting incompatible patches can result in a broken app.\n\nDo you want to proceed anyways?</string>\n    <string name=\"suggested_version_safeguard\">Require suggested app version</string>\n    <string name=\"suggested_version_safeguard_description\">Enforce selection of the suggested app version</string>\n    <string name=\"suggested_version_safeguard_title\">Disable requiring suggested app version?</string>\n    <string name=\"suggested_version_safeguard_confirmation\">Selecting an app that is not the suggested version may cause unexpected issues.\n\nDo you want to proceed anyways?</string>\n    <string name=\"patch_selection_safeguard\">Allow changing patch selection and options</string>\n    <string name=\"patch_selection_safeguard_description\">Do not prevent selecting or deselecting patches and customization of options</string>\n    <string name=\"patch_selection_safeguard_title\">Changing patch selection and options?</string>\n    <string name=\"patch_selection_safeguard_confirmation\">Changing the selection of patches may cause unexpected issues.\n\nEnable anyways?</string>\n    <string name=\"universal_patches_safeguard\">Allow using universal patches</string>\n    <string name=\"universal_patches_safeguard_description\">Do not prevent using universal patches</string>\n    <string name=\"universal_patches_safeguard_title\">Use universal patches?</string>\n    <string name=\"universal_patches_safeguard_confirmation\">Universal patches are not as well tested as those that target specific apps.\n\nEnable anyways?</string>\n    <string name=\"keystore\">Keystore</string>\n    <string name=\"patches_selections\">Patches selections</string>\n    <string name=\"import_keystore\">Import keystore</string>\n    <string name=\"import_keystore_description\">Import a custom keystore</string>\n    <string name=\"import_keystore_dialog_title\">Enter keystore credentials</string>\n    <string name=\"import_keystore_dialog_description\">You\\'ll need enter the keystore’s credentials to import it.</string>\n    <string name=\"import_keystore_dialog_alias_field\">Username (Alias)</string>\n    <string name=\"import_keystore_dialog_password_field\">Password</string>\n    <string name=\"import_keystore_dialog_button\">Import</string>\n    <string name=\"import_keystore_wrong_credentials\">Wrong keystore credentials</string>\n    <string name=\"import_keystore_success\">Imported keystore</string>\n    <string name=\"export_keystore\">Export keystore</string>\n    <string name=\"export_keystore_description\">Export the current keystore</string>\n    <string name=\"export_keystore_unavailable\">No keystore to export</string>\n    <string name=\"export_keystore_success\">Exported keystore</string>\n    <string name=\"regenerate_keystore\">Regenerate keystore</string>\n    <string name=\"regenerate_keystore_description\">Generate a new keystore</string>\n    <string name=\"regenerate_keystore_dialog_description\">You are about to regenerate your keystore the manager will use during the patching process.\n\nYou will not be able to update the previously installed apps from this source.</string>\n    <string name=\"regenerate_keystore_success\">The keystore has been successfully replaced</string>\n    <string name=\"import_patch_selection\">Import patch selection</string>\n    <string name=\"import_patch_selection_description\">Import patch selection from a JSON file</string>\n    <string name=\"import_patch_selection_fail\">Could not import patch selection: %s</string>\n    <string name=\"import_patch_selection_success\">Imported patch selection</string>\n    <string name=\"select_bundle_for_import\">Select bundle to import into</string>\n    <string name=\"export_patch_selection\">Export patch selection</string>\n    <string name=\"export_patch_selection_description\">Export patch selection to a JSON file</string>\n    <string name=\"export_patch_selection_fail\">Could not export patch selection: %s</string>\n    <string name=\"export_patch_selection_success\">Exported patch selection</string>\n    <string name=\"select_bundle_for_export\">Select bundle to export from</string>\n    <string name=\"patch_selection_packages\">Apps with saved selections</string>\n    <string name=\"patch_selection_entries\">Total selected patches</string>\n    <string name=\"reset_configuration\">Reset configuration</string>\n    <string name=\"reset_patch_selection\">Patch selections</string>\n    <string name=\"reset_patch_selection_description\">Reset the stored patch selection</string>\n    <string name=\"reset_patch_options\">Patch options</string>\n    <string name=\"reset_patch_options_description\">Reset the stored patch options</string>\n    <string name=\"reset_patch_selection_success\">Patch selection has been reset</string>\n    <string name=\"patch_selection_reset_all\">Reset patch selection globally</string>\n    <string name=\"patch_selection_reset_all_dialog_description\">You are about to reset all patch selections. You will need to manually select each patch again.</string>\n    <string name=\"patch_selection_reset_all_description\">Resets all patch selections</string>\n    <string name=\"patch_selection_reset_package\">Reset patch selection for app</string>\n    <string name=\"patch_selection_reset_package_dialog_description\">You are about to reset the patch selection for the app \\\"%s\\\". You will have to manually select each patch again.</string>\n    <string name=\"patch_selection_reset_package_description\">Resets patch selection for a single app</string>\n    <string name=\"patch_selection_reset_patches\">Reset patch selection (single)</string>\n    <string name=\"patch_selection_reset_patches_dialog_description\">You are about to reset the patch selection for \\\"%s\\\". You will have to manually select each patch again.</string>\n    <string name=\"patch_selection_reset_patches_description\">Resets the patch selection for a specific collection of patches</string>\n    <string name=\"patch_options_reset_package\">Reset patch options for app</string>\n    <string name=\"patch_options_reset_package_dialog_description\">You are about to reset the patch options for the app \\\"%s\\\". You will have to reapply each option again.</string>\n    <string name=\"patch_options_reset_package_description\">Resets patch options for a single app</string>\n    <string name=\"patch_options_reset_patches\">Reset patch options (single)</string>\n    <string name=\"patch_options_reset_patches_dialog_description\">You are about to reset the patch options for \\\"%s\\\". You will have to reapply each option again.</string>\n    <string name=\"patch_options_reset_patches_description\">Resets the patch options for a specific collection of patches</string>\n    <string name=\"patch_options_reset_all\">Reset patch options globally</string>\n    <string name=\"patch_options_reset_all_dialog_description\">You are about to reset all patch options. You will have to reapply each option again.</string>\n    <string name=\"patch_options_reset_all_description\">Resets all patch options</string>\n    <string name=\"downloaders\">Downloaders</string>\n    <string name=\"downloader_prereleases\">Use pre-releases</string>\n    <string name=\"downloader_prereleases_description\">Use pre-release versions of the main downloader</string>\n    <string name=\"downloader_state_loaded\">Loaded</string>\n    <string name=\"downloader_state_failed\">Failed to load. Click for more details</string>\n    <string name=\"downloader_state_missing\">Missing</string>\n    <string name=\"downloader_delete_apps_title\">Delete selected apps</string>\n    <string name=\"downloader_delete_apps_description\">Are you sure you want to delete the selected apps?</string>\n    <string name=\"downloader_delete_single_description\">Are you sure you want to delete \\\"%s\\\"?</string>\n    <string name=\"downloader_settings_no_apps\">No downloaded apps found.</string>\n    <string name=\"downloader_settings_no_apps_description\">Apps downloaded through ReVanced Manager will appear here.</string>\n    <string name=\"downloader_url\">Downloader URL</string>\n    <string name=\"downloader_add\">Add Downloader</string>\n    <string name=\"select_downloader_type_dialog_description\">Add new downloaders from URL or local files</string>\n    <string name=\"local_downloaders_description\">Add downloaders from local storage.</string>\n    <string name=\"remote_downloaders_description\">Add downloaders from URL. Can be automatically updated.</string>\n    <string name=\"install_revanced_downloaders\">Install downloaders to get apps directly within ReVanced Manager.</string>\n    <string name=\"install_revanced_downloader\">Install ReVanced Downloaders</string>\n    <string name=\"cancel_downloader_install_title\">Cancel downloaders install?</string>\n    <string name=\"cancel_downloader_install_description\">A downloaders install is in progress. If you leave now, the download will be cancelled.</string>\n    <string name=\"downloader_sources_unavailable_title\">These downloaders are missing</string>\n    <string name=\"downloader_sources_unavailable_description\">Click on the update button to fix it.</string>\n\n    <string name=\"downloader_update_failed\">Failed to update downloader: %s</string>\n    <string name=\"downloader_replace_fail\">Failed to import downloader: %s</string>\n\n    <string name=\"search_apps\">Search apps…</string>\n    <string name=\"loading_body\">Loading…</string>\n    <string name=\"downloading_patches\">Downloading patches…</string>\n\n    <string name=\"options\">Options</string>\n    <string name=\"ok\">OK</string>\n    <string name=\"yes\">Yes</string>\n    <string name=\"no\">No</string>\n    <string name=\"edit\">Edit</string>\n    <string name=\"dialog_input_placeholder\">Value</string>\n    <string name=\"reset\">Reset</string>\n    <string name=\"share\">Share</string>\n    <string name=\"patch\">Patch</string>\n    <string name=\"select_from_storage\">Select from storage</string>\n    <string name=\"select_from_storage_description\">Select an APK file from storage using file picker</string>\n    <string name=\"no_file_picker_found\">Please use alternative method!, we couldn\\'t find your file picker app!</string>\n    <string name=\"suggested_version_info\">Suggested version: %s</string>\n    <string name=\"type_anything\">Type anything to continue</string>\n    <string name=\"search\">Search patches…</string>\n    <string name=\"apply\">Apply</string>\n    <string name=\"help\">Help</string>\n    <string name=\"back\">Back</string>\n    <string name=\"warning\">Warning</string>\n    <string name=\"add\">Add</string>\n    <string name=\"enable\">Enable</string>\n    <string name=\"disable\">Disable</string>\n    <string name=\"close\">Close</string>\n    <string name=\"clear\">Clear</string>\n    <string name=\"system\">System</string>\n    <string name=\"light\">Light</string>\n    <string name=\"dark\">Dark</string>\n    <string name=\"appearance\">Appearance</string>\n    <string name=\"networking\">Networking</string>\n    <string name=\"allow_metered_networks\">Allow metered networks</string>\n    <string name=\"allow_metered_networks_description\">Permits automatic updates on metered networks.\n    The application might still warn about metered networks for manual operations.</string>\n    <string name=\"downloaded_apps\">Downloaded apps</string>\n    <string name=\"process_runtime\">Run Patcher in another process (experimental)</string>\n    <string name=\"process_runtime_description\">This is faster and allows Patcher to use more memory</string>\n    <string name=\"process_runtime_memory_limit\">Patcher process memory limit</string>\n    <string name=\"process_runtime_memory_limit_description\">The max amount of memory that the Patcher process can use</string>\n    <string name=\"debug_logs_export\">Export debug logs</string>\n    <string name=\"debug_logs_export_read_failed\">Failed to read logs (exit code %d)</string>\n    <string name=\"debug_logs_export_failed\">Failed to export logs</string>\n    <string name=\"debug_logs_export_success\">Exported logs</string>\n    <string name=\"api_url\">API URL</string>\n    <string name=\"api_url_description\">The API used to download necessary files</string>\n    <string name=\"api_url_dialog_title\">Change API URL</string>\n    <string name=\"api_url_dialog_description\">Change the API URL of ReVanced Manager. ReVanced Manager uses the API to download patches and updates.</string>\n    <string name=\"api_url_dialog_warning\">ReVanced Manager connects to the API to download patches and updates. Make sure that you trust it.</string>\n    <string name=\"api_url_dialog_save\">Set</string>\n    <string name=\"api_url_dialog_reset\">Reset API URL</string>\n    <string name=\"device\">Device</string>\n    <string name=\"device_android_version\">Android version</string>\n    <string name=\"device_model\">Model</string>\n    <string name=\"device_architectures\">CPU Architectures</string>\n    <string name=\"device_memory_limit\">Memory limits</string>\n    <string name=\"device_memory_limit_format\">%1$dMB (Normal) - %2$dMB (Large)</string>\n    <string name=\"patches_force_download\">Force download all patches</string>\n    <string name=\"patches_reset\">Reset patches</string>\n    <string name=\"reset_onboarding\">Reset onboarding</string>\n    <string name=\"reset_onboarding_description\">Show the onboarding screen on next app launch</string>\n    <string name=\"reset_announcement\">Reset announcement read</string>\n    <string name=\"reset_announcement_description\">Forget that announcements have been read</string>\n    <string name=\"patching\">Patching</string>\n    <string name=\"signing\">Signing</string>\n    <string name=\"storage\">Storage</string>\n    <string name=\"no_patch_found\">No patch can be found. Check your patches</string>\n    <string name=\"tab_apps\">Apps</string>\n    <string name=\"tab_patches\">Patches</string>\n    <string name=\"delete\">Delete</string>\n    <string name=\"refresh\">Refresh</string>\n    <string name=\"continue_anyways\">Continue anyways</string>\n    <string name=\"download_another_version\">Download another version</string>\n    <string name=\"download_app\">Download app</string>\n    <string name=\"download_apk\">Download APK file</string>\n    <string name=\"patches_download_fail\">Failed to download patches: %s</string>\n    <string name=\"api_not_working_title\">API service is currently down</string>\n    <string name=\"api_not_working_description\">Some features might be impacted. Check your connection or API URL in settings.</string>\n    <string name=\"patches_replace_fail\">Failed to import patches: %s</string>\n    <string name=\"no_patched_apps_found\">No patched apps found</string>\n    <string name=\"no_patched_apps_description\">You currently don\\'t have any patched apps that we know of. Change that by patching your first app!</string>\n    <string name=\"patched_apps_section_title\">Patched apps</string>\n    <string name=\"patchable_apps_section_title\">Apps that can be patched</string>\n    <string name=\"no_patches_found\">No patches found</string>\n    <string name=\"no_patches_description\">You don\\'t have any patches yet. Add patches by tapping the button below!</string>\n    <string name=\"tap_on_patches\">Tap on the patches to get more information about them</string>\n    <string name=\"patches_selected\">%s selected</string>\n    <string name=\"incompatible_patches\">Incompatible patches</string>\n    <string name=\"universal_patches\">Universal patches</string>\n    <string name=\"patch_selection_reset_toast\">Patch selection and options has been reset to recommended defaults</string>\n    <string name=\"patch_options_reset_toast\">Patch options have been reset</string>\n    <string name=\"non_suggested_version_warning_title\">Non suggested version</string>\n    <string name=\"non_suggested_version_warning_description\">The version of the app you have selected does not match the suggested version.\nPlease use the suggested version: %s\n\nTo continue anyway, disable \\\"Require suggested app version\\\" in the advanced settings.</string>\n    <string name=\"selection_warning_title\">Stop using defaults?</string>\n    <string name=\"selection_warning_description\">It is recommended to use the default patch selection and options. Changing them may result in unexpected issues.\n\nYou need to turn on \\\"Allow changing patch selection and options\\\" in the advanced settings before toggling patches.</string>\n    <string name=\"universal_patch_warning_description\">Universal patches have a more generalized use and do not work as reliably as patches that target specific apps. You may encounter issues while using them.\n\nYou need to turn on \\\"Allow using universal patches\\\" in the advanced settings before using universal patches.</string>\n    <string name=\"this_version\">This version</string>\n    <string name=\"universal\">Any app</string>\n    <string name=\"search_patches\">Search patches</string>\n    <string name=\"app_version_not_compatible\">This patch is not compatible with the selected app version (%1$s)\n\nIt is only compatible with the following version(s): %2$s</string>\n    <string name=\"continue_with_version\">Continue with this version?</string>\n    <string name=\"version_not_compatible\">Not all patches are compatible with this version (%s). Do you want to continue anyway?</string>\n    <string name=\"download_application\">Download application?</string>\n    <string name=\"app_not_installed\">The app you selected isn\\'t installed. Do you want to download it?</string>\n    <string name=\"wrong_app_loading\">The app you selected has the wrong package name!</string>\n    <string name=\"failed_to_load_apk\">Failed to load APK</string>\n    <string name=\"split_apk_not_supported\">Split APKs cannot be patched</string>\n    <string name=\"loading\">Loading…</string>\n    <string name=\"not_installed\">Not installed</string>\n    <string name=\"installed\">Installed</string>\n\n    <string name=\"app_info\">App info</string>\n    <string name=\"uninstall\">Uninstall</string>\n    <string name=\"unpatch\">Unpatch</string>\n    <string name=\"repatch\">Repatch</string>\n    <string name=\"install_type\">Installation type</string>\n    <string name=\"package_name\">Package name</string>\n    <string name=\"original_package_name\">Original package name</string>\n    <string name=\"applied_patches\">Applied patches</string>\n    <string name=\"view_applied_patches\">View applied patches</string>\n\n    <string name=\"default_install\">Default</string>\n    <string name=\"mount_install\">Mount</string>\n    <string name=\"mounted\">Mounted</string>\n    <string name=\"not_mounted\">Not mounted</string>\n    <string name=\"mount\">Mount</string>\n    <string name=\"unmount\">Unmount</string>\n    <string name=\"failed_to_mount\">Failed to mount: %s</string>\n    <string name=\"failed_to_unmount\">Failed to unmount: %s</string>\n    <string name=\"unpatch_app\">Unpatch app?</string>\n    <string name=\"unpatch_description\">Are you sure you want to unpatch this app?</string>\n\n    <string name=\"downloader_invalid_version\">Downloader did not fetch the correct version</string>\n    <string name=\"downloader_app_not_found\">Downloader did not find the app</string>\n    <string name=\"downloader_error\">Downloader error: %s</string>\n    <string name=\"no_downloaders_installed\">No app downloaders are installed!</string>\n    <string name=\"no_downloaders_trusted\">No app downloaders have been trusted! Please check your settings.</string>\n    <string name=\"already_patched\">Already patched</string>\n\n    <string name=\"patch_selector_sheet_filter_title\">Filter</string>\n    <string name=\"patch_selector_sheet_filter_compat_title\">Compatibility</string>\n    <string name=\"patch_selector_sheet_filter_packages_title\">Packages</string>\n\n    <string name=\"patch_selector_sheet_actions_title\">Actions</string>\n    <string name=\"restore_default_selection\">Restore default selection</string>\n    <string name=\"deselect_all\">Deselect all</string>\n    <string name=\"invert_selection\">Invert selection</string>\n    <string name=\"deselect_all_except\">Deselect all except %s</string>\n    <string name=\"scope_dialog_title\">Apply to</string>\n    <string name=\"scope_all_patches\">All patches</string>\n    <string name=\"scope_bundle_patches\">%s only</string>\n\n    <string name=\"string_option_menu_description\">More options</string>\n    <string name=\"option_preset_custom_value\">Custom value</string>\n\n    <string name=\"path_selector\">Select from storage</string>\n    <string name=\"path_selector_parent_dir\">Previous directory</string>\n    <string name=\"path_selector_dirs\">Directories</string>\n    <string name=\"path_selector_files\">Files</string>\n\n    <string name=\"show_password_field\">Show password</string>\n    <string name=\"hide_password_field\">Hide password</string>\n\n    <string name=\"installer\">Installer</string>\n    <string name=\"install_app\">Install</string>\n    <string name=\"install_app_success\">App installed</string>\n    <string name=\"install_app_fail\">Failed to install app: %s</string>\n    <string name=\"reinstall_app_fail\">Failed to reinstall app: %s</string>\n    <string name=\"uninstall_app_fail\">Failed to uninstall app: %s</string>\n    <string name=\"open_app\">Open</string>\n    <string name=\"save_apk\">Save APK</string>\n    <string name=\"save_apk_success\">APK Saved</string>\n    <string name=\"sign_fail\">Failed to sign APK: %s</string>\n    <string name=\"save_logs\">Save logs</string>\n    <string name=\"save_as_file\">Save to files</string>\n    <string name=\"export_patcher_logs\">Export patcher logs</string>\n    <string name=\"save_logs_success\">Logs saved</string>\n    <string name=\"downloader_activity_dialog_body\">User interaction is required in order to proceed with this downloader.</string>\n    <string name=\"select_install_type\">Select installation type</string>\n\n    <string name=\"patcher_step_group_preparing\">Preparing</string>\n    <string name=\"patcher_step_load_patches\">Load patches</string>\n    <string name=\"patcher_step_unpack\">Prepare patcher</string>\n    <string name=\"patcher_step_group_patching\">Patching</string>\n    <string name=\"patcher_step_group_saving\">Saving</string>\n    <string name=\"patcher_step_write_patched\">Write patched APK file</string>\n    <string name=\"patcher_step_sign_apk\">Sign patched APK file</string>\n    <string name=\"patcher_notification_title\">Patching in progress…</string>\n    <string name=\"patcher_notification_text\">Tap to return to the patcher</string>\n    <string name=\"patcher_stop_confirm_title\">Stop patcher</string>\n    <string name=\"patcher_stop_confirm_description\">Are you sure you want to stop the patching process?</string>\n    <string name=\"patcher_install_in_progress\">Installation is in progress. Please wait</string>\n    <string name=\"execute_patches\">Execute patches</string>\n    <string name=\"executing_patch\">Execute %s</string>\n    <string name=\"failed_to_execute_patch\">Failed to execute %s</string>\n\n    <string name=\"step_completed\">completed</string>\n    <string name=\"step_failed\">failed</string>\n    <string name=\"step_running\">running</string>\n    <string name=\"step_waiting\">waiting</string>\n\n    <string name=\"expand_content\">expand</string>\n    <string name=\"collapse_content\">collapse</string>\n    <string name=\"drag_handle\">reorder</string>\n\n    <string name=\"more\">More</string>\n    <string name=\"less\">Less</string>\n    <string name=\"continue_\">Continue</string>\n    <string name=\"dismiss\">Dismiss</string>\n    <string name=\"view_announcement\">View announcement</string>\n    <string name=\"permanent_dismiss\">Do not show this again</string>\n    <string name=\"donate\">Donate</string>\n    <string name=\"website\">Website</string>\n    <string name=\"github\">GitHub</string>\n    <string name=\"contact\">Contact</string>\n    <string name=\"license\">License</string>\n    <string name=\"source\">Source</string>\n    <string name=\"repository\">Repository</string>\n    <string name=\"bundle_information_by_author\">By %1$s</string>\n    <string name=\"version\">Version</string>\n    <string name=\"version_compatibility_warning\">Selected version may be incompatible with selected patches</string>\n    <string name=\"submit_feedback\">Submit issue or feedback</string>\n    <string name=\"submit_feedback_description\">Help us improve this application</string>\n    <string name=\"developer_options\">Developer options</string>\n    <string name=\"developer_options_description\">Options for debugging issues</string>\n    <string name=\"patches_update_success\">Update successful</string>\n    <string name=\"patches_update_unavailable\">No update available</string>\n    <string name=\"view_patches\">View patches</string>\n    <string name=\"patches_view_any_version\">Any version</string>\n    <string name=\"patches_view_any_package\">Any package</string>\n    <string name=\"patches_delete_single_dialog_description\">Are you sure you want to delete \\\"%s\\\"?</string>\n    <string name=\"patches_delete_multiple_dialog_description\">Are you sure you want to delete the selected patches?</string>\n\n    <string name=\"announcements\">Announcements</string>\n    <string name=\"archive\">Archive</string>\n    <string name=\"about_revanced_manager\">About ReVanced Manager</string>\n    <string name=\"revanced_manager_description\">ReVanced Manager is an Android application that uses ReVanced Patcher to patch Android apps. It allows you to download and patch apps with custom patches, and manage the patching process.</string>\n    <string name=\"developer_options_taps\">%d taps remaining</string>\n    <string name=\"developer_options_enabled\">Developer options enabled</string>\n    <string name=\"developer_options_already_enabled\">Developer options are already enabled</string>\n    <string name=\"update_available\">An update is available</string>\n    <string name=\"current_version\">Current version: %s</string>\n    <string name=\"new_version\">New version: %s</string>\n    <string name=\"ready_to_install_update\">Ready to install update</string>\n    <string name=\"update_completed\">Update installed</string>\n    <string name=\"install_update_manager_failed\">Failed to install update</string>\n    <string name=\"manual_update_check\">Check for updates</string>\n    <string name=\"view_update\">View update</string>\n    <string name=\"manual_update_check_description\">Manually check for updates</string>\n    <string name=\"update_checking_manager\">Check for updates on launch</string>\n    <string name=\"update_checking_manager_description\">Check for new versions of ReVanced Manager when the application starts</string>\n    <string name=\"update_checking_downloader\">Check for ReVanced Downloaders updates on launch</string>\n    <string name=\"update_checking_downloader_description\">Check for updates to installed ReVanced Downloaders when the application starts</string>\n    <string name=\"manager_prereleases\">Use pre-releases</string>\n    <string name=\"manager_prereleases_description\">Use pre-release versions of ReVanced Manager</string>\n    <string name=\"prerelease_title\">Use pre-releases?</string>\n    <string name=\"prereleases_warning\">Pre-release versions may be unstable and contain bugs. You may experience crashes, data loss, or other unexpected issues. Only enable this if you are comfortable with these risks.</string>\n    <string name=\"changelog\">View changelog</string>\n    <string name=\"changelog_loading\">Loading changelog</string>\n    <string name=\"changelog_download_fail\">Failed to download changelog: %s</string>\n    <string name=\"changelog_description\">Check out the latest changes in this update</string>\n    <string name=\"battery_optimization_notification\">Battery optimizations must be turned off in order for ReVanced Manager to work correctly in the background. Click here to turn off optimizations.</string>\n    <string name=\"installing_manager_update\">Installing update…</string>\n    <string name=\"downloading_manager_update\">Downloading update…</string>\n    <string name=\"download_manager_failed\">Failed to download update: %s</string>\n    <string name=\"cancel\">Cancel</string>\n    <string name=\"save\">Save</string>\n    <string name=\"save_with_count\">Save (%1$s)</string>\n    <string name=\"update\">Update</string>\n    <string name=\"empty\">Empty</string>\n    <string name=\"installing_message\">Tap on <b>Update</b> when prompted.\nReVanced Manager will close when updating.</string>\n    <string name=\"no_changelogs_found\">No changelogs found</string>\n    <string name=\"just_now\">Just now</string>\n    <string name=\"minutes_ago\">%sm ago</string>\n    <string name=\"hours_ago\">%sh ago</string>\n    <string name=\"days_ago\">%sd ago</string>\n    <string name=\"invalid_date\">Invalid date</string>\n    <string name=\"disable_battery_optimization\">Disable battery optimization</string>\n    <string name=\"input_dialog_value_invalid\">Invalid value</string>\n    <string name=\"option_required\">This option is required</string>\n    <string name=\"required_options_screen\">Required options</string>\n\n    <string name=\"failed_to_check_updates\">Failed to check for updates: %s</string>\n    <string name=\"no_update_available\">No update available</string>\n    <string name=\"no_announcements_found\">No announcements found</string>\n    <string name=\"update_check\">Checking for updates…</string>\n    <string name=\"dismiss_temporary\">Not now</string>\n    <string name=\"update_available_dialog_description\">A new version of ReVanced Manager (%s) is available.</string>\n    <string name=\"failed_to_download_update\">Failed to download update: %s</string>\n    <string name=\"download\">Download</string>\n    <string name=\"download_confirmation_metered\">You are currently on a metered connection, and data charges from your service provider may apply.\n\nDo you still want to continue?</string>\n    <string name=\"download_update_confirmation\">Download update?</string>\n    <string name=\"no_contributors_found\">No contributors found</string>\n    <string name=\"select\">Select</string>\n    <string name=\"select_deselect_all\">Select or deselect all</string>\n    <string name=\"select_patches_type_dialog_description\">Add new patches from URL or local files</string>\n    <string name=\"local_patches_description\">Add patches from local storage.</string>\n    <string name=\"remote_patches_description\">Add patches from URL. Patches can automatically update.</string>\n    <string name=\"recommended\">Recommended</string>\n\n    <string name=\"installation_failed_dialog_title\">Installation failed</string>\n    <string name=\"installation_cancelled_dialog_title\">Installation cancelled</string>\n    <string name=\"installation_blocked_dialog_title\">Installation blocked</string>\n    <string name=\"installation_conflict_dialog_title\">Installation conflict</string>\n    <string name=\"installation_incompatible_dialog_title\">Installation incompatible</string>\n    <string name=\"installation_invalid_dialog_title\">Installation invalid</string>\n    <string name=\"installation_storage_issue_dialog_title\">Not enough storage</string>\n    <string name=\"installation_timeout_dialog_title\">Installation timed out</string>\n    <string name=\"installation_failed_description\">The installation failed due to an unknown reason. Try again?</string>\n    <string name=\"installation_aborted_description\">The installation was cancelled manually. Try again?</string>\n    <string name=\"installation_blocked_description\">The installation was blocked. Review your device security settings and try again.</string>\n    <string name=\"installation_conflict_description\">The installation was prevented by an existing installation of the app. Uninstall the installed app and try again?</string>\n    <string name=\"installation_incompatible_description\">The app is incompatible with this device. Use an APK that is compatible by this device and try again.</string>\n    <string name=\"installation_invalid_description\">The app is invalid. Uninstall the app and try again?</string>\n    <string name=\"installation_storage_issue_description\">The app could not be installed due to insufficient storage. Free up some space and try again.</string>\n    <string name=\"installation_timeout_description\">The installation took too long. Try again?</string>\n    <string name=\"reinstall\">Reinstall</string>\n    <string name=\"show\">Show</string>\n    <string name=\"debugging\">Debugging</string>\n    <string name=\"about_device\">About device</string>\n    <string name=\"enter_url\">Enter URL</string>\n    <string name=\"next\">Next</string>\n    <string name=\"auto_update\">Auto update</string>\n    <string name=\"add_patches\">Add patches</string>\n    <string name=\"auto_update_description\">Automatically update when a new version is available</string>\n    <string name=\"patches_prereleases\">Use pre-releases</string>\n    <string name=\"patches_prereleases_description\">Use pre-release versions of %s</string>\n    <string name=\"patches_url\">Patches URL</string>\n    <string name=\"incompatible_patches_dialog\">These patches are not compatible with the selected app version (%1$s).\n\nClick on the patches to see more details.</string>\n    <string name=\"incompatible_patch\">Incompatible patch</string>\n    <string name=\"any_version\">Any</string>\n    <string name=\"never_show_again\">Never show again</string>\n    <string name=\"show_manager_update_dialog_on_launch\">Show update message on launch</string>\n    <string name=\"show_manager_update_dialog_on_launch_description\">Show a popup notification whenever a new update is available on launch</string>\n    <string name=\"failed_to_import_keystore\">Failed to import keystore</string>\n    <string name=\"export\">Export</string>\n    <string name=\"confirm\">Confirm</string>\n    <string name=\"new_announcement\">New announcement:\\n%s</string>\n\n    <string name=\"generic_required\">Required</string>\n    <string name=\"generic_optional\">Optional</string>\n\n    <string name=\"sideeffect_restart\">Restart to see changes</string>\n    <string name=\"sideeffect_no_network\">Network is unstable or unavailable!</string>\n\n    <plurals name=\"patch_count\">\n        <item quantity=\"one\">%d patch</item>\n        <item quantity=\"other\">%d patches</item>\n    </plurals>\n    <plurals name=\"patches_executed\">\n        <item quantity=\"one\">Execute %d patch</item>\n        <item quantity=\"other\">Execute %d patches</item>\n    </plurals>\n    <plurals name=\"selected_count\">\n        <item quantity=\"other\">%d selected</item>\n    </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <style name=\"Theme.ReVancedManager\" parent=\"Theme.SplashScreen\">\n        <item name=\"windowSplashScreenAnimatedIcon\">@drawable/ic_launcher_splash_screen</item>\n        <item name=\"postSplashScreenTheme\">@style/Theme.AppCompat.NoActionBar</item>\n        <item name=\"android:windowActionBar\">false</item>\n        <item name=\"android:windowNoTitle\">true</item>\n    </style>\n\n    <style name=\"Theme.DownloaderActivity\" parent=\"Theme.AppCompat.DayNight\">\n        <item name=\"android:windowActionBar\">true</item>\n        <item name=\"android:windowNoTitle\">false</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-af-rZA/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">Oplapper</string>\n  <string name=\"onboarding_welcome_to\">Welkom by</string>\n  <string name=\"onboarding_welcome_back\">Hallo! Dit is die nuwe</string>\n  <string name=\"onboarding_apps_subtitle\">Jy kan nou \\'n toepassing kies om te pleister of dit later doen</string>\n  <string name=\"onboarding_apps_network_error\">Kon nie pleisters laai nie omdat die netwerk onbeskikbaar of onstabiel is. Koppel aan \\'n stabiele netwerk en probeer weer.</string>\n  <string name=\"onboarding_updates_subtitle\">Stel outomatiese opdaterings in om ReVanced Manager en pleisters op datum te hou</string>\n  <string name=\"banner_sources_not_downloaded_description\">Pleisters en aflaaiers kon nie tydens opstelling afgelaai word nie. Tik werk by om dit af te laai.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager sal aan %s koppel om aanvanklike weergawes af te laai as jou toestel aan die internet gekoppel is.</string>\n  <string name=\"retry\">Probeer weer</string>\n  <string name=\"onboarding_skip\">Slaan oor vir nou</string>\n  <string name=\"onboarding_recommended_version\">Aanbevole weergawe: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Slaan toestemmings oor?</string>\n  <string name=\"onboarding_permissions_skip_description\">Sonder die vereiste toestemmings mag sommige kenmerke dalk nie korrek werk nie. Jy kan dit later in toepassingsinstellings verleen.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Slaan in elk geval oor</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager benodig \\'n paar toestemmings om behoorlik te werk</string>\n  <string name=\"permission_install_apps\">Installeer onbekende toepassings</string>\n  <string name=\"permission_install_apps_description\">Vereis om gepatchte toepassings te installeer</string>\n  <string name=\"permission_notifications\">Kennisgewings</string>\n  <string name=\"permission_notifications_description\">Laat ononderbroke pleistering in die agtergrond toe</string>\n  <string name=\"permission_battery\">Batteryoptimalisering</string>\n  <string name=\"permission_battery_description\">Voorkom dat patching in die agtergrond onderbreek word</string>\n  <string name=\"permission_grant\">Verleen</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager aflaaier gasheer</string>\n  <string name=\"downloader_host_permission_description\">Word gebruik om toegang tot ReVanced Manager aflaaiers te beheer. Slegs ReVanced Manager het dit.</string>\n  <string name=\"fab_patch_app\">Patch \\'n toepassing</string>\n  <string name=\"fab_add_patches\">Voeg patches by</string>\n  <string name=\"new_downloader_notification\">Nuwe aflaaier(s) beskikbaar. Klik hier om dit te konfigureer.</string>\n  <string name=\"patches_not_downloaded\">Pleisters is nie afgelaai nie.</string>\n  <string name=\"app_source_dialog_option_auto_description\">Gebruik geïnstalleerde program, dan afgelaaide APK, dan beskikbare aflaaiers</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Geen versoenbare toepassing of aflaaiprogramme beskikbaar nie</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Gemonteerde toepassings kan nie weer sonder root-toegang gepatch word nie</string>\n  <string name=\"patch_selector_item\">Kies patches</string>\n  <string name=\"patch_selector_item_description\">%d patches gekies</string>\n  <string name=\"patch_selection_changed_warning\">Keuse van pleisters is verander</string>\n  <string name=\"apk_source_selector_item\">Kies APK-bron</string>\n  <string name=\"apk_source_auto\">Outo</string>\n  <string name=\"apk_source_auto_installed\">Outo · Gebruik geïnstalleerde APK</string>\n  <string name=\"apk_source_auto_downloaded\">Outo · Gebruik afgelaaide APK</string>\n  <string name=\"apk_source_auto_downloader\">Outomaties · Gebruik beskikbare aflaaiers</string>\n  <string name=\"apk_source_auto_storage\">Outomaties · Kies uit stoorplek</string>\n  <string name=\"apk_source_downloaded\">Reeds afgelaai</string>\n  <string name=\"auto_updates_dialog_description\">Wil jy hê ReVanced Manager moet periodiek na opdaterings vir die volgende komponente kyk?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Patches</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Aflaaiprogramme</string>\n  <string name=\"auto_updates_dialog_note\">Hierdie instellings kan later verander word.\n\n    ReVanced Manager sal aan %s koppel om aanvanklike weergawes af te laai as jou toestel aan die internet gekoppel is.</string>\n  <string name=\"announcements_filter_tag\">Filtreer volgens etiket</string>\n  <string name=\"announcements_show_archived\">Wys geargiveerdes</string>\n  <string name=\"updates_description\">Gaan na vir opdaterings en sien veranderingslog</string>\n  <string name=\"downloads_description\">Aflaaiprogramme en afgelaaide programme</string>\n  <string name=\"safeguards_toggled_warning\">Veiligheidsmaatreëls is gewissel</string>\n  <string name=\"about_app_name\">Oor %1$s</string>\n  <string name=\"search_languages\">Soek tale…</string>\n  <string name=\"keystore\">Sleutelwinkel</string>\n  <string name=\"patches_selections\">Patch-keuses</string>\n  <string name=\"select_bundle_for_import\">Kies bondel om in te voer</string>\n  <string name=\"select_bundle_for_export\">Kies bondel om uit te voer</string>\n  <string name=\"patch_selection_packages\">Toepassings met gestoorde keuses</string>\n  <string name=\"patch_selection_entries\">Totaal geselekteerde patches</string>\n  <string name=\"reset_configuration\">Herstel konfigurasie</string>\n  <string name=\"reset_patch_selection\">Patch-keuses</string>\n  <string name=\"reset_patch_options\">Patch-opsies</string>\n  <string name=\"downloaders\">Aflaaiprogramme</string>\n  <string name=\"downloader_prereleases\">Gebruik voorafvrystellings</string>\n  <string name=\"downloader_prereleases_description\">Gebruik voorafvrystellingsweergawes van die hoofaflaaiprogram</string>\n  <string name=\"downloader_state_loaded\">Gelaai</string>\n  <string name=\"downloader_state_failed\">Kon nie laai nie. Klik vir meer besonderhede</string>\n  <string name=\"downloader_state_missing\">Ontbreek</string>\n  <string name=\"downloader_delete_apps_title\">Vee geselekteerde programme uit</string>\n  <string name=\"downloader_delete_apps_description\">Is jy seker jy wil die geselekteerde programme uitvee?</string>\n  <string name=\"downloader_delete_single_description\">Is jy seker jy wil \\\"%s\\\" verwyder?</string>\n  <string name=\"downloader_settings_no_apps_description\">Toepassings wat deur ReVanced Manager afgelaai is, sal hier verskyn.</string>\n  <string name=\"downloader_url\">Aflaaier URL</string>\n  <string name=\"downloader_add\">Voeg Aflaaier by</string>\n  <string name=\"select_downloader_type_dialog_description\">Voeg nuwe aflaaiers by vanaf URL of plaaslike lêers</string>\n  <string name=\"local_downloaders_description\">Voeg aflaaiers by vanaf plaaslike stoorplek.</string>\n  <string name=\"remote_downloaders_description\">Voeg aflaaiers by vanaf URL. Kan outomaties bygewerk word.</string>\n  <string name=\"install_revanced_downloaders\">Installeer aflaaiers om toepassings direk binne ReVanced Manager te kry.</string>\n  <string name=\"install_revanced_downloader\">Installeer ReVanced Aflaaiers</string>\n  <string name=\"cancel_downloader_install_title\">Kanselleer aflaaiersinstallasie?</string>\n  <string name=\"cancel_downloader_install_description\">\\'n Aflaaiersinstallasie is aan die gang. As jy nou vertrek, sal die aflaai gekanselleer word.</string>\n  <string name=\"downloader_sources_unavailable_title\">Hierdie aflaaiers ontbreek</string>\n  <string name=\"downloader_sources_unavailable_description\">Klik op die bywerk-knoppie om dit reg te stel.</string>\n  <string name=\"downloader_update_failed\">Kon nie aflaaier bywerk nie: %s</string>\n  <string name=\"downloader_replace_fail\">Kon nie aflaaier invoer nie: %s</string>\n  <string name=\"select_from_storage_description\">Kies \\'n APK-lêer uit berging met \\'n lêerkieser</string>\n  <string name=\"enable\">Aktiveer</string>\n  <string name=\"disable\">Deaktiveer</string>\n  <string name=\"process_runtime_memory_limit_description\">Die maksimum hoeveelheid geheue wat die Patcher-proses kan gebruik</string>\n  <string name=\"reset_onboarding\">Herstel aanboord</string>\n  <string name=\"reset_onboarding_description\">Wys die aanboordskerm met die volgende toepassinglansering</string>\n  <string name=\"api_not_working_title\">API-diens is tans onbeskikbaar</string>\n  <string name=\"api_not_working_description\">Sommige funksies mag beïnvloed word. Kontroleer u verbinding of API-URL in instellings.</string>\n  <string name=\"no_patched_apps_found\">Geen gepatchte toepassings gevind nie</string>\n  <string name=\"no_patched_apps_description\">Jy het tans geen gepatchte toepassings waarvan ons weet nie. Verander dit deur jou eerste toepassing te patch!</string>\n  <string name=\"patched_apps_section_title\">Reggestelde toepassings</string>\n  <string name=\"patchable_apps_section_title\">Toepassings wat reggestel kan word</string>\n  <string name=\"no_patches_found\">Geen patches gevind nie</string>\n  <string name=\"no_patches_description\">Jy het nog geen patches nie. Voeg patches by deur op die knoppie hieronder te tik!</string>\n  <string name=\"split_apk_not_supported\">Gedeelde APK\\'s kan nie gepas word nie</string>\n  <string name=\"no_downloaders_installed\">Geen toepassingsaflaaiers is geïnstalleer nie!</string>\n  <string name=\"no_downloaders_trusted\">Geen toepassingsaflaaiers is vertrou nie! Kontroleer asseblief jou instellings.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Pakkette</string>\n  <string name=\"patch_selector_sheet_actions_title\">Aksies</string>\n  <string name=\"restore_default_selection\">Herstel verstekkeuse</string>\n  <string name=\"deselect_all\">Ontkies alles</string>\n  <string name=\"invert_selection\">Keer keuse om</string>\n  <string name=\"deselect_all_except\">Deselekteer alles behalwe %s</string>\n  <string name=\"scope_dialog_title\">Pas toe op</string>\n  <string name=\"scope_all_patches\">Alle pleisters</string>\n  <string name=\"scope_bundle_patches\">Slegs %s</string>\n  <string name=\"save_as_file\">Stoor na lêers</string>\n  <string name=\"export_patcher_logs\">Voer patcher-logboeke uit</string>\n  <string name=\"save_logs_success\">Logboeke gestoor</string>\n  <string name=\"downloader_activity_dialog_body\">Gebruikerinteraksie word vereis om voort te gaan met hierdie aflaaiprogram.</string>\n  <string name=\"patcher_step_unpack\">Berei pleisteraar voor</string>\n  <string name=\"view_announcement\">Bekyk aankondiging</string>\n  <string name=\"license\">Lisensie</string>\n  <string name=\"source\">Bron</string>\n  <string name=\"repository\">Repositorium</string>\n  <string name=\"bundle_information_by_author\">Deur %1$s</string>\n  <string name=\"version_compatibility_warning\">Geselekteerde weergawe mag onversoenbaar wees met geselekteerde pleisters</string>\n  <string name=\"announcements\">Aankondigings</string>\n  <string name=\"archive\">Argief</string>\n  <string name=\"view_update\">Sien opdatering</string>\n  <string name=\"update_checking_downloader\">Gaan na vir ReVanced Aflaaiers-opdaterings by lansering</string>\n  <string name=\"update_checking_downloader_description\">Gaan na vir opdaterings van geïnstalleerde ReVanced Aflaaiers wanneer die toepassing begin</string>\n  <string name=\"prereleases_warning\">Voorafvrystelling weergawes mag onstabiel wees en foute bevat. Jy mag ineenstortings, dataverlies, of ander onverwagte probleme ervaar. Aktiveer dit slegs as jy gemaklik is met hierdie risiko\\'s.</string>\n  <string name=\"changelog\">Sien veranderingslog</string>\n  <string name=\"no_announcements_found\">Geen aankondigings gevind nie</string>\n  <string name=\"new_announcement\">Nuwe aankondiging:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d pleister</item>\n    <item quantity=\"other\">%d pleisters</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Voer %d pleister uit</item>\n    <item quantity=\"other\">Voer %d pleisters uit</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d gekies</item>\n    <item quantity=\"other\">%d gekies</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-am-rET/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">ጠጋኝ</string>\n  <string name=\"onboarding_welcome_to\">እንኳን ደህና መጡ</string>\n  <string name=\"onboarding_welcome_back\">ሰላም! አዲሱ ReVanced Manager ነው</string>\n  <string name=\"onboarding_apps_subtitle\">አሁን ለመጠገን መተግበሪያ መምረጥ ወይም በኋላ ማድረግ ይችላሉ</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Managerን እና መጠገኛዎችን ወቅታዊ ለማድረግ ራስ-ሰር ዝመናዎችን ያዋቅሩ</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager የእርስዎ መሣሪያ ከበይነመረቡ ጋር የተገናኘ ከሆነ የመጀመሪያዎቹን ስሪቶች ለማውረድ ከ%s ጋር ይገናኛል።</string>\n  <string name=\"retry\">እንደገና ይሞክሩ</string>\n  <string name=\"onboarding_skip\">ለአሁኑ ይዝለሉ</string>\n  <string name=\"onboarding_recommended_version\">የሚመከር ስሪት: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">ፈቃዶችን ዝለል?</string>\n  <string name=\"onboarding_permissions_skip_description\">አስፈላጊ ፈቃዶች ከሌሉ አንዳንድ ባህሪያት በትክክል ላይሰሩ ይችላሉ። በኋላ በመተግበሪያ ቅንብሮች ውስጥ መስጠት ይችላሉ።</string>\n  <string name=\"onboarding_permissions_skip_anyway\">ያም ሆነ ይህ ዝለል</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager በትክክል ለመስራት ጥቂት ፈቃዶች ያስፈልገዋል።</string>\n  <string name=\"permission_install_apps\">ያልታወቁ መተግበሪያዎችን ጫን</string>\n  <string name=\"permission_install_apps_description\">የተጠገኑ መተግበሪያዎችን ለመጫን ያስፈልጋል</string>\n  <string name=\"permission_notifications\">ማሳወቂያዎች</string>\n  <string name=\"permission_battery\">የባትሪ ማመቻቸት</string>\n  <string name=\"permission_battery_description\">ከበስተጀርባ እየተጠገነ እንዳይቋረጥ ይከላከላል</string>\n  <string name=\"permission_grant\">ስጥ</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager ማውረጃ አስተናጋጅ</string>\n  <string name=\"downloader_host_permission_description\">የ ReVanced Manager ማውረጃዎችን መዳረሻ ለመቆጣጠር ጥቅም ላይ ይውላል። ይህ ያለው ReVanced Manager ብቻ ነው።</string>\n  <string name=\"fab_patch_app\">መተግበሪያ ጠግን</string>\n  <string name=\"fab_add_patches\">ጥገናዎችን ጨምር</string>\n  <string name=\"new_downloader_notification\">አዲስ ማውረጃ(ዎች) ይገኛሉ። እነሱን ለማዋቀር እዚህ ይጫኑ።</string>\n  <string name=\"patches_not_downloaded\">ፓች አልወረደም።</string>\n  <string name=\"app_source_dialog_option_auto_description\">የተጫነ መተግበሪያ ተጠቀም፣ ከዚያ የወረደውን APK፣ ከዚያም የሚገኙ አውራጆችን</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">ተኳኋኝ መተግበሪያ ወይም ማውረጃዎች አልተገኙም</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">የተሰቀሉ መተግበሪያዎች ያለ ስርወ መዳረሻ እንደገና ሊታደሱ አይችሉም</string>\n  <string name=\"patch_selector_item\">ጥገናዎችን ይምረጡ</string>\n  <string name=\"patch_selector_item_description\">%d ጥገናዎች ተመርጠዋል</string>\n  <string name=\"patch_selection_changed_warning\">የፓቾች ምርጫ ተቀይሯል።</string>\n  <string name=\"apk_source_selector_item\">የAPK ምንጭ ይምረጡ</string>\n  <string name=\"apk_source_auto\">በራስ-ሰር</string>\n  <string name=\"apk_source_auto_installed\">በራስ-ሰር · የተጫነውን APK በመጠቀም</string>\n  <string name=\"apk_source_auto_downloaded\">በራስ-ሰር · የወረደውን APK በመጠቀም</string>\n  <string name=\"apk_source_auto_downloader\">ራስ-ሰር · ያሉትን ማውረጃዎች በመጠቀም</string>\n  <string name=\"apk_source_auto_storage\">ራስ-ሰር · ከማከማቻ ምረጥ</string>\n  <string name=\"apk_source_downloaded\">አስቀድሞ ወርዷል</string>\n  <string name=\"auto_updates_dialog_description\">ReVanced Manager ለሚከተሉት አካላት በየጊዜው ዝመናዎችን እንዲፈትሽ ይፈልጋሉ?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Patches</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: አውራጆች</string>\n  <string name=\"auto_updates_dialog_note\">እነዚህ ቅንብሮች በኋላ ላይ ሊለወጡ ይችላሉ።\n\n    ReVanced Manager የእርስዎ መሣሪያ ከበይነመረቡ ጋር የተገናኘ ከሆነ የመጀመሪያዎቹን ስሪቶች ለማውረድ ከ%s ጋር ይገናኛል።</string>\n  <string name=\"announcements_filter_tag\">በመለያ አጣራ</string>\n  <string name=\"announcements_show_archived\">በማህደር ያሉትን አሳይ</string>\n  <string name=\"updates_description\">ዝመናዎችን ይፈትሹ እና የለውጥ መዝገብን ይመልከቱ</string>\n  <string name=\"downloads_description\">አውራጆች እና የወረዱ መተግበሪያዎች</string>\n  <string name=\"safeguards_toggled_warning\">ጥበቃዎች ተቀያይረዋል።</string>\n  <string name=\"about_app_name\">ስለ %1$s</string>\n  <string name=\"search_languages\">ቋንቋዎችን ፈልግ…</string>\n  <string name=\"keystore\">የቁልፍ ማከማቻ</string>\n  <string name=\"patches_selections\">የጥገናዎች ምርጫዎች</string>\n  <string name=\"select_bundle_for_import\">ለማስመጣት ጥቅል ይምረጡ</string>\n  <string name=\"select_bundle_for_export\">ወደ ውጪ ለመላክ ጥቅል ይምረጡ</string>\n  <string name=\"patch_selection_packages\">የተቀመጡ ምርጫዎች ያላቸው መተግበሪያዎች</string>\n  <string name=\"patch_selection_entries\">የተመረጡ ጠቅላላ ጥገናዎች</string>\n  <string name=\"reset_configuration\">ቅንብሮችን ዳግም አስጀምር</string>\n  <string name=\"reset_patch_selection\">የጥገና ምርጫዎች</string>\n  <string name=\"reset_patch_options\">የጥገና አማራጮች</string>\n  <string name=\"downloaders\">አውራጆች</string>\n  <string name=\"downloader_prereleases\">ቅድመ-መለቀቂያዎችን ተጠቀም</string>\n  <string name=\"downloader_prereleases_description\">የዋናውን አውራጅ ቅድመ-መለቀቂያ ስሪቶችን ተጠቀም</string>\n  <string name=\"downloader_state_loaded\">ተጭኗል</string>\n  <string name=\"downloader_state_failed\">መጫን አልተቻለም። ለበለጠ መረጃ ይጫኑ።</string>\n  <string name=\"downloader_state_missing\">ጠፍቷል</string>\n  <string name=\"downloader_delete_apps_title\">የተመረጡ መተግበሪያዎችን ይሰርዙ</string>\n  <string name=\"downloader_delete_apps_description\">የተመረጡትን መተግበሪያዎች መሰረዝ እንደሚፈልጉ እርግጠኛ ነዎት?</string>\n  <string name=\"downloader_delete_single_description\">\\\"%s\\\" ን መሰረዝ ይፈልጋሉ?</string>\n  <string name=\"downloader_settings_no_apps_description\">በReVanced Manager በኩል የወረዱ መተግበሪያዎች እዚህ ይታያሉ።</string>\n  <string name=\"downloader_url\">ማውረጃ URL</string>\n  <string name=\"downloader_add\">ማውረጃ ያክሉ</string>\n  <string name=\"select_downloader_type_dialog_description\">አዳዲስ ማውረጃዎችን ከURL ወይም ከአካባቢያዊ ፋይሎች ያክሉ</string>\n  <string name=\"local_downloaders_description\">ማውረጃዎችን ከአካባቢያዊ ማከማቻ ያክሉ</string>\n  <string name=\"remote_downloaders_description\">ማውረጃዎችን ከURL ያክሉ። በራስ-ሰር ሊዘመኑ ይችላሉ።</string>\n  <string name=\"install_revanced_downloaders\">መተግበሪያዎችን በቀጥታ በReVanced Manager ውስጥ ለማግኘት ማውረጃዎችን ይጫኑ።</string>\n  <string name=\"install_revanced_downloader\">ReVanced Downloaders ጫን</string>\n  <string name=\"cancel_downloader_install_title\">ማውረጃዎች መጫኑ ይሰረዝ?</string>\n  <string name=\"cancel_downloader_install_description\">የማውረጃዎች መጫን በመካሄድ ላይ ነው። አሁን ከሄዱ፣ ውርዱ ይሰረዛል።</string>\n  <string name=\"downloader_sources_unavailable_title\">እነዚህ ማውረጃዎች ጠፍተዋል</string>\n  <string name=\"downloader_sources_unavailable_description\">ለማስተካከል የማዘመን አዝራርን ይጫኑ።</string>\n  <string name=\"downloader_update_failed\">ማውረጃውን ማዘመን አልተሳካም: %s</string>\n  <string name=\"downloader_replace_fail\">ማውረጃውን ማስመጣት አልተሳካም: %s</string>\n  <string name=\"select_from_storage_description\">ፋይል መራጭን በመጠቀም ከማከማቻ የAPK ፋይል ይምረጡ</string>\n  <string name=\"enable\">አንቃ</string>\n  <string name=\"disable\">አሰናክል</string>\n  <string name=\"process_runtime_memory_limit_description\">የፓቸር ሂደቱ ሊጠቀምበት የሚችለው ከፍተኛው የማህደረ ትውስታ መጠን</string>\n  <string name=\"reset_onboarding\">የመግቢያ ማያ ገጹን ዳግም አስጀምር</string>\n  <string name=\"reset_onboarding_description\">በሚቀጥለው የመተግበሪያ ማስጀመሪያ ላይ የመግቢያ ማያ ገጹን አሳይ</string>\n  <string name=\"api_not_working_title\">የኤፒአይ አገልግሎት በአሁኑ ጊዜ ተቋርጧል</string>\n  <string name=\"api_not_working_description\">አንዳንድ ባህሪያት ሊጎዱ ይችላሉ። ቅንብሮች ውስጥ ግንኙነትዎን ወይም የኤፒአይ ዩአርኤልን ያረጋግጡ።</string>\n  <string name=\"no_patched_apps_found\">ምንም የተጠገኑ መተግበሪያዎች አልተገኙም።</string>\n  <string name=\"no_patched_apps_description\">በአሁኑ ጊዜ የምናውቃቸው ምንም የተጠገኑ መተግበሪያዎች የሉዎትም። የመጀመሪያ መተግበሪያዎን በመጠገን ይለውጡት!</string>\n  <string name=\"patched_apps_section_title\">የተጠገኑ አፕሊኬሽኖች</string>\n  <string name=\"patchable_apps_section_title\">ሊጠገኑ የሚችሉ አፕሊኬሽኖች</string>\n  <string name=\"no_patches_found\">ምንም ጥገናዎች አልተገኙም።</string>\n  <string name=\"no_patches_description\">ገና ምንም ጥገናዎች የሉዎትም። ከታች ያለውን ቁልፍ በመንካት ጥገናዎችን ያክሉ!</string>\n  <string name=\"split_apk_not_supported\">የተከፋፈሉ APKዎች መጠገን አይቻልም</string>\n  <string name=\"no_downloaders_installed\">ምንም የመተግበሪያ ማውረጃዎች አልተጫኑም!</string>\n  <string name=\"no_downloaders_trusted\">ምንም የመተግበሪያ ማውረጃዎች አልታመኑም! እባክዎ ቅንብሮችዎን ያረጋግጡ።</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">ጥቅሎች</string>\n  <string name=\"patch_selector_sheet_actions_title\">ድርጊቶች</string>\n  <string name=\"restore_default_selection\">ነባሪ ምርጫን ወደ ነበረበት ይመልሱ</string>\n  <string name=\"deselect_all\">ሁሉንም ምርጫ አንሳ</string>\n  <string name=\"invert_selection\">ምርጫን ገልብጥ</string>\n  <string name=\"deselect_all_except\">ከ%s በስተቀር ሁሉንም ምርጫ አንሳ</string>\n  <string name=\"scope_dialog_title\">ተግብር ለ</string>\n  <string name=\"scope_all_patches\">ሁሉም ጥገናዎች</string>\n  <string name=\"scope_bundle_patches\">%s ብቻ</string>\n  <string name=\"save_as_file\">ወደ ፋይሎች አስቀምጥ</string>\n  <string name=\"export_patcher_logs\">የጥገና ምዝግብ ማስታወሻዎችን ወደ ውጪ ላክ</string>\n  <string name=\"save_logs_success\">ምዝግብ ማስታወሻዎች ተቀምጠዋል</string>\n  <string name=\"downloader_activity_dialog_body\">በዚህ አውራጅ ለመቀጠል የተጠቃሚ መስተጋብር ያስፈልጋል።</string>\n  <string name=\"patcher_step_unpack\">ፓቸር አዘጋጅ</string>\n  <string name=\"view_announcement\">ማስታወቂያ እይ</string>\n  <string name=\"license\">ፍቃድ</string>\n  <string name=\"source\">ምንጭ</string>\n  <string name=\"repository\">ማከማቻ</string>\n  <string name=\"bundle_information_by_author\">በ %1$s</string>\n  <string name=\"version_compatibility_warning\">የተመረጠው ስሪት ከተመረጡት ጥገናዎች ጋር ላይጣጣም ይችላል</string>\n  <string name=\"announcements\">ማስታወቂያዎች</string>\n  <string name=\"archive\">ማህደር</string>\n  <string name=\"view_update\">ዝመናን ይመልከቱ</string>\n  <string name=\"update_checking_downloader\">ReVanced Downloaders ሲጀመር ዝመናዎችን ይፈትሹ</string>\n  <string name=\"update_checking_downloader_description\">መተግበሪያው ሲጀመር ለተጫኑ ReVanced Downloaders ዝመናዎችን ይፈትሹ</string>\n  <string name=\"prereleases_warning\">ቅድመ-ልቀት ስሪቶች ያልተረጋጉ እና ስህተቶችን ሊይዙ ይችላሉ። ብልሽቶች፣ የውሂብ መጥፋት ወይም ሌሎች ያልተጠበቁ ችግሮች ሊያጋጥሙዎት ይችላሉ። ለእነዚህ አደጋዎች ምቾት የሚሰማዎት ከሆነ ብቻ ይህን ያንቁ።</string>\n  <string name=\"changelog\">የለውጥ መዝገብን ይመልከቱ</string>\n  <string name=\"no_announcements_found\">ምንም ማስታወቂያዎች አልተገኙም</string>\n  <string name=\"new_announcement\">አዲስ ማስታወቂያ:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d ጥገና</item>\n    <item quantity=\"other\">%d ጥገናዎች</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d ጥገና አስፈጽም</item>\n    <item quantity=\"other\">%d ጥገናዎች አስፈጽም</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d ተመርጧል</item>\n    <item quantity=\"other\">%d ተመርጠዋል</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ar-rSA/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">أداة التعديل</string>\n  <string name=\"patches\">التعديلات</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">المدير</string>\n  <string name=\"onboarding_welcome_to\">مرحباً بك في</string>\n  <string name=\"onboarding_welcome_back\">مرحباً! إنه الجديد</string>\n  <string name=\"onboarding_apps_subtitle\">يمكنك تحديد تطبيق لتصحيحه الآن أو القيام بذلك لاحقاً</string>\n  <string name=\"onboarding_apps_network_error\">تعذر تحميل التعديلات لأن الشبكة غير متاحة أو غير مستقرة. اتصل بشبكة مستقرة وحاول مرة أخرى.</string>\n  <string name=\"onboarding_updates_subtitle\">قم بتكوين التحديثات التلقائية للحفاظ على ReVanced Manager والتصحيحات محدثة</string>\n  <string name=\"banner_sources_not_downloaded_description\">تعذر تنزيل التعديلات وأدوات التنزيل أثناء الإعداد. انقر على تحديث لتنزيلها.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager سيتصل بـ %s لتنزيل الإصدارات الأولية إذا كان جهازك متصلاً بالإنترنت.</string>\n  <string name=\"retry\">إعادة المحاولة</string>\n  <string name=\"onboarding_skip\">تخطي الآن</string>\n  <string name=\"onboarding_recommended_version\">الإصدار الموصى به: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">تخطي الأذونات؟</string>\n  <string name=\"onboarding_permissions_skip_description\">بدون الأذونات المطلوبة، قد لا تعمل بعض الميزات بشكل صحيح. يمكنك منحها لاحقًا في إعدادات التطبيق.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">تخطي على أي حال</string>\n  <string name=\"onboarding_permissions_subtitle\">يحتاج ReVanced Manager إلى بعض الأذونات للعمل بشكل صحيح</string>\n  <string name=\"permission_install_apps\">تثبيت تطبيقات غير معروفة</string>\n  <string name=\"permission_install_apps_description\">مطلوب لتثبيت التطبيقات المعدلة</string>\n  <string name=\"permission_notifications\">الإشعارات</string>\n  <string name=\"permission_notifications_description\">يسمح بإجراء التعديلات دون انقطاع في الخلفية</string>\n  <string name=\"permission_battery\">تحسين البطارية</string>\n  <string name=\"permission_battery_description\">يمنع مقاطعة التعديل في الخلفية</string>\n  <string name=\"permission_grant\">منح</string>\n  <string name=\"downloader_host_permission_label\">مضيف أدوات تنزيل ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">يُستخدم للتحكم في الوصول إلى أدوات تنزيل ReVanced Manager. فقط ReVanced Manager يمتلك هذا.</string>\n  <string name=\"toast_copied_to_clipboard\">نُسخ!</string>\n  <string name=\"copy_to_clipboard\">نسخ إلى الحافظة</string>\n  <string name=\"dashboard\">لوحة التحكم</string>\n  <string name=\"settings\">الإعدادات</string>\n  <string name=\"select_app\">حدد تطبيقًا</string>\n  <string name=\"patches_count_selected\">تم تحديد %1$d/%2$d</string>\n  <string name=\"fab_patch_app\">تعديل تطبيق</string>\n  <string name=\"fab_add_patches\">إضافة تعديلات</string>\n  <string name=\"new_downloader_notification\">تتوفر أدوات تنزيل جديدة. انقر هنا لتهيئتها.</string>\n  <string name=\"unsupported_architecture_warning\">التعديل على بنية هذا الجهاز غير مدعوم ومن المرجح أن يفشل.</string>\n  <string name=\"import_\">استيراد</string>\n  <string name=\"import_patches\">استيراد التعديلات</string>\n  <string name=\"file_field_set\">محدد</string>\n  <string name=\"file_field_not_set\">غير محدد</string>\n  <string name=\"field_not_set\">غير معين</string>\n  <string name=\"patches_missing\">مفقود</string>\n  <string name=\"patches_error\">خطأ</string>\n  <string name=\"patches_error_description\">تعذر تحميل التعديلات. انقر لعرض الخطأ</string>\n  <string name=\"patches_not_downloaded\">لم يتم تنزيل التصحيحات.</string>\n  <string name=\"patches_name_default\">التعديلات</string>\n  <string name=\"patches_name_fallback\">غير مُسمى</string>\n  <string name=\"android_11_bug_dialog_title\">خطأ Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">يجب منح إذن تثبيت التطبيق مسبقًا لتجنب خطأ في نظام Android 11 سيؤثر سلبًا على تجربة المستخدم.</string>\n  <string name=\"no_network_toast\">لا يوجد اتصال بالإنترنت متاح</string>\n  <string name=\"selected_app_meta_any_version\">أي إصدار متاح</string>\n  <string name=\"app_source_dialog_title\">حدد المصدر</string>\n  <string name=\"app_source_dialog_option_auto\">تلقائي</string>\n  <string name=\"app_source_dialog_option_auto_description\">استخدام التطبيق المثبت، ثم APK الذي تم تنزيله، ثم أدوات التنزيل المتاحة</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">لا يوجد تطبيق متوافق أو أدوات تنزيل متاحة</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">لا يمكن تعديل التطبيقات المثبتة مرة أخرى بدون صلاحيات Root</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">الإصدار %s لا يطابق الإصدار الموصى به</string>\n  <string name=\"patch_item_description\">بدء تعديل التطبيق</string>\n  <string name=\"patch_selector_item\">حدد التعديلات</string>\n  <string name=\"patch_selector_item_description\">تم تحديد %d تعديل</string>\n  <string name=\"patch_selection_changed_warning\">تم تغيير اختيار التصحيحات</string>\n  <string name=\"no_patches_selected\">لم يتم تحديد أي تعديلات</string>\n  <string name=\"network_unavailable_warning\">جهازك غير متصل بالإنترنت. سيفشل التنزيل لاحقًا.</string>\n  <string name=\"network_metered_warning\">أنت حاليًا تستخدم اتصالًا محدودًا. قد يتم تطبيق رسوم بيانات من مزود الخدمة الخاص بك.</string>\n  <string name=\"apk_source_selector_item\">حدد مصدر APK</string>\n  <string name=\"apk_source_auto\">تلقائي</string>\n  <string name=\"apk_source_auto_installed\">تلقائي · استخدام APK المثبت</string>\n  <string name=\"apk_source_auto_downloaded\">تلقائي · استخدام APK الذي تم تنزيله</string>\n  <string name=\"apk_source_auto_downloader\">تلقائي · باستخدام أدوات التنزيل المتاحة</string>\n  <string name=\"apk_source_auto_storage\">تلقائي · تحديد من التخزين</string>\n  <string name=\"apk_source_downloader\">استخدام %s</string>\n  <string name=\"apk_source_installed\">استخدام APK المثبت</string>\n  <string name=\"apk_source_local\">استخدام ملف APK محلي</string>\n  <string name=\"apk_source_downloaded\">تم تنزيله بالفعل</string>\n  <string name=\"legacy_import_failed\">تعذر استيراد الإعدادات القديمة</string>\n  <string name=\"auto_updates_dialog_title\">تهيئة التحديثات</string>\n  <string name=\"auto_updates_dialog_description\">هل تريد من ReVanced Manager التحقق بشكل دوري من التحديثات للمكونات التالية؟</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">تعديلات ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: برامج التنزيل</string>\n  <string name=\"auto_updates_dialog_note\">يمكن تغيير هذه الإعدادات لاحقًا.\n\n    ReVanced Manager سيتصل بـ %s لتنزيل الإصدارات الأولية إذا كان جهازك متصلاً بالإنترنت.</string>\n  <string name=\"announcements_filter_tag\">تصفية حسب الوسم</string>\n  <string name=\"announcements_show_archived\">عرض الأرشيف</string>\n  <string name=\"general\">عام</string>\n  <string name=\"general_description\">اللغة، المظهر، اللون الديناميكي</string>\n  <string name=\"updates\">التحديثات</string>\n  <string name=\"updates_description\">التحقق من التحديثات وعرض سجل التغييرات</string>\n  <string name=\"downloads\">التنزيلات</string>\n  <string name=\"downloads_description\">أدوات التنزيل والتطبيقات التي تم تنزيلها</string>\n  <string name=\"import_export\">استيراد وتصدير</string>\n  <string name=\"import_export_description\">مخزن المفاتيح، خيارات التعديل والتحديد</string>\n  <string name=\"advanced\">إعدادات متقدمة</string>\n  <string name=\"advanced_description\">عنوان URL للـ API، حد الذاكرة، تصحيح الأخطاء</string>\n  <string name=\"safeguards_toggled_warning\">تم تبديل الضمانات</string>\n  <string name=\"about\">لمحة</string>\n  <string name=\"about_app_name\">حول %1$s</string>\n  <string name=\"opensource_licenses\">تراخيص المصدر المفتوح</string>\n  <string name=\"opensource_licenses_description\">عرض جميع المكتبات المستخدمة لإنشاء هذا التطبيق</string>\n  <string name=\"contributors\">المساهمون</string>\n  <string name=\"contributors_description\">عرض المساهمين في ReVanced</string>\n  <string name=\"dynamic_color\">لون ديناميكي</string>\n  <string name=\"dynamic_color_description\">تكييف الألوان مع خلفية الشاشة</string>\n  <string name=\"pure_black_theme\">مظهر أسود نقي</string>\n  <string name=\"pure_black_theme_description\">استخدام خلفيات سوداء نقية للمظهر الداكن</string>\n  <string name=\"theme\">المظهر</string>\n  <string name=\"theme_description\">اختر بين المظهر الفاتح أو الداكن</string>\n  <string name=\"language\">اللغة</string>\n  <string name=\"language_description\">اختر لغة عرض التطبيق</string>\n  <string name=\"language_system_default\">افتراضي النظام</string>\n  <string name=\"search_languages\">البحث عن اللغات…</string>\n  <string name=\"safeguards\">الضمانات</string>\n  <string name=\"patch_compat_check\">تعطيل التحقق من توافق الإصدار</string>\n  <string name=\"patch_compat_check_description\">لا تقيد التعديلات بإصدارات التطبيقات المتوافقة</string>\n  <string name=\"patch_compat_check_confirmation\">قد يؤدي اختيار تعديلات غير متوافقة إلى تطبيق معطّل.\n\nهل تريد المتابعة على أي حال؟</string>\n  <string name=\"suggested_version_safeguard\">يتطلب إصدار التطبيق الموصى به</string>\n  <string name=\"suggested_version_safeguard_description\">فرض اختيار إصدار التطبيق الموصى به</string>\n  <string name=\"suggested_version_safeguard_confirmation\">قد يؤدي اختيار تطبيق ليس بالإصدار الموصى به إلى مشاكل غير متوقعة.\n\nهل تريد المتابعة على أي حال؟</string>\n  <string name=\"patch_selection_safeguard\">السماح بتغيير تحديد التعديل والخيارات</string>\n  <string name=\"patch_selection_safeguard_description\">لا تمنع تحديد أو إلغاء تحديد التعديلات وتخصيص الخيارات</string>\n  <string name=\"patch_selection_safeguard_confirmation\">قد يؤدي تغيير تحديد التعديلات إلى مشاكل غير متوقعة.\n\nهل تريد التمكين على أي حال؟</string>\n  <string name=\"universal_patches_safeguard\">السماح باستخدام التعديلات الشاملة</string>\n  <string name=\"universal_patches_safeguard_description\">لا تمنع استخدام التعديلات الشاملة</string>\n  <string name=\"universal_patches_safeguard_confirmation\">التعديلات الشاملة ليست مختبرة جيدًا مثل تلك التي تستهدف تطبيقات محددة.\n\nهل تريد التمكين على أي حال؟</string>\n  <string name=\"keystore\">مخزن المفاتيح</string>\n  <string name=\"patches_selections\">تحديد التعديلات</string>\n  <string name=\"import_keystore\">استيراد مخزن المفاتيح</string>\n  <string name=\"import_keystore_description\">استيراد مخزن مفاتيح مخصص</string>\n  <string name=\"import_keystore_dialog_title\">أدخل بيانات اعتماد مخزن المفاتيح</string>\n  <string name=\"import_keystore_dialog_description\">ستحتاج إلى إدخال بيانات اعتماد مخزن المفاتيح لاستيراده.</string>\n  <string name=\"import_keystore_dialog_alias_field\">اسم المستخدم (الاسم المستعار)</string>\n  <string name=\"import_keystore_dialog_password_field\">كلمة المرور</string>\n  <string name=\"import_keystore_dialog_button\">استيراد</string>\n  <string name=\"import_keystore_wrong_credentials\">بيانات اعتماد مخزن المفاتيح خاطئة</string>\n  <string name=\"import_keystore_success\">تم استيراد مخزن المفاتيح</string>\n  <string name=\"export_keystore\">تصدير مخزن المفاتيح</string>\n  <string name=\"export_keystore_description\">تصدير مخزن المفاتيح الحالي</string>\n  <string name=\"export_keystore_unavailable\">لا يوجد مخزن مفاتيح للتصدير</string>\n  <string name=\"export_keystore_success\">تم تصدير مخزن المفاتيح</string>\n  <string name=\"regenerate_keystore\">إعادة إنشاء مخزن المفاتيح</string>\n  <string name=\"regenerate_keystore_description\">إنشاء مخزن مفاتيح جديد</string>\n  <string name=\"regenerate_keystore_dialog_description\">أنت على وشك إعادة إنشاء مخزن المفاتيح الذي سيستخدمه المدير أثناء عملية التعديل.\n\nلن تتمكن من تحديث التطبيقات المثبتة مسبقًا من هذا المصدر.</string>\n  <string name=\"regenerate_keystore_success\">تم استبدال مخزن المفاتيح بنجاح</string>\n  <string name=\"import_patch_selection\">استيراد التعديل المحدد</string>\n  <string name=\"import_patch_selection_description\">استيراد التعديل المحدد من ملف JSON</string>\n  <string name=\"import_patch_selection_fail\">تعذر استيراد التعديل المحدد: %s</string>\n  <string name=\"import_patch_selection_success\">تم استيراد التعديل المحدد</string>\n  <string name=\"select_bundle_for_import\">حدد الحزمة للاستيراد إليها</string>\n  <string name=\"export_patch_selection\">تصدير التعديل المحدد</string>\n  <string name=\"export_patch_selection_description\">تصدير التعديل المحدد إلى ملف JSON</string>\n  <string name=\"export_patch_selection_fail\">تعذر تصدير التعديل المحدد: %s</string>\n  <string name=\"export_patch_selection_success\">تم تصدير التعديل المحدد</string>\n  <string name=\"select_bundle_for_export\">حدد الحزمة للتصدير منها</string>\n  <string name=\"patch_selection_packages\">التطبيقات ذات التحديدات المحفوظة</string>\n  <string name=\"patch_selection_entries\">إجمالي التعديلات المحددة</string>\n  <string name=\"reset_configuration\">إعادة تعيين التكوين</string>\n  <string name=\"reset_patch_selection\">تحديدات التعديل</string>\n  <string name=\"reset_patch_selection_description\">إعادة تعيين التعديل المحدد المخزن</string>\n  <string name=\"reset_patch_options\">خيارات التعديل</string>\n  <string name=\"reset_patch_options_description\">إعادة تعيين خيارات التعديل المخزنة</string>\n  <string name=\"reset_patch_selection_success\">تم إعادة تعيين التعديل المحدد</string>\n  <string name=\"patch_selection_reset_all\">إعادة تعيين التعديل المحدد عمومًا</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">أنت على وشك إعادة تعيين جميع التعديلات المحددة. ستحتاج إلى تحديد كل تعديل يدويًا مرة أخرى.</string>\n  <string name=\"patch_selection_reset_all_description\">يعيد تعيين جميع التعديلات المحددة</string>\n  <string name=\"patch_selection_reset_package\">إعادة تعيين التعديل المحدد للتطبيق</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">أنت على وشك إعادة تعيين التعديل المحدد للتطبيق \\\"%s\\\". سيتعين عليك تحديد كل تعديل يدويًا مرة أخرى.</string>\n  <string name=\"patch_selection_reset_package_description\">يعيد تعيين التعديل المحدد لتطبيق واحد</string>\n  <string name=\"patch_selection_reset_patches\">إعادة تعيين التعديل المحدد (فردي)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">أنت على وشك إعادة تعيين التعديل المحدد لـ \\\"%s\\\". سيتعين عليك تحديد كل تعديل يدويًا مرة أخرى.</string>\n  <string name=\"patch_selection_reset_patches_description\">يعيد تعيين التعديل المحدد لمجموعة محددة من التعديلات</string>\n  <string name=\"patch_options_reset_package\">إعادة تعيين خيارات التعديل للتطبيق</string>\n  <string name=\"patch_options_reset_package_dialog_description\">أنت على وشك إعادة تعيين خيارات التعديل للتطبيق \\\"%s\\\". سيتعين عليك إعادة تطبيق كل خيار مرة أخرى.</string>\n  <string name=\"patch_options_reset_package_description\">يعيد تعيين خيارات التعديل لتطبيق واحد</string>\n  <string name=\"patch_options_reset_patches\">إعادة تعيين خيارات التعديل (فردي)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">أنت على وشك إعادة تعيين خيارات التعديل لـ \\\"%s\\\". سيتعين عليك إعادة تطبيق كل خيار مرة أخرى.</string>\n  <string name=\"patch_options_reset_patches_description\">يعيد تعيين خيارات التعديل لمجموعة محددة من التعديلات</string>\n  <string name=\"patch_options_reset_all\">إعادة تعيين خيارات التعديل عمومًا</string>\n  <string name=\"patch_options_reset_all_dialog_description\">أنت على وشك إعادة تعيين جميع خيارات التعديل. سيتعين عليك إعادة تطبيق كل خيار مرة أخرى.</string>\n  <string name=\"patch_options_reset_all_description\">يعيد تعيين جميع خيارات التعديل</string>\n  <string name=\"downloaders\">أدوات التنزيل</string>\n  <string name=\"downloader_prereleases\">استخدام إصدارات ما قبل الإطلاق</string>\n  <string name=\"downloader_prereleases_description\">استخدام إصدارات ما قبل الإطلاق من أداة التنزيل الرئيسية</string>\n  <string name=\"downloader_state_loaded\">تم التحميل</string>\n  <string name=\"downloader_state_failed\">فشل التحميل. انقر للمزيد من التفاصيل.</string>\n  <string name=\"downloader_state_missing\">مفقود</string>\n  <string name=\"downloader_delete_apps_title\">حذف التطبيقات المحددة</string>\n  <string name=\"downloader_delete_apps_description\">هل أنت متأكد أنك تريد حذف التطبيقات المحددة؟</string>\n  <string name=\"downloader_delete_single_description\">هل أنت متأكد أنك تريد حذف \\\"%s\\\"؟</string>\n  <string name=\"downloader_settings_no_apps\">لم يتم العثور على تطبيقات تم تنزيلها.</string>\n  <string name=\"downloader_settings_no_apps_description\">ستظهر التطبيقات التي تم تنزيلها عبر ReVanced Manager هنا.</string>\n  <string name=\"downloader_url\">عنوان URL للمنزّل</string>\n  <string name=\"downloader_add\">إضافة منزّل</string>\n  <string name=\"select_downloader_type_dialog_description\">إضافة منزّلات جديدة من عنوان URL أو الملفات المحلية</string>\n  <string name=\"local_downloaders_description\">إضافة منزّلات من التخزين المحلي.</string>\n  <string name=\"remote_downloaders_description\">إضافة منزّلات من عنوان URL. يمكن تحديثها تلقائيًا.</string>\n  <string name=\"install_revanced_downloaders\">قم بتثبيت أدوات التنزيل للحصول على التطبيقات مباشرة داخل ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">تثبيت أدوات تنزيل ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">إلغاء تثبيت أدوات التنزيل؟</string>\n  <string name=\"cancel_downloader_install_description\">تثبيت أدوات التنزيل قيد التقدم. إذا غادرت الآن، فسيتم إلغاء التنزيل.</string>\n  <string name=\"downloader_sources_unavailable_title\">هذه المنزّلات مفقودة</string>\n  <string name=\"downloader_sources_unavailable_description\">انقر على زر التحديث لإصلاح ذلك.</string>\n  <string name=\"downloader_update_failed\">فشل تحديث المنزّل: %s</string>\n  <string name=\"downloader_replace_fail\">فشل استيراد المنزّل: %s</string>\n  <string name=\"search_apps\">البحث عن تطبيقات…</string>\n  <string name=\"loading_body\">جارٍ التحميل…</string>\n  <string name=\"downloading_patches\">جارٍ تنزيل التعديلات…</string>\n  <string name=\"options\">الخيارات</string>\n  <string name=\"ok\">موافق</string>\n  <string name=\"yes\">نعم</string>\n  <string name=\"no\">لا</string>\n  <string name=\"edit\">تحرير</string>\n  <string name=\"dialog_input_placeholder\">القيمة</string>\n  <string name=\"reset\">إعادة التعيين</string>\n  <string name=\"share\">مشاركة</string>\n  <string name=\"patch\">تعديل</string>\n  <string name=\"select_from_storage\">اختر من التخزين</string>\n  <string name=\"select_from_storage_description\">اختر ملف APK من التخزين باستخدام منتقي الملفات</string>\n  <string name=\"suggested_version_info\">الإصدار الموصى به: %s</string>\n  <string name=\"type_anything\">اكتب أي شيء للمتابعة</string>\n  <string name=\"search\">البحث عن التعديلات…</string>\n  <string name=\"apply\">تطبيق</string>\n  <string name=\"help\">مساعدة</string>\n  <string name=\"back\">رجوع</string>\n  <string name=\"warning\">تحذير</string>\n  <string name=\"add\">إضافة</string>\n  <string name=\"enable\">تمكين</string>\n  <string name=\"disable\">تعطيل</string>\n  <string name=\"close\">إغلاق</string>\n  <string name=\"clear\">مسح</string>\n  <string name=\"system\">النظام</string>\n  <string name=\"light\">فاتح</string>\n  <string name=\"dark\">داكن</string>\n  <string name=\"appearance\">المظهر</string>\n  <string name=\"networking\">الشبكة</string>\n  <string name=\"allow_metered_networks\">السماح بالشبكات ذات البيانات المحدودة</string>\n  <string name=\"allow_metered_networks_description\">يسمح بالتحديثات التلقائية على الشبكات ذات البيانات المحدودة.\\n    قد يستمر التطبيق في التحذير بشأن الشبكات ذات البيانات المحدودة للعمليات اليدوية.</string>\n  <string name=\"downloaded_apps\">التطبيقات التي تم تنزيلها</string>\n  <string name=\"process_runtime\">تشغيل أداة التعديل في عملية أخرى (تجريبي)</string>\n  <string name=\"process_runtime_description\">هذا أسرع ويسمح لـ أداة التعديل باستخدام ذاكرة أكبر</string>\n  <string name=\"process_runtime_memory_limit\">حد ذاكرة عملية أداة التعديل</string>\n  <string name=\"process_runtime_memory_limit_description\">الحد الأقصى للذاكرة التي يمكن أن تستخدمها عملية أداة التعديل</string>\n  <string name=\"debug_logs_export\">تصدير سجلات تصحيح الأخطاء</string>\n  <string name=\"debug_logs_export_read_failed\">فشل قراءة السجلات (رمز الخروج %d)</string>\n  <string name=\"debug_logs_export_failed\">فشل تصدير السجلات</string>\n  <string name=\"debug_logs_export_success\">السجلات المصدرة</string>\n  <string name=\"api_url\">عنوان URL لواجهة برمجة التطبيقات</string>\n  <string name=\"api_url_description\">واجهة برمجة التطبيقات المستخدمة لتنزيل الملفات الضرورية</string>\n  <string name=\"api_url_dialog_title\">تغيير عنوان API</string>\n  <string name=\"api_url_dialog_description\">تغيير عنوان URL لواجهة برمجة التطبيقات لـ ReVanced Manager. يستخدم ReVanced Manager واجهة برمجة التطبيقات لتنزيل التعديلات والتحديثات.</string>\n  <string name=\"api_url_dialog_warning\">يتصل ReVanced Manager بواجهة برمجة التطبيقات لتنزيل التعديلات والتحديثات. تأكد من أنك تثق بها.</string>\n  <string name=\"api_url_dialog_save\">تعيين</string>\n  <string name=\"api_url_dialog_reset\">إعادة تعيين عنوان URL لواجهة برمجة التطبيقات</string>\n  <string name=\"device\">الجهاز</string>\n  <string name=\"device_android_version\">إصدار Android</string>\n  <string name=\"device_model\">الموديل</string>\n  <string name=\"device_architectures\">معماريات وحدة المعالجة المركزية</string>\n  <string name=\"device_memory_limit\">حدود الذاكرة</string>\n  <string name=\"device_memory_limit_format\">%1$d ميغابايت (عادي) - %2$d ميغابايت (كبير)</string>\n  <string name=\"patches_force_download\">فرض تنزيل جميع التعديلات</string>\n  <string name=\"patches_reset\">إعادة تعيين التعديلات</string>\n  <string name=\"reset_onboarding\">إعادة تعيين الإعدادات الأولية</string>\n  <string name=\"reset_onboarding_description\">عرض شاشة الإعدادات الأولية عند تشغيل التطبيق التالي</string>\n  <string name=\"patching\">تعديل</string>\n  <string name=\"signing\">توقيع</string>\n  <string name=\"storage\">التخزين</string>\n  <string name=\"no_patch_found\">لا يمكن العثور على أي تعديل. تحقق من التعديلات الخاصة بك</string>\n  <string name=\"tab_apps\">التطبيقات</string>\n  <string name=\"tab_patches\">التعديلات</string>\n  <string name=\"delete\">حذف</string>\n  <string name=\"refresh\">تحديث</string>\n  <string name=\"continue_anyways\">متابعة على أي حال</string>\n  <string name=\"download_another_version\">تنزيل إصدار آخر</string>\n  <string name=\"download_app\">تنزيل التطبيق</string>\n  <string name=\"download_apk\">تنزيل ملف APK</string>\n  <string name=\"patches_download_fail\">فشل تنزيل التعديلات: %s</string>\n  <string name=\"api_not_working_title\">خدمة API متوقفة حاليًا</string>\n  <string name=\"api_not_working_description\">قد تتأثر بعض الميزات. تحقق من اتصالك أو عنوان URL الخاص بـ API في الإعدادات.</string>\n  <string name=\"patches_replace_fail\">فشل استيراد التعديلات: %s</string>\n  <string name=\"no_patched_apps_found\">لم يتم العثور على تطبيقات معدلة</string>\n  <string name=\"no_patched_apps_description\">ليس لديك حاليًا أي تطبيقات معدلة نعرفها. غير ذلك عن طريق تعديل تطبيقك الأول!</string>\n  <string name=\"patched_apps_section_title\">التطبيقات المُصححة</string>\n  <string name=\"patchable_apps_section_title\">التطبيقات التي يمكن تصحيحها</string>\n  <string name=\"no_patches_found\">لم يتم العثور على تعديلات</string>\n  <string name=\"no_patches_description\">ليس لديك أي تعديلات بعد. أضف تعديلات بالنقر على الزر أدناه!</string>\n  <string name=\"tap_on_patches\">اضغط على التعديلات للحصول على مزيد من المعلومات عنها</string>\n  <string name=\"patches_selected\">تم تحديد %s</string>\n  <string name=\"incompatible_patches\">تعديلات غير متوافقة</string>\n  <string name=\"universal_patches\">تعديلات شاملة</string>\n  <string name=\"patch_selection_reset_toast\">تم إعادة تعيين تحديد التعديل والخيارات إلى الإعدادات الافتراضية الموصى بها</string>\n  <string name=\"patch_options_reset_toast\">تم إعادة تعيين خيارات التعديل</string>\n  <string name=\"non_suggested_version_warning_title\">إصدار غير موصى به</string>\n  <string name=\"non_suggested_version_warning_description\">إصدار التطبيق الذي حددته لا يتطابق مع الإصدار الموصى به.\\nالرجاء استخدام الإصدار الموصى به: %s\\n\\nللمتابعة على أي حال، قم بتعطيل \\\"يتطلب إصدار التطبيق الموصى به\\\" في الإعدادات المتقدمة.</string>\n  <string name=\"selection_warning_title\">هل تريد التوقف عن استخدام الإعدادات الافتراضية؟</string>\n  <string name=\"selection_warning_description\">يوصى باستخدام تحديد التعديل والخيارات الافتراضية. قد يؤدي تغييرها إلى مشاكل غير متوقعة.\\n\\nتحتاج إلى تشغيل \\\"السماح بتغيير تحديد التعديل والخيارات\\\" في الإعدادات المتقدمة قبل تبديل التعديلات.</string>\n  <string name=\"universal_patch_warning_description\">التعديلات الشاملة لها استخدام أكثر عمومية ولا تعمل بنفس الموثوقية مثل التعديلات التي تستهدف تطبيقات معينة. قد تواجه مشاكل أثناء استخدامها.\\n\\nتحتاج إلى تشغيل \\\"السماح باستخدام التعديلات الشاملة\\\" في الإعدادات المتقدمة قبل استخدام التعديلات الشاملة.</string>\n  <string name=\"this_version\">هذا الإصدار</string>\n  <string name=\"universal\">أي تطبيق</string>\n  <string name=\"search_patches\">البحث عن تعديلات</string>\n  <string name=\"app_version_not_compatible\">هذا التعديل غير متوافق مع إصدار التطبيق المحدد (%1$s)\\n\\nإنه متوافق فقط مع الإصدار (الإصدارات) التالية: %2$s</string>\n  <string name=\"continue_with_version\">هل تريد المتابعة بهذا الإصدار؟</string>\n  <string name=\"version_not_compatible\">ليست كل التعديلات متوافقة مع هذا الإصدار (%s). هل تريد المتابعة على أي حال؟</string>\n  <string name=\"download_application\">هل تريد تنزيل التطبيق؟</string>\n  <string name=\"app_not_installed\">التطبيق الذي حددته غير مثبت. هل تريد تنزيله؟</string>\n  <string name=\"failed_to_load_apk\">فشل تحميل APK</string>\n  <string name=\"split_apk_not_supported\">لا يمكن تصحيح ملفات APK المقسمة</string>\n  <string name=\"loading\">جارٍ التحميل…</string>\n  <string name=\"not_installed\">غير مثبت</string>\n  <string name=\"installed\">مثبت</string>\n  <string name=\"app_info\">معلومات التطبيق</string>\n  <string name=\"uninstall\">إلغاء التثبيت</string>\n  <string name=\"unpatch\">إلغاء التعديل</string>\n  <string name=\"repatch\">إعادة التعديل</string>\n  <string name=\"install_type\">نوع التثبيت</string>\n  <string name=\"package_name\">اسم الحزمة</string>\n  <string name=\"original_package_name\">اسم الحزمة الأصلي</string>\n  <string name=\"applied_patches\">التعديلات المطبقة</string>\n  <string name=\"view_applied_patches\">عرض التعديلات المطبقة</string>\n  <string name=\"default_install\">الافتراضي</string>\n  <string name=\"mount_install\">تركيب</string>\n  <string name=\"mounted\">مركّب</string>\n  <string name=\"not_mounted\">غير مركّب</string>\n  <string name=\"mount\">تركيب</string>\n  <string name=\"unmount\">فك تركيب</string>\n  <string name=\"failed_to_mount\">فشل تركيب: %s</string>\n  <string name=\"failed_to_unmount\">فشل فك تركيب: %s</string>\n  <string name=\"unpatch_app\">إلغاء تعديل التطبيق؟</string>\n  <string name=\"unpatch_description\">هل أنت متأكد أنك تريد إلغاء تعديل هذا التطبيق؟</string>\n  <string name=\"downloader_invalid_version\">لم تجلب أداة التنزيل الإصدار الصحيح</string>\n  <string name=\"downloader_app_not_found\">لم تجد أداة التنزيل التطبيق</string>\n  <string name=\"downloader_error\">خطأ في أداة التنزيل: %s</string>\n  <string name=\"no_downloaders_installed\">لم يتم تثبيت أي أدوات تنزيل للتطبيقات!</string>\n  <string name=\"no_downloaders_trusted\">لم يتم الوثوق بأي أدوات تنزيل للتطبيقات! يرجى التحقق من إعداداتك.</string>\n  <string name=\"already_patched\">تم تعديله بالفعل</string>\n  <string name=\"patch_selector_sheet_filter_title\">تصفية</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">التوافق</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">حزم</string>\n  <string name=\"patch_selector_sheet_actions_title\">إجراءات</string>\n  <string name=\"restore_default_selection\">استعادة التحديد الافتراضي</string>\n  <string name=\"deselect_all\">إلغاء تحديد الكل</string>\n  <string name=\"invert_selection\">عكس التحديد</string>\n  <string name=\"deselect_all_except\">إلغاء تحديد الكل باستثناء %s</string>\n  <string name=\"scope_dialog_title\">تطبيق على</string>\n  <string name=\"scope_all_patches\">كل التعديلات</string>\n  <string name=\"scope_bundle_patches\">%s فقط</string>\n  <string name=\"string_option_menu_description\">المزيد من الخيارات</string>\n  <string name=\"option_preset_custom_value\">قيمة مخصصة</string>\n  <string name=\"path_selector\">تحديد من التخزين</string>\n  <string name=\"path_selector_parent_dir\">المجلد السابق</string>\n  <string name=\"path_selector_dirs\">المجلدات</string>\n  <string name=\"path_selector_files\">الملفات</string>\n  <string name=\"show_password_field\">عرض كلمة المرور</string>\n  <string name=\"hide_password_field\">إخفاء كلمة المرور</string>\n  <string name=\"installer\">أداة التثبيت</string>\n  <string name=\"install_app\">تثبيت</string>\n  <string name=\"install_app_success\">تم تثبيت التطبيق</string>\n  <string name=\"install_app_fail\">فشل تثبيت التطبيق: %s</string>\n  <string name=\"reinstall_app_fail\">فشل إعادة تثبيت التطبيق: %s</string>\n  <string name=\"uninstall_app_fail\">فشل إلغاء تثبيت التطبيق: %s</string>\n  <string name=\"open_app\">فتح</string>\n  <string name=\"save_apk\">حفظ APK</string>\n  <string name=\"save_apk_success\">تم حفظ APK</string>\n  <string name=\"sign_fail\">فشل توقيع APK: %s</string>\n  <string name=\"save_logs\">حفظ السجلات</string>\n  <string name=\"save_as_file\">حفظ في الملفات</string>\n  <string name=\"export_patcher_logs\">تصدير سجلات أداة التعديل</string>\n  <string name=\"save_logs_success\">تم حفظ السجلات</string>\n  <string name=\"downloader_activity_dialog_body\">مطلوب تفاعل المستخدم للمتابعة مع أداة التنزيل هذه.</string>\n  <string name=\"select_install_type\">تحديد نوع التثبيت</string>\n  <string name=\"patcher_step_group_preparing\">جارٍ التحضير</string>\n  <string name=\"patcher_step_load_patches\">تحميل التعديلات</string>\n  <string name=\"patcher_step_unpack\">تحضير أداة التعديل</string>\n  <string name=\"patcher_step_group_patching\">جارٍ التعديل</string>\n  <string name=\"patcher_step_group_saving\">جارٍ الحفظ</string>\n  <string name=\"patcher_step_write_patched\">كتابة ملف APK المعدل</string>\n  <string name=\"patcher_step_sign_apk\">توقيع ملف APK المعدل</string>\n  <string name=\"patcher_notification_title\">التعديل قيد التقدم…</string>\n  <string name=\"patcher_notification_text\">انقر للعودة إلى أداة التعديل</string>\n  <string name=\"patcher_stop_confirm_title\">إيقاف أداة التعديل</string>\n  <string name=\"patcher_stop_confirm_description\">هل أنت متأكد أنك تريد إيقاف عملية التعديل؟</string>\n  <string name=\"patcher_install_in_progress\">التثبيت قيد التقدم. يرجى الانتظار</string>\n  <string name=\"execute_patches\">تنفيذ التعديلات</string>\n  <string name=\"executing_patch\">تنفيذ %s</string>\n  <string name=\"failed_to_execute_patch\">فشل تنفيذ %s</string>\n  <string name=\"step_completed\">مكتمل</string>\n  <string name=\"step_failed\">فشل</string>\n  <string name=\"step_running\">قيد التشغيل</string>\n  <string name=\"step_waiting\">انتظار</string>\n  <string name=\"expand_content\">توسيع</string>\n  <string name=\"collapse_content\">طي</string>\n  <string name=\"drag_handle\">إعادة ترتيب</string>\n  <string name=\"more\">المزيد</string>\n  <string name=\"less\">أقل</string>\n  <string name=\"continue_\">متابعة</string>\n  <string name=\"dismiss\">تجاهل</string>\n  <string name=\"view_announcement\">عرض الإعلان</string>\n  <string name=\"permanent_dismiss\">لا تظهر هذا مرة أخرى</string>\n  <string name=\"donate\">تبرع</string>\n  <string name=\"website\">الموقع الإلكتروني</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">اتصال</string>\n  <string name=\"license\">الترخيص</string>\n  <string name=\"source\">المصدر</string>\n  <string name=\"repository\">المستودع</string>\n  <string name=\"bundle_information_by_author\">بواسطة %1$s</string>\n  <string name=\"version\">الإصدار</string>\n  <string name=\"version_compatibility_warning\">قد يكون الإصدار المحدد غير متوافق مع التصحيحات المحددة</string>\n  <string name=\"submit_feedback\">إرسال مشكلة أو ملاحظات</string>\n  <string name=\"submit_feedback_description\">ساعدنا في تحسين هذا التطبيق</string>\n  <string name=\"developer_options\">خيارات المطور</string>\n  <string name=\"developer_options_description\">خيارات لتصحيح الأخطاء</string>\n  <string name=\"patches_update_success\">تم التحديث بنجاح</string>\n  <string name=\"patches_update_unavailable\">لا يوجد تحديث متاح</string>\n  <string name=\"view_patches\">عرض التعديلات</string>\n  <string name=\"patches_view_any_version\">أي إصدار</string>\n  <string name=\"patches_view_any_package\">أي حزمة</string>\n  <string name=\"patches_delete_single_dialog_description\">هل أنت متأكد أنك تريد حذف \\\"%s\\\"؟</string>\n  <string name=\"patches_delete_multiple_dialog_description\">هل أنت متأكد أنك تريد حذف التعديلات المحددة؟</string>\n  <string name=\"announcements\">الإعلانات</string>\n  <string name=\"archive\">الأرشيف</string>\n  <string name=\"about_revanced_manager\">حول ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager هو تطبيق Android يستخدم ReVanced Patcher لتعديل تطبيقات Android. يتيح لك تنزيل التطبيقات وتعديلها باستخدام تعديلات مخصصة، وإدارة عملية التعديل.</string>\n  <string name=\"developer_options_taps\">%d نقرة متبقية</string>\n  <string name=\"developer_options_enabled\">تم تمكين خيارات المطور</string>\n  <string name=\"developer_options_already_enabled\">خيارات المطور ممكّنة بالفعل</string>\n  <string name=\"update_available\">يتوفر تحديث</string>\n  <string name=\"current_version\">الإصدار الحالي: %s</string>\n  <string name=\"new_version\">الإصدار الجديد: %s</string>\n  <string name=\"ready_to_install_update\">جاهز لتثبيت التحديث</string>\n  <string name=\"update_completed\">تم تثبيت التحديث</string>\n  <string name=\"install_update_manager_failed\">فشل تثبيت التحديث</string>\n  <string name=\"manual_update_check\">التحقق من وجود تحديثات</string>\n  <string name=\"view_update\">عرض التحديث</string>\n  <string name=\"manual_update_check_description\">التحقق اليدوي من توفر تحديثات</string>\n  <string name=\"update_checking_manager\">التحقق من التحديثات عند التشغيل</string>\n  <string name=\"update_checking_manager_description\">التحقق من وجود إصدارات جديدة من ReVanced Manager عند بدء التطبيق</string>\n  <string name=\"update_checking_downloader\">التحقق من تحديثات أدوات تنزيل ReVanced عند التشغيل</string>\n  <string name=\"update_checking_downloader_description\">التحقق من تحديثات أدوات تنزيل ReVanced المثبتة عند بدء تشغيل التطبيق</string>\n  <string name=\"manager_prereleases\">استخدام إصدارات ما قبل الإطلاق</string>\n  <string name=\"manager_prereleases_description\">استخدام إصدارات ما قبل الإطلاق من ReVanced Manager</string>\n  <string name=\"prereleases_warning\">قد تكون الإصدارات التجريبية غير مستقرة وتحتوي على أخطاء. قد تواجه أعطالًا أو فقدانًا للبيانات أو مشكلات أخرى غير متوقعة. قم بتمكين هذا فقط إذا كنت مرتاحًا لهذه المخاطر.</string>\n  <string name=\"changelog\">عرض سجل التغييرات</string>\n  <string name=\"changelog_loading\">جارٍ تحميل سجل التغييرات</string>\n  <string name=\"changelog_download_fail\">فشل تنزيل سجل التغييرات: %s</string>\n  <string name=\"changelog_description\">اطلع على آخر التغييرات في هذا التحديث</string>\n  <string name=\"battery_optimization_notification\">يجب إيقاف تحسينات البطارية لكي يعمل ReVanced Manager بشكل صحيح في الخلفية. انقر هنا لإيقاف التحسينات.</string>\n  <string name=\"installing_manager_update\">جارٍ تثبيت التحديث…</string>\n  <string name=\"downloading_manager_update\">جارٍ تنزيل التحديث…</string>\n  <string name=\"download_manager_failed\">فشل تنزيل التحديث: %s</string>\n  <string name=\"cancel\">إلغاء</string>\n  <string name=\"save\">حفظ</string>\n  <string name=\"save_with_count\">حفظ (%1$s)</string>\n  <string name=\"update\">تحديث</string>\n  <string name=\"empty\">فارغ</string>\n  <string name=\"installing_message\">انقر على <b>تحديث</b> عندما يطلب ذلك.\nسيتم إغلاق ReVanced Manager عند التحديث.</string>\n  <string name=\"no_changelogs_found\">لم يتم العثور على سجلات التغييرات</string>\n  <string name=\"just_now\">الآن</string>\n  <string name=\"minutes_ago\">منذ %s دقيقة</string>\n  <string name=\"hours_ago\">منذ %s ساعة</string>\n  <string name=\"days_ago\">منذ %s يوم</string>\n  <string name=\"invalid_date\">تاريخ غير صالح</string>\n  <string name=\"disable_battery_optimization\">تعطيل تحسين البطارية</string>\n  <string name=\"input_dialog_value_invalid\">قيمة غير صالحة</string>\n  <string name=\"option_required\">هذا الخيار مطلوب</string>\n  <string name=\"required_options_screen\">الخيارات المطلوبة</string>\n  <string name=\"failed_to_check_updates\">فشل التحقق من توفر تحديثات: %s</string>\n  <string name=\"no_update_available\">لا يوجد تحديث متاح</string>\n  <string name=\"no_announcements_found\">لم يتم العثور على إعلانات</string>\n  <string name=\"update_check\">جارٍ التحقق من توفر تحديثات…</string>\n  <string name=\"dismiss_temporary\">ليس الآن</string>\n  <string name=\"update_available_dialog_description\">يتوفر إصدار جديد من ReVanced Manager (%s).</string>\n  <string name=\"failed_to_download_update\">فشل تنزيل التحديث: %s</string>\n  <string name=\"download\">تنزيل</string>\n  <string name=\"download_confirmation_metered\">أنت متصل حالياً بشبكة محدودة البيانات، وقد يتم تطبيق رسوم بيانات من مزود الخدمة الخاص بك.\n\nهل ما زلت تريد المتابعة؟</string>\n  <string name=\"download_update_confirmation\">تنزيل التحديث؟</string>\n  <string name=\"no_contributors_found\">لم يتم العثور على مساهمين</string>\n  <string name=\"select\">تحديد</string>\n  <string name=\"select_deselect_all\">تحديد أو إلغاء تحديد الكل</string>\n  <string name=\"select_patches_type_dialog_description\">إضافة تعديلات جديدة من عنوان URL أو الملفات المحلية</string>\n  <string name=\"local_patches_description\">إضافة تعديلات من التخزين المحلي.</string>\n  <string name=\"remote_patches_description\">إضافة تعديلات من عنوان URL. يمكن للتعديلات التحديث تلقائيًا.</string>\n  <string name=\"recommended\">مُوصَى به</string>\n  <string name=\"installation_failed_dialog_title\">فشل التثبيت</string>\n  <string name=\"installation_cancelled_dialog_title\">تم إلغاء التثبيت</string>\n  <string name=\"installation_blocked_dialog_title\">تم حظر التثبيت</string>\n  <string name=\"installation_conflict_dialog_title\">تعارض التثبيت</string>\n  <string name=\"installation_incompatible_dialog_title\">تثبيت غير متوافق</string>\n  <string name=\"installation_invalid_dialog_title\">تثبيت غير صالح</string>\n  <string name=\"installation_storage_issue_dialog_title\">مساحة تخزين غير كافية</string>\n  <string name=\"installation_timeout_dialog_title\">انتهت مهلة التثبيت</string>\n  <string name=\"installation_failed_description\">فشل التثبيت لسبب غير معروف. هل تريد المحاولة مرة أخرى؟</string>\n  <string name=\"installation_aborted_description\">تم إلغاء التثبيت يدوياً. هل تريد المحاولة مرة أخرى؟</string>\n  <string name=\"installation_blocked_description\">تم حظر التثبيت. راجع إعدادات أمان جهازك وحاول مرة أخرى.</string>\n  <string name=\"installation_conflict_description\">تم منع التثبيت بسبب وجود تثبيت سابق للتطبيق. هل تريد إلغاء تثبيت التطبيق المثبت والمحاولة مرة أخرى؟</string>\n  <string name=\"installation_incompatible_description\">التطبيق غير متوافق مع هذا الجهاز. استخدم ملف APK متوافق مع هذا الجهاز وحاول مرة أخرى.</string>\n  <string name=\"installation_invalid_description\">التطبيق غير صالح. هل تريد إلغاء تثبيت التطبيق والمحاولة مرة أخرى؟</string>\n  <string name=\"installation_storage_issue_description\">لا يمكن تثبيت التطبيق بسبب عدم كفاية مساحة التخزين. قم بتحرير بعض المساحة وحاول مرة أخرى.</string>\n  <string name=\"installation_timeout_description\">استغرق التثبيت وقتاً طويلاً جداً. هل تريد المحاولة مرة أخرى؟</string>\n  <string name=\"reinstall\">إعادة التثبيت</string>\n  <string name=\"show\">عرض</string>\n  <string name=\"debugging\">تصحيح الأخطاء</string>\n  <string name=\"about_device\">حول الجهاز</string>\n  <string name=\"enter_url\">أدخل عنوان URL</string>\n  <string name=\"next\">التالي</string>\n  <string name=\"auto_update\">تحديث تلقائي</string>\n  <string name=\"add_patches\">إضافة تعديلات</string>\n  <string name=\"auto_update_description\">التحديث تلقائيًا عند توفر إصدار جديد</string>\n  <string name=\"patches_prereleases\">استخدام إصدارات ما قبل الإطلاق</string>\n  <string name=\"patches_prereleases_description\">استخدام إصدارات ما قبل الإطلاق من %s</string>\n  <string name=\"patches_url\">عنوان URL للتعديلات</string>\n  <string name=\"incompatible_patches_dialog\">هذه التعديلات غير متوافقة مع إصدار التطبيق المحدد (%1$s).\n\nانقر على التعديلات لمشاهدة المزيد من التفاصيل.</string>\n  <string name=\"incompatible_patch\">تعديل غير متوافق</string>\n  <string name=\"any_version\">أيها</string>\n  <string name=\"never_show_again\">لا تعرض مرة أخرى أبدًا</string>\n  <string name=\"show_manager_update_dialog_on_launch\">عرض رسالة التحديث عند التشغيل</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">عرض إشعار منبثق عند توفر تحديث جديد عند بدء التشغيل</string>\n  <string name=\"failed_to_import_keystore\">فشل استيراد مخزن المفاتيح</string>\n  <string name=\"export\">تصدير</string>\n  <string name=\"confirm\">تأكيد</string>\n  <string name=\"new_announcement\">إعلان جديد:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"zero\">%d تعديلات</item>\n    <item quantity=\"one\">%d تعديل</item>\n    <item quantity=\"two\">%d تعديلان</item>\n    <item quantity=\"few\">%d تعديلات</item>\n    <item quantity=\"many\">%d تعديلات</item>\n    <item quantity=\"other\">%d تعديلات</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"zero\">تنفيذ %d تعديلات</item>\n    <item quantity=\"one\">تنفيذ %d تعديل</item>\n    <item quantity=\"two\">تنفيذ %d تعديلان</item>\n    <item quantity=\"few\">تنفيذ %d تعديلات</item>\n    <item quantity=\"many\">تنفيذ %d تعديلات</item>\n    <item quantity=\"other\">تنفيذ %d تعديلات</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"zero\">تم تحديد %d</item>\n    <item quantity=\"one\">تم تحديد %d</item>\n    <item quantity=\"two\">تم تحديد %d</item>\n    <item quantity=\"few\">تم تحديد %d</item>\n    <item quantity=\"many\">تم تحديد %d</item>\n    <item quantity=\"other\">تم تحديد %d</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-as-rIN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">পেচাৰ</string>\n  <string name=\"onboarding_welcome_to\">স্বাগতম</string>\n  <string name=\"onboarding_welcome_back\">নমস্কাৰ! এইটো নতুন</string>\n  <string name=\"onboarding_apps_subtitle\">আপুনি এতিয়া পেচ কৰিবলৈ এটা এপ বাছনি কৰিব পাৰে অথবা পিছত কৰিব পাৰে</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager আৰু পেচসমূহ আপডেট ৰাখিবলৈ স্বয়ংক্ৰিয় আপডেটসমূহ ছেট আপ কৰক</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager-এ আপোনাৰ ডিভাইচ ইন্টাৰনেটৰ সৈতে সংযুক্ত থাকিলে প্ৰাৰম্ভিক সংস্কৰণসমূহ ডাউনল\\'ড কৰিবলৈ %s লৈ সংযোগ কৰিব।</string>\n  <string name=\"retry\">পুনৰ চেষ্টা কৰক</string>\n  <string name=\"onboarding_skip\">এতিয়াৰ বাবে এৰি দিয়ক</string>\n  <string name=\"onboarding_recommended_version\">পৰামৰ্শিত সংস্কৰণ: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">অনুমতিসমূহ এৰি দিবনে?</string>\n  <string name=\"onboarding_permissions_skip_description\">প্ৰয়োজনীয় অনুমতিসমূহ অবিহনে, কিছুমান বৈশিষ্ট্য সঠিকভাৱে কাম নকৰিবও পাৰে। আপুনি পিছত এপ ছেটিংছত সেইবোৰ প্ৰদান কৰিব পাৰে।</string>\n  <string name=\"onboarding_permissions_skip_anyway\">তথাপিও এৰি দিয়ক</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager-ক সঠিকভাৱে কাম কৰিবলৈ কিছুমান অনুমতিৰ প্ৰয়োজন।</string>\n  <string name=\"permission_install_apps\">অচিনাকি এপ ইনষ্টল কৰক</string>\n  <string name=\"permission_install_apps_description\">পেচ কৰা এপ্লিকেচন ইনষ্টল কৰিবলৈ প্ৰয়োজন</string>\n  <string name=\"permission_notifications\">জাননীসমূহ</string>\n  <string name=\"permission_battery\">বেটাৰী অনুকূলন</string>\n  <string name=\"permission_battery_description\">পৃষ্ঠভূমিত পেচ কৰাত বাধা নপৰাকৈ ৰাখে</string>\n  <string name=\"permission_grant\">অনুমোদন কৰক</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager ডাউনল\\'ডাৰ হ\\'ষ্ট</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager ডাউনল\\'ডাৰবোৰলৈ অভিগম নিয়ন্ত্ৰণ কৰিবলৈ ব্যৱহাৰ কৰা হয়। কেৱল ReVanced Manager ৰ ওচৰত এইটো আছে।</string>\n  <string name=\"fab_patch_app\">এটা এপ পেচ কৰক</string>\n  <string name=\"fab_add_patches\">পেচসমূহ যোগ কৰক</string>\n  <string name=\"new_downloader_notification\">নতুন ডাউনলোডৰ(সমূহ) উপলব্ধ। সেইবোৰ কনফিগাৰ কৰিবলৈ ইয়াত ক্লিক কৰক।</string>\n  <string name=\"patches_not_downloaded\">পেচসমূহ ডাউনলোড কৰা হোৱা নাই।</string>\n  <string name=\"app_source_dialog_option_auto_description\">ইনষ্টল কৰা এপ ব্যৱহাৰ কৰক, তাৰ পিছত ডাউনলোড কৰা APK, তাৰ পিছত উপলব্ধ ডাউনলোডাৰসমূহ</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">কোনো সুসংগত এপ বা ডাউনল’ডাৰ উপলব্ধ নহয়</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">ৰুট এক্সেছ অবিহনে মাউণ্ট কৰা এপবোৰ পুনৰ পেচ কৰিব নোৱাৰি</string>\n  <string name=\"patch_selector_item\">পেচসমূহ নিৰ্বাচন কৰক</string>\n  <string name=\"patch_selector_item_description\">%d পেচ নিৰ্বাচিত হৈছে</string>\n  <string name=\"patch_selection_changed_warning\">পেচসমূহৰ নিৰ্বাচন সলনি কৰা হৈছে</string>\n  <string name=\"apk_source_selector_item\">APK উৎস নিৰ্বাচন কৰক</string>\n  <string name=\"apk_source_auto\">স্বয়ংক্ৰিয়</string>\n  <string name=\"apk_source_auto_installed\">স্বয়ংক্ৰিয় · ইনষ্টল কৰা APK ব্যৱহাৰ কৰি</string>\n  <string name=\"apk_source_auto_downloaded\">স্বয়ংক্ৰিয় · ডাউনলোড কৰা APK ব্যৱহাৰ কৰি</string>\n  <string name=\"apk_source_auto_downloader\">স্বয়ংক্রিয় · উপলব্ধ ডাউনলোডাৰ ব্যৱহাৰ কৰি</string>\n  <string name=\"apk_source_auto_storage\">স্বয়ংক্রিয় · সংৰক্ষণৰ পৰা বাছক</string>\n  <string name=\"apk_source_downloaded\">ইতিমধ্যে ডাউনলোড কৰা হৈছে</string>\n  <string name=\"auto_updates_dialog_description\">আপুনি ReVanced Manager-ক তলত দিয়া উপাদানসমূহৰ বাবে সময়ে সময়ে আপডেট পৰীক্ষা কৰিবলৈ বিচাৰেনে?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced পেচসমূহ</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: ডাউনলোডারসমূহ</string>\n  <string name=\"auto_updates_dialog_note\">এই ছেটিংসমূহ পিছত সলনি কৰিব পাৰি।\n\n    ReVanced Manager-এ আপোনাৰ ডিভাইচ ইন্টাৰনেটৰ সৈতে সংযুক্ত থাকিলে প্ৰাৰম্ভিক সংস্কৰণসমূহ ডাউনল\\'ড কৰিবলৈ %s লৈ সংযোগ কৰিব।</string>\n  <string name=\"announcements_filter_tag\">টেগ অনুসৰি ফিল্টাৰ কৰক</string>\n  <string name=\"announcements_show_archived\">আৰ্কাইভ কৰা দেখুৱাওক</string>\n  <string name=\"updates_description\">আপডেটৰ বাবে পৰীক্ষা কৰক আৰু সলনি তালিকাসমূহ চাওক</string>\n  <string name=\"downloads_description\">ডাউনলোডাৰসকল আৰু ডাউনলোড কৰা এপসমূহ</string>\n  <string name=\"safeguards_toggled_warning\">নিৰাপত্তাসমূহ টগল কৰা হৈছে</string>\n  <string name=\"about_app_name\">%1$s বিষয়ে</string>\n  <string name=\"search_languages\">ভাষাসমূহ বিচাৰক…</string>\n  <string name=\"keystore\">কীষ্ট\\'ৰ</string>\n  <string name=\"patches_selections\">পেচ নিৰ্বাচনসমূহ</string>\n  <string name=\"select_bundle_for_import\">আমদানি কৰিবলৈ বাণ্ডিল নিৰ্বাচন কৰক</string>\n  <string name=\"select_bundle_for_export\">ৰপ্তানি কৰিবলৈ বাণ্ডিল নিৰ্বাচন কৰক</string>\n  <string name=\"patch_selection_packages\">সংৰক্ষিত নিৰ্বাচন থকা এপসমূহ</string>\n  <string name=\"patch_selection_entries\">মুঠ নিৰ্বাচিত পেচসমূহ</string>\n  <string name=\"reset_configuration\">কনফিগাৰেশ্বন ৰিছেট কৰক</string>\n  <string name=\"reset_patch_selection\">পেচ নিৰ্বাচনসমূহ</string>\n  <string name=\"reset_patch_options\">পেচ বিকল্পসমূহ</string>\n  <string name=\"downloaders\">ডাউনলোডাৰসকল</string>\n  <string name=\"downloader_prereleases\">প্ৰি-ৰিলিজ ব্যৱহাৰ কৰক</string>\n  <string name=\"downloader_prereleases_description\">মূল ডাউনলোডাৰৰ প্ৰি-ৰিলিজ সংস্কৰণসমূহ ব্যৱহাৰ কৰক</string>\n  <string name=\"downloader_state_loaded\">ল\\'ড কৰা হৈছে</string>\n  <string name=\"downloader_state_failed\">লোড কৰাত ব্যৰ্থ হৈছে। অধিক বিৱৰণৰ বাবে ক্লিক কৰক</string>\n  <string name=\"downloader_state_missing\">নাই</string>\n  <string name=\"downloader_delete_apps_title\">নিৰ্বাচিত এপসমূহ বিলোপ কৰক</string>\n  <string name=\"downloader_delete_apps_description\">আপুনি নিশ্চিতনে যে আপুনি নিৰ্বাচিত এপসমূহ বিলোপ কৰিব বিচাৰে?</string>\n  <string name=\"downloader_delete_single_description\">আপুনি নিশ্চিতনে যে আপুনি \\\"%s\\\" বিলোপ কৰিব বিচাৰে?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager-ৰ জৰিয়তে ডাউনলোড কৰা এপসমূহ ইয়াত দেখা যাব।</string>\n  <string name=\"downloader_url\">ডাউনলোডাৰ URL</string>\n  <string name=\"downloader_add\">ডাউনলোডাৰ যোগ কৰক</string>\n  <string name=\"select_downloader_type_dialog_description\">URL বা স্থানীয় ফাইলৰ পৰা নতুন ডাউনলোডাৰ যোগ কৰক</string>\n  <string name=\"local_downloaders_description\">স্থানীয় সংৰক্ষণৰ পৰা ডাউনলোডাৰ যোগ কৰক।</string>\n  <string name=\"remote_downloaders_description\">URL ৰ পৰা ডাউনলোডাৰ যোগ কৰক। আপোনা-আপুনি আপডেইট কৰিব পাৰি।</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager-ৰ ভিতৰতে এপসমূহ পাবলৈ ডাউনলোডৰসমূহ ইনষ্টল কৰক।</string>\n  <string name=\"install_revanced_downloader\">ReVanced ডাউনলোডৰসমূহ ইনষ্টল কৰক</string>\n  <string name=\"cancel_downloader_install_title\">ডাউনলোডৰসমূহৰ ইনষ্টলেচন বাতিল কৰিবনে?</string>\n  <string name=\"cancel_downloader_install_description\">ডাউনলোডৰসমূহৰ ইনষ্টলেচন চলি আছে। যদি আপুনি এতিয়া এৰি দিয়ে, ডাউনলোডটো বাতিল কৰা হ\\'ব।</string>\n  <string name=\"downloader_sources_unavailable_title\">এই ডাউনলোডাৰবোৰ হেৰাই গৈছে</string>\n  <string name=\"downloader_sources_unavailable_description\">ইয়াক ঠিক কৰিবলৈ আপডেইট বুটামত ক্লিক কৰক।</string>\n  <string name=\"downloader_update_failed\">ডাউনলোডাৰ আপডেইট কৰাত ব্যৰ্থ হৈছে: %s</string>\n  <string name=\"downloader_replace_fail\">ডাউনলোডাৰ আমদানি কৰাত ব্যৰ্থ হৈছে: %s</string>\n  <string name=\"select_from_storage_description\">ফাইল পিকাৰ ব্যৱহাৰ কৰি ষ্টোৰেজৰ পৰা এটা APK ফাইল নিৰ্বাচন কৰক</string>\n  <string name=\"enable\">সক্ৰিয় কৰক</string>\n  <string name=\"disable\">নিষ্ক্ৰিয় কৰক</string>\n  <string name=\"process_runtime_memory_limit_description\">পেচাৰ প্ৰক্ৰিয়াই ব্যৱহাৰ কৰিব পৰা স্মৃতিৰ সৰ্বোচ্চ পৰিমাণ</string>\n  <string name=\"reset_onboarding\">অনব\\'ৰ্ডিং ৰিছেট কৰক</string>\n  <string name=\"reset_onboarding_description\">পৰৱৰ্তী এপ মুকলি কৰোঁতে অনব\\'ৰ্ডিং স্ক্ৰীণ দেখুৱাওক</string>\n  <string name=\"api_not_working_title\">API সেৱা বৰ্তমান বন্ধ আছে।</string>\n  <string name=\"api_not_working_description\">কিছুমান বৈশিষ্ট্য প্ৰভাৱিত হ\\'ব পাৰে। আপোনাৰ সংযোগ বা ছেটিংছত API URL পৰীক্ষা কৰক।</string>\n  <string name=\"no_patched_apps_found\">কোনো পেচ কৰা এপ পোৱা নগ\\'ল</string>\n  <string name=\"no_patched_apps_description\">আমি জনা মতে আপোনাৰ বৰ্তমান কোনো পেচ কৰা এপ নাই। আপোনাৰ প্ৰথম এপটো পেচ কৰি সেইটো সলনি কৰক!</string>\n  <string name=\"patched_apps_section_title\">পেচ কৰা এপ্লিকেচনসমূহ</string>\n  <string name=\"patchable_apps_section_title\">পেচ কৰিব পৰা এপ্লিকেচনসমূহ</string>\n  <string name=\"no_patches_found\">কোনো পেচ পোৱা নগ\\'ল</string>\n  <string name=\"no_patches_description\">আপোনাৰ এতিয়ালৈকে কোনো পেচ নাই। তলৰ বুটামত টেপ কৰি পেচসমূহ যোগ কৰক!</string>\n  <string name=\"split_apk_not_supported\">বিভক্ত APK পেচ কৰিব নোৱাৰি</string>\n  <string name=\"no_downloaders_installed\">কোনো এপ ডাউনলোডৰ ইনষ্টল কৰা হোৱা নাই!</string>\n  <string name=\"no_downloaders_trusted\">কোনো এপ ডাউনলোডৰ বিশ্বাসযোগ্য কৰা হোৱা নাই! অনুগ্ৰহ কৰি আপোনাৰ ছেটিংছ পৰীক্ষা কৰক।</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">প্যাকেজসমূহ</string>\n  <string name=\"patch_selector_sheet_actions_title\">কাৰ্য্যসমূহ</string>\n  <string name=\"restore_default_selection\">ডিফল্ট বাছনি পুনৰুদ্ধাৰ কৰক</string>\n  <string name=\"deselect_all\">সকলো বাছনিমুক্ত কৰক</string>\n  <string name=\"invert_selection\">বাছনি ওলোটা কৰক</string>\n  <string name=\"deselect_all_except\">%s বাহিৰে সকলোবোৰ বাছনিহীন কৰক</string>\n  <string name=\"scope_dialog_title\">প্ৰয়োগ কৰক</string>\n  <string name=\"scope_all_patches\">সকলো পেচ</string>\n  <string name=\"scope_bundle_patches\">কেৱল %s</string>\n  <string name=\"save_as_file\">ফাইললৈ সংৰক্ষণ কৰক</string>\n  <string name=\"export_patcher_logs\">পেচাৰ ল\\'গসমূহ ৰপ্তানি কৰক</string>\n  <string name=\"save_logs_success\">ল\\'গসমূহ সংৰক্ষিত হৈছে</string>\n  <string name=\"downloader_activity_dialog_body\">এই ডাউনলোডাৰৰ সৈতে আগবাঢ়িবলৈ ব্যৱহাৰকাৰীৰ ক্ৰিয়া-কলাপৰ প্ৰয়োজন।</string>\n  <string name=\"patcher_step_unpack\">পেচাৰ প্ৰস্তুত কৰক</string>\n  <string name=\"view_announcement\">ঘোষণা চাওক</string>\n  <string name=\"license\">অনুজ্ঞাপত্ৰ</string>\n  <string name=\"source\">উৎস</string>\n  <string name=\"repository\">ৰিপ\\'জিটৰী</string>\n  <string name=\"bundle_information_by_author\">%1$s দ্বাৰা</string>\n  <string name=\"version_compatibility_warning\">নিৰ্বাচিত সংস্কৰণটো নিৰ্বাচিত পেচসমূহৰ সৈতে অসঙ্গতিপূৰ্ণ হ\\'ব পাৰে</string>\n  <string name=\"announcements\">ঘোষণাসমূহ</string>\n  <string name=\"archive\">আৰ্কাইভ</string>\n  <string name=\"view_update\">আপডেট চাওক</string>\n  <string name=\"update_checking_downloader\">মুকলি কৰোঁতে ReVanced ডাউনলোডৰৰ আপডেটসমূহৰ বাবে পৰীক্ষা কৰক</string>\n  <string name=\"update_checking_downloader_description\">যেতিয়া এপ্লিকেচন আৰম্ভ হয়, ইনষ্টল কৰা ReVanced ডাউনলোডৰসমূহৰ আপডেটসমূহৰ বাবে পৰীক্ষা কৰক।</string>\n  <string name=\"prereleases_warning\">প্ৰি-ৰিলিজ সংস্কৰণসমূহ অস্থিৰ হ\\'ব পাৰে আৰু বাগ থাকিব পাৰে। আপুনি ক্ৰেচ, ডেটা হেৰুৱা, অথবা অন্য অপ্রত্যাশিত সমস্যাৰ সন্মুখীন হ\\'ব পাৰে। যদি আপুনি এই বিপদাশংকাবোৰৰ সৈতে স্বস্তিবোধ কৰে তেন্তেহে এইটো সক্ৰিয় কৰক।</string>\n  <string name=\"changelog\">সলনি তালিকাসমূহ চাওক</string>\n  <string name=\"no_announcements_found\">কোনো জাননী পোৱা নগ\\'ল</string>\n  <string name=\"new_announcement\">নতুন জাননী:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d পেচ</item>\n    <item quantity=\"other\">%d পেচবোৰ</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d পেচ কাৰ্যকৰী কৰক</item>\n    <item quantity=\"other\">%d পেচবোৰ কাৰ্যকৰী কৰক</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d নিৰ্বাচিত</item>\n    <item quantity=\"other\">%d নিৰ্বাচিত</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-az-rAZ/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Patcher</string>\n  <string name=\"patches\">Yamalar</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Menecer</string>\n  <string name=\"onboarding_welcome_to\">Xoş gəlmisiniz</string>\n  <string name=\"onboarding_welcome_back\">Salam! Bu yeni</string>\n  <string name=\"onboarding_apps_subtitle\">Siz indi yamaqlamaq üçün bir tətbiq seçə bilərsiniz və ya bunu sonra edə bilərsiniz</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager və yamaqları güncəl saxlamaq üçün avtomatik yeniləmələri konfiqurasiya edin</string>\n  <string name=\"onboarding_updates_note\">Cihazınız internetə qoşulu olarsa, ilkin versiyaları yükləmək üçün ReVanced Manager %s-a qoşulacaq.</string>\n  <string name=\"retry\">Yenidən cəhd et</string>\n  <string name=\"onboarding_skip\">İndilik atla</string>\n  <string name=\"onboarding_recommended_version\">Tövsiyə olunan versiya: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">İcazələri atla?</string>\n  <string name=\"onboarding_permissions_skip_description\">Tələb olunan icazələr olmadan bəzi funksiyalar düzgün işləməyə bilər. Onları daha sonra tətbiq parametrlərində verə bilərsiniz.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Hər halda atla</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager düzgün işləmək üçün bir neçə icazəyə ehtiyac duyur</string>\n  <string name=\"permission_install_apps\">Naməlum tətbiqləri quraşdırın</string>\n  <string name=\"permission_install_apps_description\">Yamaqlanmış tətbiqləri quraşdırmaq üçün tələb olunur</string>\n  <string name=\"permission_notifications\">Bildirişlər</string>\n  <string name=\"permission_battery\">Batareya optimallaşdırılması</string>\n  <string name=\"permission_battery_description\">Arxa planda yamaqlamanın kəsilməsinin qarşısını alır</string>\n  <string name=\"permission_grant\">İcazə ver</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager yükləyici hostu</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager yükləyicilərinə girişi idarə etmək üçün istifadə olunur. Yalnız ReVanced Manager-də bu var.</string>\n  <string name=\"toast_copied_to_clipboard\">Kopyalandı!</string>\n  <string name=\"copy_to_clipboard\">Buferə kopyala</string>\n  <string name=\"dashboard\">İdarə Paneli</string>\n  <string name=\"settings\">Ayarlar</string>\n  <string name=\"select_app\">Tətbiq seçin</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d seçildi</string>\n  <string name=\"fab_patch_app\">Tətbiqi yamaqla</string>\n  <string name=\"fab_add_patches\">Yamalar əlavə et</string>\n  <string name=\"new_downloader_notification\">Yeni yükləyici(lər) mövcuddur. Onları konfiqurasiya etmək üçün bura klikləyin.</string>\n  <string name=\"unsupported_architecture_warning\">Bu cihaz arxitekturasında yamaqlama dəstəklənmir və çox güman ki uğursuz olacaq.</string>\n  <string name=\"import_\">İdxal</string>\n  <string name=\"import_patches\">Yamaqları idxal et</string>\n  <string name=\"file_field_set\">Seçildi</string>\n  <string name=\"file_field_not_set\">Seçilməyib</string>\n  <string name=\"field_not_set\">Təyin edilməyib</string>\n  <string name=\"patches_missing\">Əskik</string>\n  <string name=\"patches_error\">Xəta</string>\n  <string name=\"patches_error_description\">Yamaqlar yüklənə bilmədi. Xətanı görmək üçün klikləyin</string>\n  <string name=\"patches_not_downloaded\">Yamaqlar yüklənməyib.</string>\n  <string name=\"patches_name_default\">Yamaqlar</string>\n  <string name=\"patches_name_fallback\">Adsız</string>\n  <string name=\"android_11_bug_dialog_title\">Android 11 səhvi</string>\n  <string name=\"android_11_bug_dialog_description\">Tətbiqin quraşdırılması icazəsi, Android 11 sistemində istifadəçi təcrübəsinə mənfi təsir göstərəcək bir səhvin qarşısını almaq üçün əvvəlcədən verilməlidir.</string>\n  <string name=\"no_network_toast\">İnternet bağlantısı yoxdur</string>\n  <string name=\"selected_app_meta_any_version\">Hər hansı mövcud versiya</string>\n  <string name=\"app_source_dialog_title\">Mənbə seçin</string>\n  <string name=\"app_source_dialog_option_auto\">Avtomatik</string>\n  <string name=\"app_source_dialog_option_auto_description\">Quraşdırılmış proqramdan, sonra yüklənmiş APK-dən, sonra mövcud endiricilərdən istifadə edin</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Uyğun tətbiq və ya yükləyicilər tapılmadı</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Quraşdırılmış tətbiqlərə kök icazəsi olmadan yenidən yamaq tətbiq edilə bilməz</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Versiya %s təklif olunan versiyaya uyğun gəlmir</string>\n  <string name=\"patch_item_description\">Tətbiqi yamaqlamağa başlayın</string>\n  <string name=\"patch_selector_item\">Yamaları seçin</string>\n  <string name=\"patch_selector_item_description\">%d yamaq seçildi</string>\n  <string name=\"patch_selection_changed_warning\">Yamaq seçimi dəyişdirilib</string>\n  <string name=\"no_patches_selected\">Heç bir yamaq seçilməyib</string>\n  <string name=\"network_unavailable_warning\">Cihazınız internetə qoşulmayıb. Yükləmə daha sonra uğursuz olacaq.</string>\n  <string name=\"network_metered_warning\">Hazırda ölçülü bir bağlantıdasınız. Xidmət təminatçınızdan məlumat haqları tətbiq oluna bilər.</string>\n  <string name=\"apk_source_selector_item\">APK mənbəyini seçin</string>\n  <string name=\"apk_source_auto\">Avtomatik</string>\n  <string name=\"apk_source_auto_installed\">Avtomatik · Quraşdırılmış APK istifadə olunur</string>\n  <string name=\"apk_source_auto_downloaded\">Avtomatik · Yüklənmiş APK istifadə olunur</string>\n  <string name=\"apk_source_auto_downloader\">Avto · Mövcud yükləyicilərdən istifadə edərək</string>\n  <string name=\"apk_source_auto_storage\">Avto · Yaddaşdan seçin</string>\n  <string name=\"apk_source_downloader\">%s istifadə olunur</string>\n  <string name=\"apk_source_installed\">Quraşdırılmış APK istifadə olunur</string>\n  <string name=\"apk_source_local\">Yerli APK faylı istifadə olunur</string>\n  <string name=\"apk_source_downloaded\">Artıq yüklənib</string>\n  <string name=\"legacy_import_failed\">Köhnə parametrlər idxal edilə bilmədi</string>\n  <string name=\"auto_updates_dialog_title\">Yeniləmələri konfiqurasiya edin</string>\n  <string name=\"auto_updates_dialog_description\">ReVanced Manager-in aşağıdakı komponentlər üçün vaxtaşırı yeniləmələri yoxlamasını istəyirsinizmi?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Yamaları</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Yükləyicilər</string>\n  <string name=\"auto_updates_dialog_note\">Bu tənzimləmələr daha sonra dəyişdirilə bilər.\n\n    Cihazınız internetə qoşulu olarsa, ilkin versiyaları yükləmək üçün ReVanced Manager %s-a qoşulacaq.</string>\n  <string name=\"announcements_filter_tag\">Etiketə görə filtrləyin</string>\n  <string name=\"announcements_show_archived\">Arxivləşdirilmişləri göstər</string>\n  <string name=\"general\">Ümumi</string>\n  <string name=\"general_description\">Dil, mövzu, dinamik rəng</string>\n  <string name=\"updates\">Yeniləmələr</string>\n  <string name=\"updates_description\">Yeniləmələri yoxlayın və dəyişikliklər jurnalına baxın</string>\n  <string name=\"downloads\">Yükləmələr</string>\n  <string name=\"downloads_description\">Yükləyicilər və yüklənmiş tətbiqlər</string>\n  <string name=\"import_export\">İdxal &amp; ixrac</string>\n  <string name=\"import_export_description\">Açar anbarı, yamaq seçimləri və seçimi</string>\n  <string name=\"advanced\">Qabaqcıl</string>\n  <string name=\"advanced_description\">API URL, yaddaş limiti, sazlama</string>\n  <string name=\"safeguards_toggled_warning\">Təhlükəsizlik tədbirləri dəyişdirilib</string>\n  <string name=\"about\">Haqqında</string>\n  <string name=\"about_app_name\">%1$s haqqında</string>\n  <string name=\"opensource_licenses\">Açıq mənbə lisenziyaları</string>\n  <string name=\"opensource_licenses_description\">Bu tətbiqi yaratmaq üçün istifadə olunan bütün kitabxanaları göstər</string>\n  <string name=\"contributors\">İştirakçılar</string>\n  <string name=\"contributors_description\">ReVanced iştirakçılarına baxın</string>\n  <string name=\"dynamic_color\">Dinamik rəng</string>\n  <string name=\"dynamic_color_description\">Rəngləri divar kağızına uyğunlaşdırın</string>\n  <string name=\"pure_black_theme\">Saf qara mövzu</string>\n  <string name=\"pure_black_theme_description\">Qaranlıq mövzu üçün saf qara fonlardan istifadə edin</string>\n  <string name=\"theme\">Mövzu</string>\n  <string name=\"theme_description\">Açıq və ya qaranlıq mövzu arasında seçim edin</string>\n  <string name=\"language\">Dil</string>\n  <string name=\"language_description\">Tətbiqin göstərilmə dilini seçin</string>\n  <string name=\"language_system_default\">Sistem standartı</string>\n  <string name=\"search_languages\">Dilləri axtar…</string>\n  <string name=\"safeguards\">Mühafizələr</string>\n  <string name=\"patch_compat_check\">Versiya uyğunluq yoxlamasını söndür</string>\n  <string name=\"patch_compat_check_description\">Yamaqları uyğun tətbiq versiyalarına məhdudlaşdırmayın</string>\n  <string name=\"patch_compat_check_confirmation\">Uyğun olmayan yamaqların seçilməsi tətbiqin pozulmasına səbəb ola bilər.\n\nYenə də davam etmək istəyirsiniz?</string>\n  <string name=\"suggested_version_safeguard\">Təklif olunan tətbiq versiyasını tələb et</string>\n  <string name=\"suggested_version_safeguard_description\">Təklif olunan tətbiq versiyasının seçimini tətbiq edin</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Təklif olunan versiya olmayan bir tətbiqin seçilməsi gözlənilməz problemlərə səbəb ola bilər.\n\nYenə də davam etmək istəyirsiniz?</string>\n  <string name=\"patch_selection_safeguard\">Yamaq seçimini və seçimlərini dəyişməyə icazə ver</string>\n  <string name=\"patch_selection_safeguard_description\">Yamaqları seçməyə və ya seçimi ləğv etməyə, həmçinin seçimlərin fərdiləşdirilməsinə mane olmayın</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Yamaqların seçimini dəyişmək gözlənilməz problemlərə səbəb ola bilər.\n\nYenə də aktiv edilsin?</string>\n  <string name=\"universal_patches_safeguard\">Universal yamaqlardan istifadə etməyə icazə ver</string>\n  <string name=\"universal_patches_safeguard_description\">Universal yamaqlardan istifadə etməyə mane olmayın</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Universal yamaqlar, xüsusi tətbiqləri hədəfləyənlər qədər yaxşı sınaqdan keçirilməyib.\n\nYenə də aktiv edilsin?</string>\n  <string name=\"keystore\">Açar anbarı</string>\n  <string name=\"patches_selections\">Yamaq seçimləri</string>\n  <string name=\"import_keystore\">Açar anbarını idxal et</string>\n  <string name=\"import_keystore_description\">Fərdi açar anbarını idxal et</string>\n  <string name=\"import_keystore_dialog_title\">Açar anbarının etimadnaməsini daxil edin</string>\n  <string name=\"import_keystore_dialog_description\">Onu idxal etmək üçün açar anbarının etimadnaməsini daxil etməlisiniz.</string>\n  <string name=\"import_keystore_dialog_alias_field\">İstifadəçi adı (Ləqəb)</string>\n  <string name=\"import_keystore_dialog_password_field\">Parol</string>\n  <string name=\"import_keystore_dialog_button\">İdxal</string>\n  <string name=\"import_keystore_wrong_credentials\">Səhv açar anbarı etimadnaməsi</string>\n  <string name=\"import_keystore_success\">İdxal edilmiş açar anbarı</string>\n  <string name=\"export_keystore\">Açar anbarını ixrac et</string>\n  <string name=\"export_keystore_description\">Cari açar anbarını ixrac et</string>\n  <string name=\"export_keystore_unavailable\">İxrac ediləcək açar anbarı yoxdur</string>\n  <string name=\"export_keystore_success\">İxrac edilmiş açar anbarı</string>\n  <string name=\"regenerate_keystore\">Açar anbarını yenidən yarat</string>\n  <string name=\"regenerate_keystore_description\">Yeni açar anbarı yarat</string>\n  <string name=\"regenerate_keystore_dialog_description\">Yamaqlama prosesi zamanı menecerin istifadə edəcəyi açar anbarını yenidən yaratmaq üzrəsiniz.\n\nBu mənbədən əvvəlcədən quraşdırılmış tətbiqləri yeniləyə bilməyəcəksiniz.</string>\n  <string name=\"regenerate_keystore_success\">Açar anbarı uğurla dəyişdirildi</string>\n  <string name=\"import_patch_selection\">Yamaq seçimini idxal et</string>\n  <string name=\"import_patch_selection_description\">JSON faylından yamaq seçimini idxal et</string>\n  <string name=\"import_patch_selection_fail\">Yamaq seçimi idxal edilə bilmədi: %s</string>\n  <string name=\"import_patch_selection_success\">İdxal edilmiş yamaq seçimi</string>\n  <string name=\"select_bundle_for_import\">İdxal etmək üçün paket seçin</string>\n  <string name=\"export_patch_selection\">Yamaq seçimini ixrac et</string>\n  <string name=\"export_patch_selection_description\">Yamaq seçimini JSON faylına ixrac et</string>\n  <string name=\"export_patch_selection_fail\">Yamaq seçimi ixrac edilə bilmədi: %s</string>\n  <string name=\"export_patch_selection_success\">İxrac edilmiş yamaq seçimi</string>\n  <string name=\"select_bundle_for_export\">İxrac etmək üçün paket seçin</string>\n  <string name=\"patch_selection_packages\">Yadda saxlanmış seçimləri olan tətbiqlər</string>\n  <string name=\"patch_selection_entries\">Seçilmiş yamaların ümumi sayı</string>\n  <string name=\"reset_configuration\">Konfiqurasiyanı sıfırla</string>\n  <string name=\"reset_patch_selection\">Yamaq seçimləri</string>\n  <string name=\"reset_patch_selection_description\">Saxlanmış yamaq seçimini sıfırla</string>\n  <string name=\"reset_patch_options\">Yamaq seçimləri</string>\n  <string name=\"reset_patch_options_description\">Saxlanmış yamaq seçimlərini sıfırla</string>\n  <string name=\"reset_patch_selection_success\">Yamaq seçimi sıfırlandı</string>\n  <string name=\"patch_selection_reset_all\">Yamaq seçimini qlobal olaraq sıfırla</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Bütün yamaq seçimlərini sıfırlamaq üzrəsiniz. Hər bir yamağı yenidən əl ilə seçməli olacaqsınız.</string>\n  <string name=\"patch_selection_reset_all_description\">Bütün yamaq seçimlərini sıfırlayır</string>\n  <string name=\"patch_selection_reset_package\">Tətbiq üçün yamaq seçimini sıfırla</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Siz \\\"%s\\\" tətbiqi üçün yamaq seçimini sıfırlamaq üzrəsiniz. Hər bir yamağı yenidən əl ilə seçməli olacaqsınız.</string>\n  <string name=\"patch_selection_reset_package_description\">Tək bir tətbiq üçün yamaq seçimini sıfırlayır</string>\n  <string name=\"patch_selection_reset_patches\">Yamaq seçimini sıfırla (tək)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">\\\"%s\\\" üçün yamaq seçimini sıfırlamaq üzrəsiniz. Hər bir yamağı yenidən əl ilə seçməli olacaqsınız.</string>\n  <string name=\"patch_selection_reset_patches_description\">Müəyyən yamaq kolleksiyası üçün yamaq seçimini sıfırlayır</string>\n  <string name=\"patch_options_reset_package\">Tətbiq üçün yamaq seçimlərini sıfırla</string>\n  <string name=\"patch_options_reset_package_dialog_description\">\\\"%s\\\" tətbiqi üçün yamaq seçimlərini sıfırlamaq üzrəsiniz. Hər bir seçimi yenidən tətbiq etməli olacaqsınız.</string>\n  <string name=\"patch_options_reset_package_description\">Tək bir tətbiq üçün yamaq seçimlərini sıfırlayır</string>\n  <string name=\"patch_options_reset_patches\">Yamaq seçimlərini sıfırla (tək)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">\\\"%s\\\" üçün yamaq seçimlərini sıfırlamaq üzrəsiniz. Hər bir seçimi yenidən tətbiq etməli olacaqsınız.</string>\n  <string name=\"patch_options_reset_patches_description\">Müəyyən yamaq kolleksiyası üçün yamaq seçimlərini sıfırlayır</string>\n  <string name=\"patch_options_reset_all\">Yamaq seçimlərini qlobal olaraq sıfırla</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Bütün yamaq seçimlərini sıfırlamaq üzrəsiniz. Hər bir seçimi yenidən tətbiq etməli olacaqsınız.</string>\n  <string name=\"patch_options_reset_all_description\">Bütün yamaq seçimlərini sıfırlayır</string>\n  <string name=\"downloaders\">Yükləyicilər</string>\n  <string name=\"downloader_prereleases\">İlkin buraxılışları istifadə et</string>\n  <string name=\"downloader_prereleases_description\">Əsas yükləyicinin ilkin buraxılış versiyalarını istifadə et</string>\n  <string name=\"downloader_state_loaded\">Yüklənib</string>\n  <string name=\"downloader_state_failed\">Yüklənmədi. Daha ətraflı məlumat üçün toxunun</string>\n  <string name=\"downloader_state_missing\">Çatışmır</string>\n  <string name=\"downloader_delete_apps_title\">Seçilmiş tətbiqləri sil</string>\n  <string name=\"downloader_delete_apps_description\">Seçilmiş tətbiqləri silmək istədiyinizə əminsiniz?</string>\n  <string name=\"downloader_delete_single_description\">\\\"%s\\\" silmək istədiyinizə əminsinizmi?</string>\n  <string name=\"downloader_settings_no_apps\">Yüklənmiş tətbiq tapılmadı.</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager vasitəsilə yüklənmiş tətbiqlər burada görünəcək.</string>\n  <string name=\"downloader_url\">Endiricinin URL-i</string>\n  <string name=\"downloader_add\">Endirici əlavə et</string>\n  <string name=\"select_downloader_type_dialog_description\">URL-dən və ya yerli fayllardan yeni endiricilər əlavə edin</string>\n  <string name=\"local_downloaders_description\">Yerli yaddaşdan endiricilər əlavə edin.</string>\n  <string name=\"remote_downloaders_description\">URL-dən endiricilər əlavə edin. Avtomatik olaraq yenilənə bilər.</string>\n  <string name=\"install_revanced_downloaders\">Tətbiqləri birbaşa ReVanced Manager daxilində əldə etmək üçün yükləyiciləri quraşdırın.</string>\n  <string name=\"install_revanced_downloader\">ReVanced Yükləyicilərini quraşdırın</string>\n  <string name=\"cancel_downloader_install_title\">Yükləyicilərin quraşdırılması ləğv edilsin?</string>\n  <string name=\"cancel_downloader_install_description\">Yükləyicilərin quraşdırılması prosesi davam edir. İndi çıxsanız, yükləmə ləğv ediləcək.</string>\n  <string name=\"downloader_sources_unavailable_title\">Bu endiricilər çatışmır</string>\n  <string name=\"downloader_sources_unavailable_description\">Düzəltmək üçün yeniləmə düyməsinə klikləyin.</string>\n  <string name=\"downloader_update_failed\">Endirici yenilənərkən xəta baş verdi: %s</string>\n  <string name=\"downloader_replace_fail\">Endirici idxal edilərkən xəta baş verdi: %s</string>\n  <string name=\"search_apps\">Tətbiqləri axtar…</string>\n  <string name=\"loading_body\">Yüklənir…</string>\n  <string name=\"downloading_patches\">Yamaqlar yüklənir…</string>\n  <string name=\"options\">Seçimlər</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Bəli</string>\n  <string name=\"no\">Xeyr</string>\n  <string name=\"edit\">Redaktə et</string>\n  <string name=\"dialog_input_placeholder\">Dəyər</string>\n  <string name=\"reset\">Sıfırla</string>\n  <string name=\"share\">Paylaş</string>\n  <string name=\"patch\">Yamaq</string>\n  <string name=\"select_from_storage\">Yaddaşdan seç</string>\n  <string name=\"select_from_storage_description\">Fayl seçicisindən istifadə edərək yaddaşdan bir APK faylı seçin</string>\n  <string name=\"suggested_version_info\">Tövsiyə olunan versiya: %s</string>\n  <string name=\"type_anything\">Davam etmək üçün hər hansı bir şey yazın</string>\n  <string name=\"search\">Yamaqları axtar…</string>\n  <string name=\"apply\">Tətbiq et</string>\n  <string name=\"help\">Kömək</string>\n  <string name=\"back\">Geri</string>\n  <string name=\"warning\">Xəbərdarlıq</string>\n  <string name=\"add\">Əlavə et</string>\n  <string name=\"enable\">Aktiv et</string>\n  <string name=\"disable\">Qapadın</string>\n  <string name=\"close\">Bağla</string>\n  <string name=\"clear\">Təmizlə</string>\n  <string name=\"system\">Sistem</string>\n  <string name=\"light\">Açıq</string>\n  <string name=\"dark\">Tünd</string>\n  <string name=\"appearance\">Görünüş</string>\n  <string name=\"networking\">Şəbəkə</string>\n  <string name=\"allow_metered_networks\">Ölçülmüş şəbəkələrə icazə ver</string>\n  <string name=\"allow_metered_networks_description\">Ölçülmüş şəbəkələrdə avtomatik yeniləmələrə icazə verir.\\n    Tətbiq əl əməliyyatları üçün hələ də ölçülmüş şəbəkələr haqqında xəbərdarlıq edə bilər.</string>\n  <string name=\"downloaded_apps\">Yüklənmiş tətbiqlər</string>\n  <string name=\"process_runtime\">Yamaqlayıcını başqa prosesdə işlət (eksperimental)</string>\n  <string name=\"process_runtime_description\">Bu daha sürətli və Yamaqlayıcının daha çox yaddaş istifadə etməsinə imkan verir</string>\n  <string name=\"process_runtime_memory_limit\">Yamaqlayıcı prosesinin yaddaş limiti</string>\n  <string name=\"process_runtime_memory_limit_description\">Yamaqlayıcı prosesinin istifadə edə biləcəyi maksimum yaddaş miqdarı</string>\n  <string name=\"debug_logs_export\">Bərpa qeydlərini ixrac et</string>\n  <string name=\"debug_logs_export_read_failed\">Qeydləri oxumaq alınmadı (çıxış kodu %d)</string>\n  <string name=\"debug_logs_export_failed\">Qeydləri ixrac etmək alınmadı</string>\n  <string name=\"debug_logs_export_success\">İxrac edilmiş qeydlər</string>\n  <string name=\"api_url\">API URL</string>\n  <string name=\"api_url_description\">Lazımi faylları yükləmək üçün istifadə olunan API</string>\n  <string name=\"api_url_dialog_title\">API URL-ni dəyişdir</string>\n  <string name=\"api_url_dialog_description\">ReVanced Manager-ın API URL-ni dəyişdirin. ReVanced Manager yamaqları və yeniləmələri yükləmək üçün API-dən istifadə edir.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager yamaqları və yeniləmələri yükləmək üçün API-yə qoşulur. Ona güvəndiyinizə əmin olun.</string>\n  <string name=\"api_url_dialog_save\">Təyin et</string>\n  <string name=\"api_url_dialog_reset\">API URL-ni sıfırla</string>\n  <string name=\"device\">Cihaz</string>\n  <string name=\"device_android_version\">Android versiyası</string>\n  <string name=\"device_model\">Model</string>\n  <string name=\"device_architectures\">CPU Arxitekturaları</string>\n  <string name=\"device_memory_limit\">Yaddaş limitləri</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normal) - %2$dMB (Böyük)</string>\n  <string name=\"patches_force_download\">Bütün yamaqları yükləməyə məcbur et</string>\n  <string name=\"patches_reset\">Yamaqları sıfırla</string>\n  <string name=\"reset_onboarding\">Onboardinqi sıfırla</string>\n  <string name=\"reset_onboarding_description\">Növbəti tətbiq başladığında onboardinq ekranını göstər</string>\n  <string name=\"patching\">Yamaqlanır</string>\n  <string name=\"signing\">İmzalanır</string>\n  <string name=\"storage\">Yaddaş</string>\n  <string name=\"no_patch_found\">Yamaq tapılmadı. Yamaqlarınızı yoxlayın</string>\n  <string name=\"tab_apps\">Tətbiqlər</string>\n  <string name=\"tab_patches\">Yamaqlar</string>\n  <string name=\"delete\">Sil</string>\n  <string name=\"refresh\">Yenilə</string>\n  <string name=\"continue_anyways\">Hər halda davam et</string>\n  <string name=\"download_another_version\">Başqa versiyanı yüklə</string>\n  <string name=\"download_app\">Tətbiqi yüklə</string>\n  <string name=\"download_apk\">APK faylını yüklə</string>\n  <string name=\"patches_download_fail\">Yamaqlar yüklənə bilmədi: %s</string>\n  <string name=\"api_not_working_title\">API xidməti hazırda işləmir</string>\n  <string name=\"api_not_working_description\">Bəzi funksiyalar təsirlənə bilər. Ayarlarda əlaqənizi və ya API URL-inizi yoxlayın.</string>\n  <string name=\"patches_replace_fail\">Yamaqları idxal etmək alınmadı: %s</string>\n  <string name=\"no_patched_apps_found\">Yamaqlanmış tətbiqlər tapılmadı</string>\n  <string name=\"no_patched_apps_description\">Hal-hazırda bildiyimiz heç bir yamaqlanmış tətbiqiniz yoxdur. İlk tətbiqinizi yamaqlayaraq bunu dəyişdirin!</string>\n  <string name=\"patched_apps_section_title\">Yamalanmış proqramlar</string>\n  <string name=\"patchable_apps_section_title\">Yamalana bilən proqramlar</string>\n  <string name=\"no_patches_found\">Heç bir yamaq tapılmadı</string>\n  <string name=\"no_patches_description\">Hələ heç bir yamağınız yoxdur. Aşağıdakı düyməyə toxunaraq yamaqlar əlavə edin!</string>\n  <string name=\"tap_on_patches\">Yamaqlar haqqında daha çox məlumat almaq üçün onların üzərinə toxunun</string>\n  <string name=\"patches_selected\">%s seçildi</string>\n  <string name=\"incompatible_patches\">Uyğun olmayan yamaqlar</string>\n  <string name=\"universal_patches\">Universal yamaqlar</string>\n  <string name=\"patch_selection_reset_toast\">Yamaq seçimi və seçimləri tövsiyə olunan standartlara qaytarıldı</string>\n  <string name=\"patch_options_reset_toast\">Yamaq seçimləri sıfırlandı</string>\n  <string name=\"non_suggested_version_warning_title\">Tövsiyə olunmayan versiya</string>\n  <string name=\"non_suggested_version_warning_description\">Seçdiyiniz tətbiqin versiyası tövsiyə olunan versiya ilə uyğun gəlmir.\\nZəhmət olmasa tövsiyə olunan versiyadan istifadə edin: %s\\n\\nHər halda davam etmək üçün, qabaqcıl parametrlərdə \\\"Tövsiyə olunan tətbiq versiyasını tələb et\\\" seçimini söndürün.</string>\n  <string name=\"selection_warning_title\">Standartlardan istifadəni dayandırılsın?</string>\n  <string name=\"selection_warning_description\">Varsayılan yamaq seçimi və seçimlərindən istifadə etmək tövsiyə olunur. Onları dəyişdirmək gözlənilməz problemlərə səbəb ola bilər.\\n\\nYamaqları dəyişdirməzdən əvvəl qabaqcıl parametrlərdə \\\"Yamaq seçimini və seçimlərini dəyişdirməyə icazə ver\\\" seçimini aktiv etməlisiniz.</string>\n  <string name=\"universal_patch_warning_description\">Universal yamaqların daha ümumi istifadəsi var və xüsusi tətbiqləri hədəfləyən yamaqlar qədər etibarlı işləmir. Onlardan istifadə edərkən problemlərlə qarşılaşa bilərsiniz.\\n\\nUniversal yamaqlardan istifadə etməzdən əvvəl qabaqcıl parametrlərdə \\\"Universal yamaqlardan istifadəyə icazə ver\\\" seçimini aktiv etməlisiniz.</string>\n  <string name=\"this_version\">Bu versiya</string>\n  <string name=\"universal\">Hər hansı tətbiq</string>\n  <string name=\"search_patches\">Yamaqları axtar</string>\n  <string name=\"app_version_not_compatible\">Bu yamaq seçilmiş tətbiq versiyası (%1$s) ilə uyğun gəlmir.\\n\\nYalnız aşağıdakı versiya(lar) ilə uyğundur: %2$s</string>\n  <string name=\"continue_with_version\">Bu versiya ilə davam edilsin?</string>\n  <string name=\"version_not_compatible\">Bütün yamaqlar bu versiya (%s) ilə uyğun gəlmir. Hər halda davam etmək istəyirsiniz?</string>\n  <string name=\"download_application\">Tətbiq yüklənsin?</string>\n  <string name=\"app_not_installed\">Seçdiyiniz tətbiq quraşdırılmayıb. Onu yükləmək istəyirsiniz?</string>\n  <string name=\"failed_to_load_apk\">APK yüklənə bilmədi</string>\n  <string name=\"split_apk_not_supported\">Bölünmüş APK-lar yamaqlana bilməz</string>\n  <string name=\"loading\">Yüklənir…</string>\n  <string name=\"not_installed\">Quraşdırılmayıb</string>\n  <string name=\"installed\">Quraşdırılıb</string>\n  <string name=\"app_info\">Tətbiq məlumatı</string>\n  <string name=\"uninstall\">Sil</string>\n  <string name=\"unpatch\">Yamağı ləğv et</string>\n  <string name=\"repatch\">Yenidən yamaqla</string>\n  <string name=\"install_type\">Quraşdırma növü</string>\n  <string name=\"package_name\">Paket adı</string>\n  <string name=\"original_package_name\">Orijinal paket adı</string>\n  <string name=\"applied_patches\">Tətbiq edilmiş yamalar</string>\n  <string name=\"view_applied_patches\">Tətbiq edilmiş yamalara bax</string>\n  <string name=\"default_install\">İlkin</string>\n  <string name=\"mount_install\">Quraşdır</string>\n  <string name=\"mounted\">Quraşdırılıb</string>\n  <string name=\"not_mounted\">Quraşdırılmayıb</string>\n  <string name=\"mount\">Quraşdır</string>\n  <string name=\"unmount\">Ayır</string>\n  <string name=\"failed_to_mount\">Quraşdırmaq alınmadı: %s</string>\n  <string name=\"failed_to_unmount\">Ayırmaq alınmadı: %s</string>\n  <string name=\"unpatch_app\">Tətbiqi yamasız et?</string>\n  <string name=\"unpatch_description\">Bu tətbiqi yamasız etmək istədiyinizə əminsiniz?</string>\n  <string name=\"downloader_invalid_version\">Yükləyici düzgün versiyanı əldə etmədi</string>\n  <string name=\"downloader_app_not_found\">Yükləyici tətbiqi tapmadı</string>\n  <string name=\"downloader_error\">Yükləyici xətası: %s</string>\n  <string name=\"no_downloaders_installed\">Heç bir tətbiq yükləyicisi quraşdırılmayıb!</string>\n  <string name=\"no_downloaders_trusted\">Heç bir tətbiq yükləyicisinə etibar edilməyib! Xahiş edirik parametrlərinizi yoxlayın.</string>\n  <string name=\"already_patched\">Artıq yamalanıb</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filtr</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Uyğunluq</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paketlər</string>\n  <string name=\"patch_selector_sheet_actions_title\">Əməliyyatlar</string>\n  <string name=\"restore_default_selection\">Standart seçimi bərpa et</string>\n  <string name=\"deselect_all\">Hamısının seçimini ləğv et</string>\n  <string name=\"invert_selection\">Seçimi tərs çevir</string>\n  <string name=\"deselect_all_except\">%s istisna olmaqla, hamısının seçimini ləğv edin</string>\n  <string name=\"scope_dialog_title\">Tətbiq et</string>\n  <string name=\"scope_all_patches\">Bütün yamaqlar</string>\n  <string name=\"scope_bundle_patches\">Yalnız %s</string>\n  <string name=\"string_option_menu_description\">Daha çox seçim</string>\n  <string name=\"option_preset_custom_value\">Fərdi dəyər</string>\n  <string name=\"path_selector\">Saxlama yerindən seç</string>\n  <string name=\"path_selector_parent_dir\">Əvvəlki qovluq</string>\n  <string name=\"path_selector_dirs\">Qovluqlar</string>\n  <string name=\"path_selector_files\">Fayllar</string>\n  <string name=\"show_password_field\">Parolu göstər</string>\n  <string name=\"hide_password_field\">Parolu gizlət</string>\n  <string name=\"installer\">Quraşdırıcı</string>\n  <string name=\"install_app\">Quraşdır</string>\n  <string name=\"install_app_success\">Tətbiq quraşdırıldı</string>\n  <string name=\"install_app_fail\">Tətbiqi quraşdırmaq alınmadı: %s</string>\n  <string name=\"reinstall_app_fail\">Tətbiqi yenidən quraşdırmaq alınmadı: %s</string>\n  <string name=\"uninstall_app_fail\">Tətbiqi silmək alınmadı: %s</string>\n  <string name=\"open_app\">Aç</string>\n  <string name=\"save_apk\">APK-ni Saxla</string>\n  <string name=\"save_apk_success\">APK Saxlandı</string>\n  <string name=\"sign_fail\">APK-ni imzalamaq alınmadı: %s</string>\n  <string name=\"save_logs\">Qeydləri saxla</string>\n  <string name=\"save_as_file\">Fayllara yadda saxla</string>\n  <string name=\"export_patcher_logs\">Yamaqlayıcı qeydlərini ixrac et</string>\n  <string name=\"save_logs_success\">Qeydlər yadda saxlandı</string>\n  <string name=\"downloader_activity_dialog_body\">Bu yükləyici ilə davam etmək üçün istifadəçi qarşılıqlı əlaqəsi tələb olunur.</string>\n  <string name=\"select_install_type\">Quraşdırma növünü seç</string>\n  <string name=\"patcher_step_group_preparing\">Hazırlanır</string>\n  <string name=\"patcher_step_load_patches\">Yamaları yüklə</string>\n  <string name=\"patcher_step_unpack\">Yamalayıcının hazırlanması</string>\n  <string name=\"patcher_step_group_patching\">Yamalanır</string>\n  <string name=\"patcher_step_group_saving\">Saxlanılır</string>\n  <string name=\"patcher_step_write_patched\">Yamalanmış APK faylını yaz</string>\n  <string name=\"patcher_step_sign_apk\">Yamalanmış APK faylını imzala</string>\n  <string name=\"patcher_notification_title\">Yamalanma davam edir…</string>\n  <string name=\"patcher_notification_text\">Yamalayıcıya qayıtmaq üçün toxun</string>\n  <string name=\"patcher_stop_confirm_title\">Yamalayıcını dayandır</string>\n  <string name=\"patcher_stop_confirm_description\">Yamalanma prosesini dayandırmaq istədiyinizə əminsiniz?</string>\n  <string name=\"patcher_install_in_progress\">Quraşdırma davam edir. Zəhmət olmasa gözləyin</string>\n  <string name=\"execute_patches\">Yamaları icra et</string>\n  <string name=\"executing_patch\">%s icra et</string>\n  <string name=\"failed_to_execute_patch\">%s icra etmək alınmadı</string>\n  <string name=\"step_completed\">tamamlandı</string>\n  <string name=\"step_failed\">uğursuz oldu</string>\n  <string name=\"step_running\">işləyir</string>\n  <string name=\"step_waiting\">gözləyir</string>\n  <string name=\"expand_content\">genişləndir</string>\n  <string name=\"collapse_content\">yığışdır</string>\n  <string name=\"drag_handle\">yenidən sırala</string>\n  <string name=\"more\">Daha çox</string>\n  <string name=\"less\">Daha az</string>\n  <string name=\"continue_\">Davam et</string>\n  <string name=\"dismiss\">Rədd et</string>\n  <string name=\"view_announcement\">Elana bax</string>\n  <string name=\"permanent_dismiss\">Bunu bir daha göstərmə</string>\n  <string name=\"donate\">İanə et</string>\n  <string name=\"website\">Vebsayt</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Əlaqə</string>\n  <string name=\"license\">Lisenziya</string>\n  <string name=\"source\">Mənbə</string>\n  <string name=\"repository\">Saxlanc</string>\n  <string name=\"bundle_information_by_author\">%1$s tərəfindən</string>\n  <string name=\"version\">Versiya</string>\n  <string name=\"version_compatibility_warning\">Seçilmiş versiya seçilmiş yamalarla uyğun gəlməyə bilər.</string>\n  <string name=\"submit_feedback\">Problemi və ya rəyi göndər</string>\n  <string name=\"submit_feedback_description\">Bu tətbiqi təkmilləşdirməyə kömək edin</string>\n  <string name=\"developer_options\">Tərtibatçı seçimləri</string>\n  <string name=\"developer_options_description\">Problemləri aradan qaldırmaq üçün seçimlər</string>\n  <string name=\"patches_update_success\">Yeniləmə uğurlu oldu</string>\n  <string name=\"patches_update_unavailable\">Yeniləmə yoxdur</string>\n  <string name=\"view_patches\">Yamalara bax</string>\n  <string name=\"patches_view_any_version\">İstənilən versiya</string>\n  <string name=\"patches_view_any_package\">İstənilən paket</string>\n  <string name=\"patches_delete_single_dialog_description\">\\\"%s\\\" silmək istədiyinizə əminsiniz?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Seçilmiş yamaları silmək istədiyinizə əminsiniz?</string>\n  <string name=\"announcements\">Elanlar</string>\n  <string name=\"archive\">Arxiv</string>\n  <string name=\"about_revanced_manager\">ReVanced Manager haqqında</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager, Android tətbiqlərini yamalamaq üçün ReVanced Patcher istifadə edən bir Android tətbiqidir. O, xüsusi yamalarla tətbiqləri yükləməyə və yamalamağa, həmçinin yamalanma prosesini idarə etməyə imkan verir.</string>\n  <string name=\"developer_options_taps\">%d toxunuş qalıb</string>\n  <string name=\"developer_options_enabled\">Tərtibatçı seçimləri aktivləşdirildi</string>\n  <string name=\"developer_options_already_enabled\">Tərtibatçı seçimləri artıq aktivləşdirilib</string>\n  <string name=\"update_available\">Yeniləmə mövcuddur</string>\n  <string name=\"current_version\">Cari versiya: %s</string>\n  <string name=\"new_version\">Yeni versiya: %s</string>\n  <string name=\"ready_to_install_update\">Yeniləməni quraşdırmağa hazırdır</string>\n  <string name=\"update_completed\">Yeniləmə quraşdırıldı</string>\n  <string name=\"install_update_manager_failed\">Yeniləməni quraşdırmaq alınmadı</string>\n  <string name=\"manual_update_check\">Yeniləmələri yoxla</string>\n  <string name=\"view_update\">Yeniləməyə bax</string>\n  <string name=\"manual_update_check_description\">Yeniləmələri əl ilə yoxla</string>\n  <string name=\"update_checking_manager\">Başlayarkən yeniləmələri yoxla</string>\n  <string name=\"update_checking_manager_description\">Tətbiq başlayanda ReVanced Manager-in yeni versiyalarını yoxla</string>\n  <string name=\"update_checking_downloader\">Başlayarkən ReVanced Yükləyiciləri üçün yeniləmələri yoxla</string>\n  <string name=\"update_checking_downloader_description\">Tətbiq başladığında quraşdırılmış ReVanced Yükləyiciləri üçün yeniləmələri yoxla</string>\n  <string name=\"manager_prereleases\">İlkin buraxılışları istifadə et</string>\n  <string name=\"manager_prereleases_description\">ReVanced Manager-in ilkin versiyalarından istifadə et</string>\n  <string name=\"prereleases_warning\">Sınaq versiyaları qeyri-sabit ola bilər və səhvlər ehtiva edə bilər. Qəzalar, məlumat itkisi və ya digər gözlənilməz problemlərlə qarşılaşa bilərsiniz. Yalnız bu risklərlə rahatsınızsa bunu aktiv edin.</string>\n  <string name=\"changelog\">Dəyişikliklər jurnalına bax</string>\n  <string name=\"changelog_loading\">Dəyişiklik qeydi yüklənir</string>\n  <string name=\"changelog_download_fail\">Dəyişiklik qeydini yükləmək alınmadı: %s</string>\n  <string name=\"changelog_description\">Bu yeniləmədəki son dəyişikliklərə bax</string>\n  <string name=\"battery_optimization_notification\">ReVanced Manager-in arxa planda düzgün işləməsi üçün batareya optimizasiyası söndürülməlidir. Optimizasiyaları söndürmək üçün buraya klikləyin.</string>\n  <string name=\"installing_manager_update\">Yeniləmə quraşdırılır…</string>\n  <string name=\"downloading_manager_update\">Yeniləmə yüklənir…</string>\n  <string name=\"download_manager_failed\">Yeniləməni yükləmək alınmadı: %s</string>\n  <string name=\"cancel\">Ləğv et</string>\n  <string name=\"save\">Saxla</string>\n  <string name=\"save_with_count\">Saxla (%1$s)</string>\n  <string name=\"update\">Yenilə</string>\n  <string name=\"empty\">Boş</string>\n  <string name=\"installing_message\">Xahiş edildikdə <b>Yenilə</b> düyməsinə toxunun.\\nReVanced Manager yenilənərkən bağlanacaq.</string>\n  <string name=\"no_changelogs_found\">Dəyişiklik qeydləri tapılmadı</string>\n  <string name=\"just_now\">İndi</string>\n  <string name=\"minutes_ago\">%s dəq əvvəl</string>\n  <string name=\"hours_ago\">%s saat əvvəl</string>\n  <string name=\"days_ago\">%s gün əvvəl</string>\n  <string name=\"invalid_date\">Yanlış tarix</string>\n  <string name=\"disable_battery_optimization\">Batareya optimizasiyasını söndür</string>\n  <string name=\"input_dialog_value_invalid\">Yanlış dəyər</string>\n  <string name=\"option_required\">Bu seçim tələb olunur</string>\n  <string name=\"required_options_screen\">Tələb olunan seçimlər</string>\n  <string name=\"failed_to_check_updates\">Yeniləmələri yoxlamaq alınmadı: %s</string>\n  <string name=\"no_update_available\">Yeniləmə mövcud deyil</string>\n  <string name=\"no_announcements_found\">Elan tapılmadı</string>\n  <string name=\"update_check\">Yeniləmələr yoxlanılır…</string>\n  <string name=\"dismiss_temporary\">İndi yox</string>\n  <string name=\"update_available_dialog_description\">ReVanced Manager-in (%s) yeni versiyası mövcuddur.</string>\n  <string name=\"failed_to_download_update\">Yeniləməni yükləmək alınmadı: %s</string>\n  <string name=\"download\">Yüklə</string>\n  <string name=\"download_confirmation_metered\">Hazırda ölçülü bağlantıdasınız və xidmət provayderiniz tərəfindən məlumat haqqları tətbiq oluna bilər.\\n\\nDavam etmək istəyirsiniz?</string>\n  <string name=\"download_update_confirmation\">Yeniləməni yüklənsin?</string>\n  <string name=\"no_contributors_found\">Heç bir töhfəçi tapılmadı</string>\n  <string name=\"select\">Seç</string>\n  <string name=\"select_deselect_all\">Hamısını seç və ya seçimi ləğv et</string>\n  <string name=\"select_patches_type_dialog_description\">URL-dən və ya yerli fayllardan yeni yamalar əlavə et</string>\n  <string name=\"local_patches_description\">Yerli saxlama yerindən yamalar əlavə et.</string>\n  <string name=\"remote_patches_description\">URL-dən yamalar əlavə et. Yamalar avtomatik olaraq yenilənə bilər.</string>\n  <string name=\"recommended\">Tövsiyə olunur</string>\n  <string name=\"installation_failed_dialog_title\">Quraşdırma uğursuz oldu</string>\n  <string name=\"installation_cancelled_dialog_title\">Quraşdırma ləğv edildi</string>\n  <string name=\"installation_blocked_dialog_title\">Quraşdırma bloklandı</string>\n  <string name=\"installation_conflict_dialog_title\">Quraşdırma konflikti</string>\n  <string name=\"installation_incompatible_dialog_title\">Quraşdırma uyğun deyil</string>\n  <string name=\"installation_invalid_dialog_title\">Quraşdırma etibarsızdır</string>\n  <string name=\"installation_storage_issue_dialog_title\">Kifayət qədər yaddaş yoxdur</string>\n  <string name=\"installation_timeout_dialog_title\">Quraşdırmanın vaxtı bitdi</string>\n  <string name=\"installation_failed_description\">Quraşdırma naməlum səbəbdən uğursuz oldu. Yenidən cəhd edin?</string>\n  <string name=\"installation_aborted_description\">Quraşdırma əl ilə ləğv edildi. Yenidən cəhd edin?</string>\n  <string name=\"installation_blocked_description\">Quraşdırma bloklandı. Cihazınızın təhlükəsizlik parametrlərini nəzərdən keçirin və yenidən cəhd edin.</string>\n  <string name=\"installation_conflict_description\">Quraşdırma tətbiqin mövcud quraşdırılması tərəfindən dayandırıldı. Quraşdırılmış tətbiqi silin və yenidən cəhd edin?</string>\n  <string name=\"installation_incompatible_description\">Tətbiq bu cihazla uyğun deyil. Bu cihazla uyğun gələn bir APK istifadə edin və yenidən cəhd edin.</string>\n  <string name=\"installation_invalid_description\">Tətbiq etibarsızdır. Tətbiqi silin və yenidən cəhd edin?</string>\n  <string name=\"installation_storage_issue_description\">Kifayət qədər yaddaş olmadığı üçün tətbiq quraşdırıla bilmədi. Bir qədər yer boşaldın və yenidən cəhd edin.</string>\n  <string name=\"installation_timeout_description\">Quraşdırma çox uzun çəkdi. Yenidən cəhd edin?</string>\n  <string name=\"reinstall\">Yenidən quraşdır</string>\n  <string name=\"show\">Göstər</string>\n  <string name=\"debugging\">Hata ayıklama</string>\n  <string name=\"about_device\">Cihaz haqqında</string>\n  <string name=\"enter_url\">URL daxil et</string>\n  <string name=\"next\">Növbəti</string>\n  <string name=\"auto_update\">Avtomatik yeniləmə</string>\n  <string name=\"add_patches\">Yamalar əlavə et</string>\n  <string name=\"auto_update_description\">Yeni versiya mövcud olduqda avtomatik yenilə</string>\n  <string name=\"patches_prereleases\">İlkin buraxılışları istifadə et</string>\n  <string name=\"patches_prereleases_description\">%s-in ilkin versiyalarından istifadə et</string>\n  <string name=\"patches_url\">Yamaların URL-i</string>\n  <string name=\"incompatible_patches_dialog\">Bu yamalar seçilmiş tətbiq versiyası (%1$s) ilə uyğun deyil.\\n\\nDaha çox məlumat üçün yamalara klikləyin.</string>\n  <string name=\"incompatible_patch\">Uyğun olmayan yama</string>\n  <string name=\"any_version\">İstənilən</string>\n  <string name=\"never_show_again\">Bir daha göstərmə</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Başlayarkən yeniləmə mesajını göstər</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Başlayarkən yeni yeniləmə mövcud olduqda açılan bildirişi göstər</string>\n  <string name=\"failed_to_import_keystore\">Açar anbarını idxal etmək alınmadı</string>\n  <string name=\"export\">İxrac et</string>\n  <string name=\"confirm\">Təsdiqlə</string>\n  <string name=\"new_announcement\">Yeni elan:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d yama</item>\n    <item quantity=\"other\">%d yama</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d yama icra et</item>\n    <item quantity=\"other\">%d yama icra et</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d seçildi</item>\n    <item quantity=\"other\">%d seçildi</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-be-rBY/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Патчар</string>\n  <string name=\"patches\">Патчы</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Менеджар</string>\n  <string name=\"onboarding_welcome_to\">Сардэчна запрашаем у</string>\n  <string name=\"onboarding_welcome_back\">Прывітанне! Гэта новы</string>\n  <string name=\"onboarding_apps_subtitle\">Вы можаце выбраць праграму для выпраўлення зараз ці зрабіць гэта пазней</string>\n  <string name=\"onboarding_apps_network_error\">Не ўдалося загрузіць патчы, бо сетка недаступная ці нестабільная. Падключыцеся да стабільнай сеткі і паспрабуйце зноў.</string>\n  <string name=\"onboarding_updates_subtitle\">Наладзьце аўтаматычныя абнаўленні, каб ReVanced Manager і патчы былі актуальнымі</string>\n  <string name=\"banner_sources_not_downloaded_description\">Патчы і загрузчыкі не былі загружаны падчас усталявання. Націсніце “Абнавіць”, каб загрузіць іх.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager падключыцца да %s, каб спампаваць першапачатковыя версіі, калі ваша прылада падключана да Інтэрнэту.</string>\n  <string name=\"retry\">Паўтарыць</string>\n  <string name=\"onboarding_skip\">Прапусціць пакуль</string>\n  <string name=\"onboarding_recommended_version\">Рэкамендуемая версія: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Прапусціць дазволы?</string>\n  <string name=\"onboarding_permissions_skip_description\">Без неабходных дазволаў некаторыя функцыі могуць працаваць няправільна. Вы можаце даць іх пазней у наладах праграмы.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Усё роўна прапусціць</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager патрабуе некалькі дазволаў для карэктнай працы</string>\n  <string name=\"permission_install_apps\">Устаноўка невядомых праграм</string>\n  <string name=\"permission_install_apps_description\">Патрабуецца для ўстаноўкі патчаных праграм</string>\n  <string name=\"permission_notifications\">Апавяшчэнні</string>\n  <string name=\"permission_notifications_description\">Дазваляе бесперапынную ўстаноўку патчаў у фонавым рэжыме</string>\n  <string name=\"permission_battery\">Аптымізацыя батарэі</string>\n  <string name=\"permission_battery_description\">Прадухіляе перарыванне патчавання ў фонавым рэжыме</string>\n  <string name=\"permission_grant\">Даць</string>\n  <string name=\"downloader_host_permission_label\">Хост загрузніка ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Выкарыстоўваецца для кантролю доступу да загрузнікаў ReVanced Manager. Толькі ReVanced Manager мае гэта.</string>\n  <string name=\"toast_copied_to_clipboard\">Скапіявана!</string>\n  <string name=\"copy_to_clipboard\">Скапіяваць у буфер абмену</string>\n  <string name=\"dashboard\">Панэль кіравання</string>\n  <string name=\"settings\">Налады</string>\n  <string name=\"select_app\">Выберыце праграму</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d выбрана</string>\n  <string name=\"fab_patch_app\">Запаткаваць праграму</string>\n  <string name=\"fab_add_patches\">Дадаць патчы</string>\n  <string name=\"new_downloader_notification\">Даступны новы загрузнік(і). Націсніце тут, каб наладзіць іх.</string>\n  <string name=\"unsupported_architecture_warning\">Патчынг на гэтай архітэктуры прылады не падтрымліваецца і, хутчэй за ўсё, не атрымаецца.</string>\n  <string name=\"import_\">Імпарт</string>\n  <string name=\"import_patches\">Імпартаваць патчы</string>\n  <string name=\"file_field_set\">Выбрана</string>\n  <string name=\"file_field_not_set\">Не выбрана</string>\n  <string name=\"field_not_set\">Не ўсталявана</string>\n  <string name=\"patches_missing\">Адсутнічае</string>\n  <string name=\"patches_error\">Памылка</string>\n  <string name=\"patches_error_description\">Патчы не ўдалося загрузіць. Націсніце, каб праглядзець памылку</string>\n  <string name=\"patches_not_downloaded\">Выпраўленні не спампаваны.</string>\n  <string name=\"patches_name_default\">Патчы</string>\n  <string name=\"patches_name_fallback\">Без назвы</string>\n  <string name=\"android_11_bug_dialog_title\">Памылка Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">Дазвол на ўстаноўку праграм павінен быць выдадзены загадзя, каб пазбегнуць памылкі ў сістэме Android 11, якая негатыўна паўплывае на зручнасць карыстання.</string>\n  <string name=\"no_network_toast\">Няма падключэння да інтэрнэту</string>\n  <string name=\"selected_app_meta_any_version\">Любая даступная версія</string>\n  <string name=\"app_source_dialog_title\">Выберыце крыніцу</string>\n  <string name=\"app_source_dialog_option_auto\">Аўтаматычна</string>\n  <string name=\"app_source_dialog_option_auto_description\">Выкарыстаць усталяваную праграму, затым спампаваны APK, затым даступныя загрузчыкі</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Сумяшчальных праграм ці загрузчыкаў няма</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Змантаваныя праграмы нельга зноў выправіць без root-доступу</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Версія %s не адпавядае прапанаванай версіі</string>\n  <string name=\"patch_item_description\">Пачаць патчынг праграмы</string>\n  <string name=\"patch_selector_item\">Выбраць патчы</string>\n  <string name=\"patch_selector_item_description\">Выбрана %d патчаў</string>\n  <string name=\"patch_selection_changed_warning\">Выбар выпраўленняў зменены.</string>\n  <string name=\"no_patches_selected\">Няма выбраных патчаў</string>\n  <string name=\"network_unavailable_warning\">Ваша прылада не падключана да інтэрнэту. Загрузка не ўдасца пазней.</string>\n  <string name=\"network_metered_warning\">Вы зараз карыстаецеся тарыфікуемым падключэннем. Можа спаганяцца плата за перадачу даных ад вашага пастаўшчыка паслуг.</string>\n  <string name=\"apk_source_selector_item\">Выбраць крыніцу APK</string>\n  <string name=\"apk_source_auto\">Аўто</string>\n  <string name=\"apk_source_auto_installed\">Аўто · Выкарыстоўваецца ўсталяваны APK</string>\n  <string name=\"apk_source_auto_downloaded\">Аўто · Выкарыстоўваецца спампаваны APK</string>\n  <string name=\"apk_source_auto_downloader\">Аўта · Выкарыстанне даступных загрузчыкаў</string>\n  <string name=\"apk_source_auto_storage\">Аўта · Выбраць са сховішча</string>\n  <string name=\"apk_source_downloader\">Выкарыстоўваецца %s</string>\n  <string name=\"apk_source_installed\">Выкарыстоўваецца ўсталяваны APK</string>\n  <string name=\"apk_source_local\">Выкарыстоўваецца лакальны файл APK</string>\n  <string name=\"apk_source_downloaded\">Ужо спампавана</string>\n  <string name=\"legacy_import_failed\">Не ўдалося імпартаваць старыя налады</string>\n  <string name=\"auto_updates_dialog_title\">Наладзіць абнаўленні</string>\n  <string name=\"auto_updates_dialog_description\">Вы хочаце, каб ReVanced Manager перыядычна правяраў наяўнасць абнаўленняў для наступных кампанентаў?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Патчы ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Загрузнікі</string>\n  <string name=\"auto_updates_dialog_note\">Гэтыя налады можна будзе змяніць пазней.\n\n    ReVanced Manager падключыцца да %s, каб спампаваць першапачатковыя версіі, калі ваша прылада падключана да Інтэрнэту.</string>\n  <string name=\"announcements_filter_tag\">Фільтраваць па тэгу</string>\n  <string name=\"announcements_show_archived\">Паказаць архіваваныя</string>\n  <string name=\"general\">Агульныя</string>\n  <string name=\"general_description\">Мова, тэма, дынамічны колер</string>\n  <string name=\"updates\">Абнаўленні</string>\n  <string name=\"updates_description\">Праверыць абнаўленні і праглядзець часопіс змяненняў</string>\n  <string name=\"downloads\">Загрузкі</string>\n  <string name=\"downloads_description\">Спампоўшчыкі і спампаваныя праграмы</string>\n  <string name=\"import_export\">Імпарт &amp; экспарт</string>\n  <string name=\"import_export_description\">Сховішча ключоў, параметры і выбар патчаў</string>\n  <string name=\"advanced\">Пашыраныя</string>\n  <string name=\"advanced_description\">URL API, ліміт памяці, адладка</string>\n  <string name=\"safeguards_toggled_warning\">Сродкі абароны пераключаны.</string>\n  <string name=\"about\">Пра праграму</string>\n  <string name=\"about_app_name\">Пра %1$s</string>\n  <string name=\"opensource_licenses\">Ліцэнзіі з адкрытым зыходным кодам</string>\n  <string name=\"opensource_licenses_description\">Прагледзець усе бібліятэкі, выкарыстаныя для стварэння гэтай праграмы</string>\n  <string name=\"contributors\">Удзельнікі</string>\n  <string name=\"contributors_description\">Прагледзець удзельнікаў ReVanced</string>\n  <string name=\"dynamic_color\">Дынамічны колер</string>\n  <string name=\"dynamic_color_description\">Адаптаваць колеры да шпалер</string>\n  <string name=\"pure_black_theme\">Чыста чорная тэма</string>\n  <string name=\"pure_black_theme_description\">Выкарыстоўваць чыста чорныя фоны для цёмнай тэмы</string>\n  <string name=\"theme\">Тэма</string>\n  <string name=\"theme_description\">Выбраць паміж светлай ці цёмнай тэмай</string>\n  <string name=\"language\">Мова</string>\n  <string name=\"language_description\">Выберыце мову адлюстравання праграмы</string>\n  <string name=\"language_system_default\">Сістэмны па змаўчанні</string>\n  <string name=\"search_languages\">Пошук моў…</string>\n  <string name=\"safeguards\">Абаронныя меры</string>\n  <string name=\"patch_compat_check\">Адключыць праверку сумяшчальнасці версій</string>\n  <string name=\"patch_compat_check_description\">Не абмяжоўваць патчы сумяшчальнымі версіямі праграм</string>\n  <string name=\"patch_compat_check_confirmation\">Выбар несумяшчальных патчаў можа прывесці да няспраўнасці праграмы.\n\nЦі хочаце вы працягнуць усё роўна?</string>\n  <string name=\"suggested_version_safeguard\">Патрабаваць рэкамендаваную версію праграмы</string>\n  <string name=\"suggested_version_safeguard_description\">Прымусіць выбар рэкамендаванай версіі праграмы</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Выбар праграмы, якая не з\\'яўляецца рэкамендаванай версіяй, можа выклікаць нечаканыя праблемы.\n\nЦі хочаце вы працягнуць усё роўна?</string>\n  <string name=\"patch_selection_safeguard\">Дазволіць змяненне выбару і параметраў патчаў</string>\n  <string name=\"patch_selection_safeguard_description\">Не перашкаджаць выбару або адмене выбару патчаў і наладзе параметраў</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Змяненне выбару патчаў можа выклікаць нечаканыя праблемы.\n\nУключыць усё роўна?</string>\n  <string name=\"universal_patches_safeguard\">Дазволіць выкарыстоўваць універсальныя патчы</string>\n  <string name=\"universal_patches_safeguard_description\">Не перашкаджаць выкарыстанню ўніверсальных патчаў</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Універсальныя патчы не так добра пратэставаны, як тыя, што прызначаны для пэўных праграм.\n\nУключыць усё роўна?</string>\n  <string name=\"keystore\">Сховішча ключоў</string>\n  <string name=\"patches_selections\">Выбары патчаў</string>\n  <string name=\"import_keystore\">Імпартаваць сховішча ключоў</string>\n  <string name=\"import_keystore_description\">Імпартаваць карыстальніцкае сховішча ключоў</string>\n  <string name=\"import_keystore_dialog_title\">Увядзіце ўліковыя даныя сховішча ключоў</string>\n  <string name=\"import_keystore_dialog_description\">Вам трэба будзе ўвесці ўліковыя даныя сховішча ключоў, каб імпартаваць яго.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Імя карыстальніка (Псеўданім)</string>\n  <string name=\"import_keystore_dialog_password_field\">Пароль</string>\n  <string name=\"import_keystore_dialog_button\">Імпартаваць</string>\n  <string name=\"import_keystore_wrong_credentials\">Няправільныя ўліковыя даныя сховішча ключоў</string>\n  <string name=\"import_keystore_success\">Імпартаванае сховішча ключоў</string>\n  <string name=\"export_keystore\">Экспартаваць сховішча ключоў</string>\n  <string name=\"export_keystore_description\">Экспартаваць бягучае сховішча ключоў</string>\n  <string name=\"export_keystore_unavailable\">Няма сховішча ключоў для экспарту</string>\n  <string name=\"export_keystore_success\">Экспартаванае сховішча ключоў</string>\n  <string name=\"regenerate_keystore\">Аднавіць сховішча ключоў</string>\n  <string name=\"regenerate_keystore_description\">Стварыць новае сховішча ключоў</string>\n  <string name=\"regenerate_keystore_dialog_description\">Вы збіраецеся аднавіць сховішча ключоў, якое менеджэр будзе выкарыстоўваць падчас працэсу патчынгу.\n\nВы не зможаце абнавіць раней усталяваныя праграмы з гэтай крыніцы.</string>\n  <string name=\"regenerate_keystore_success\">Сховішча ключоў было паспяхова заменена</string>\n  <string name=\"import_patch_selection\">Імпартаваць выбар патчаў</string>\n  <string name=\"import_patch_selection_description\">Імпартаваць выбар патчаў з файла JSON</string>\n  <string name=\"import_patch_selection_fail\">Не ўдалося імпартаваць выбар патчаў: %s</string>\n  <string name=\"import_patch_selection_success\">Імпартаваны выбар патчаў</string>\n  <string name=\"select_bundle_for_import\">Выбраць пакет для імпарту</string>\n  <string name=\"export_patch_selection\">Экспартаваць выбар патчаў</string>\n  <string name=\"export_patch_selection_description\">Экспартаваць выбар патчаў у файл JSON</string>\n  <string name=\"export_patch_selection_fail\">Не ўдалося экспартаваць выбар патчаў: %s</string>\n  <string name=\"export_patch_selection_success\">Экспартаваны выбар патчаў</string>\n  <string name=\"select_bundle_for_export\">Выбраць пакет для экспарту</string>\n  <string name=\"patch_selection_packages\">Праграмы з захаванымі выбарамі</string>\n  <string name=\"patch_selection_entries\">Усяго выбрана патчаў</string>\n  <string name=\"reset_configuration\">Скінуць канфігурацыю</string>\n  <string name=\"reset_patch_selection\">Выбары патчаў</string>\n  <string name=\"reset_patch_selection_description\">Скінуць захаваны выбар патчаў</string>\n  <string name=\"reset_patch_options\">Параметры патча</string>\n  <string name=\"reset_patch_options_description\">Скінуць захаваныя параметры патчаў</string>\n  <string name=\"reset_patch_selection_success\">Выбар патчаў скінуты</string>\n  <string name=\"patch_selection_reset_all\">Скінуць выбар патчаў глабальна</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Вы збіраецеся скінуць усе выбраныя патчы. Вам трэба будзе ўручную зноў выбраць кожны патч.</string>\n  <string name=\"patch_selection_reset_all_description\">Скідвае ўсе выбраныя патчы</string>\n  <string name=\"patch_selection_reset_package\">Скінуць выбар патчаў для праграмы</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Вы збіраецеся скінуць выбар патчаў для праграмы \\\"%s\\\". Вам прыйдзецца ўручную зноў выбраць кожны патч.</string>\n  <string name=\"patch_selection_reset_package_description\">Скідвае выбар патчаў для адной праграмы</string>\n  <string name=\"patch_selection_reset_patches\">Скінуць выбар патчаў (адзін)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Вы збіраецеся скінуць выбар патчаў для \\\"%s\\\". Вам прыйдзецца выбіраць кожны патч уручную нанова.</string>\n  <string name=\"patch_selection_reset_patches_description\">Скідвае выбар патчаў для пэўнай калекцыі патчаў</string>\n  <string name=\"patch_options_reset_package\">Скінуць параметры патчаў для праграмы</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Вы збіраецеся скінуць параметры патчаў для праграмы \\\"%s\\\". Вам прыйдзецца паўторна ўжываць кожны параметр нанова.</string>\n  <string name=\"patch_options_reset_package_description\">Скідвае параметры патчаў для адной праграмы</string>\n  <string name=\"patch_options_reset_patches\">Скінуць параметры патчаў (адзін)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Вы збіраецеся скінуць параметры патчаў для \\\"%s\\\". Вам прыйдзецца паўторна ўжываць кожны параметр нанова.</string>\n  <string name=\"patch_options_reset_patches_description\">Скідвае параметры патчаў для пэўнай калекцыі патчаў</string>\n  <string name=\"patch_options_reset_all\">Скінуць параметры патчаў глабальна</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Вы збіраецеся скінуць усе параметры патчаў. Вам прыйдзецца паўторна ўжываць кожны параметр нанова.</string>\n  <string name=\"patch_options_reset_all_description\">Скідвае ўсе параметры патчаў</string>\n  <string name=\"downloaders\">Спампоўшчыкі</string>\n  <string name=\"downloader_prereleases\">Выкарыстоўваць папярэднія версіі</string>\n  <string name=\"downloader_prereleases_description\">Выкарыстоўваць папярэднія версіі асноўнага загрузніка</string>\n  <string name=\"downloader_state_loaded\">Загружана</string>\n  <string name=\"downloader_state_failed\">Не ўдалося загрузіць. Націсніце для атрымання падрабязнасцей</string>\n  <string name=\"downloader_state_missing\">Адсутнічае</string>\n  <string name=\"downloader_delete_apps_title\">Выдаліць выбраныя праграмы</string>\n  <string name=\"downloader_delete_apps_description\">Вы ўпэўнены, што хочаце выдаліць выбраныя праграмы?</string>\n  <string name=\"downloader_delete_single_description\">Вы ўпэўнены, што хочаце выдаліць \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Не знойдзена загружаных праграм.</string>\n  <string name=\"downloader_settings_no_apps_description\">Праграмы, спампаваныя праз ReVanced Manager, з\\'явяцца тут.</string>\n  <string name=\"downloader_url\">URL загрузчыка</string>\n  <string name=\"downloader_add\">Дадаць загрузчык</string>\n  <string name=\"select_downloader_type_dialog_description\">Дадаць новыя загрузчыкі з URL або лакальных файлаў</string>\n  <string name=\"local_downloaders_description\">Дадаць загрузчыкі з лакальнага сховішча.</string>\n  <string name=\"remote_downloaders_description\">Дадаць загрузчыкі з URL. Могуць аўтаматычна абнаўляцца.</string>\n  <string name=\"install_revanced_downloaders\">Усталюйце загрузнікі, каб атрымліваць праграмы непасрэдна ў ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Усталяваць загрузнікі ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Адмяніць устаноўку загрузнікаў?</string>\n  <string name=\"cancel_downloader_install_description\">Ідзе ўстаноўка загрузнікаў. Калі вы зараз выйдзеце, спампоўка будзе адменена.</string>\n  <string name=\"downloader_sources_unavailable_title\">Гэтыя загрузчыкі адсутнічаюць</string>\n  <string name=\"downloader_sources_unavailable_description\">Націсніце кнопку абнаўлення, каб выправіць гэта.</string>\n  <string name=\"downloader_update_failed\">Не ўдалося абнавіць загрузчык: %s</string>\n  <string name=\"downloader_replace_fail\">Не ўдалося імпартаваць загрузчык: %s</string>\n  <string name=\"search_apps\">Пошук праграм…</string>\n  <string name=\"loading_body\">Загрузка…</string>\n  <string name=\"downloading_patches\">Спампоўка патчаў…</string>\n  <string name=\"options\">Параметры</string>\n  <string name=\"ok\">ОК</string>\n  <string name=\"yes\">Так</string>\n  <string name=\"no\">Не</string>\n  <string name=\"edit\">Рэдагаваць</string>\n  <string name=\"dialog_input_placeholder\">Значэнне</string>\n  <string name=\"reset\">Скінуць</string>\n  <string name=\"share\">Падзяліцца</string>\n  <string name=\"patch\">Патч</string>\n  <string name=\"select_from_storage\">Выбраць са сховішча</string>\n  <string name=\"select_from_storage_description\">Выберыце файл APK са сховішча, выкарыстоўваючы выбар файлаў</string>\n  <string name=\"suggested_version_info\">Рэкамендаваная версія: %s</string>\n  <string name=\"type_anything\">Набярыце што-небудзь для працягу</string>\n  <string name=\"search\">Пошук патчаў…</string>\n  <string name=\"apply\">Ужыць</string>\n  <string name=\"help\">Дапамога</string>\n  <string name=\"back\">Назад</string>\n  <string name=\"warning\">Папярэджанне</string>\n  <string name=\"add\">Дадаць</string>\n  <string name=\"enable\">Уключыць</string>\n  <string name=\"disable\">Адключыць</string>\n  <string name=\"close\">Зачыніць</string>\n  <string name=\"clear\">Ачысціць</string>\n  <string name=\"system\">Сістэма</string>\n  <string name=\"light\">Светлая</string>\n  <string name=\"dark\">Цёмная</string>\n  <string name=\"appearance\">Знешні выгляд</string>\n  <string name=\"networking\">Сетка</string>\n  <string name=\"allow_metered_networks\">Дазволіць лімітаваныя сеткі</string>\n  <string name=\"allow_metered_networks_description\">Дазваляе аўтаматычныя абнаўленні ў лімітаваных сетках.\\n    Праграма ўсё яшчэ можа папярэджваць аб лімітаваных сетках для ручных аперацый.</string>\n  <string name=\"downloaded_apps\">Спампаваныя праграмы</string>\n  <string name=\"process_runtime\">Запусціць Patcher у іншым працэсе (эксперыментальна)</string>\n  <string name=\"process_runtime_description\">Гэта хутчэй і дазваляе Patcher выкарыстоўваць больш памяці</string>\n  <string name=\"process_runtime_memory_limit\">Ліміт памяці працэсу Patcher</string>\n  <string name=\"process_runtime_memory_limit_description\">Максімальны аб\\'ём памяці, які можа выкарыстоўваць працэс Patcher</string>\n  <string name=\"debug_logs_export\">Экспартаваць адладачныя журналы</string>\n  <string name=\"debug_logs_export_read_failed\">Не атрымалася прачытаць журналы (код выхаду %d)</string>\n  <string name=\"debug_logs_export_failed\">Не атрымалася экспартаваць журналы</string>\n  <string name=\"debug_logs_export_success\">Экспартаваныя журналы</string>\n  <string name=\"api_url\">URL-адрас API</string>\n  <string name=\"api_url_description\">API, які выкарыстоўваецца для спампоўкі неабходных файлаў</string>\n  <string name=\"api_url_dialog_title\">Змяніць URL-адрас API</string>\n  <string name=\"api_url_dialog_description\">Змяніць URL-адрас API ReVanced Manager. ReVanced Manager выкарыстоўвае API для спампоўкі патчаў і абнаўленняў.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager падключаецца да API для спампоўкі патчаў і абнаўленняў. Пераканайцеся, што вы давяраеце яму.</string>\n  <string name=\"api_url_dialog_save\">Усталяваць</string>\n  <string name=\"api_url_dialog_reset\">Скінуць URL-адрас API</string>\n  <string name=\"device\">Прылада</string>\n  <string name=\"device_android_version\">Версія Android</string>\n  <string name=\"device_model\">Мадэль</string>\n  <string name=\"device_architectures\">Архітэктуры ЦП</string>\n  <string name=\"device_memory_limit\">Ліміты памяці</string>\n  <string name=\"device_memory_limit_format\">%1$dМБ (Звычайная) - %2$dМБ (Вялікая)</string>\n  <string name=\"patches_force_download\">Прымусова спампаваць усе патчы</string>\n  <string name=\"patches_reset\">Скінуць патчы</string>\n  <string name=\"reset_onboarding\">Скінуць першаснае навучанне</string>\n  <string name=\"reset_onboarding_description\">Паказаць экран першаснага навучання пры наступным запуску праграмы</string>\n  <string name=\"patching\">Патчынг</string>\n  <string name=\"signing\">Падпісанне</string>\n  <string name=\"storage\">Сховішча</string>\n  <string name=\"no_patch_found\">Патчы не знойдзены. Праверце свае патчы</string>\n  <string name=\"tab_apps\">Праграмы</string>\n  <string name=\"tab_patches\">Патчы</string>\n  <string name=\"delete\">Выдаліць</string>\n  <string name=\"refresh\">Абнавіць</string>\n  <string name=\"continue_anyways\">Усё роўна працягнуць</string>\n  <string name=\"download_another_version\">Спампаваць іншую версію</string>\n  <string name=\"download_app\">Спампаваць праграму</string>\n  <string name=\"download_apk\">Спампаваць файл APK</string>\n  <string name=\"patches_download_fail\">Не атрымалася спампаваць патчы: %s</string>\n  <string name=\"api_not_working_title\">Сэрвіс API цяпер не працуе</string>\n  <string name=\"api_not_working_description\">Некаторыя функцыі могуць быць недаступныя. Праверце сваё злучэнне або URL API ў наладах.</string>\n  <string name=\"patches_replace_fail\">Не атрымалася імпартаваць патчы: %s</string>\n  <string name=\"no_patched_apps_found\">Патчаныя праграмы не знойдзены</string>\n  <string name=\"no_patched_apps_description\">У вас цяпер няма вядомых нам патчаных праграм. Зменіце гэта, запаткаваўшы сваю першую праграму!</string>\n  <string name=\"patched_apps_section_title\">Выпраўленыя праграмы</string>\n  <string name=\"patchable_apps_section_title\">Праграмы, якія можна выправіць</string>\n  <string name=\"no_patches_found\">Патчы не знойдзены</string>\n  <string name=\"no_patches_description\">У вас пакуль няма патчаў. Дадайце патчы, націснуўшы кнопку ніжэй!</string>\n  <string name=\"tap_on_patches\">Націсніце на патчы, каб атрымаць больш інфармацыі пра іх</string>\n  <string name=\"patches_selected\">Выбрана: %s</string>\n  <string name=\"incompatible_patches\">Несумяшчальныя патчы</string>\n  <string name=\"universal_patches\">Універсальныя патчы</string>\n  <string name=\"patch_selection_reset_toast\">Выбар патчаў і параметры былі скінуты да рэкамендаваных значэнняў па змаўчанні</string>\n  <string name=\"patch_options_reset_toast\">Параметры патчаў былі скінуты</string>\n  <string name=\"non_suggested_version_warning_title\">Не рэкамендаваная версія</string>\n  <string name=\"non_suggested_version_warning_description\">Выбраная вамі версія праграмы не супадае з рэкамендаванай версіяй.\\nКалі ласка, выкарыстоўвайце рэкамендаваную версію: %s\\n\\nКаб усё роўна працягнуць, адключыце \\\"Патрабаваць рэкамендаваную версію праграмы\\\" у пашыраных наладах.</string>\n  <string name=\"selection_warning_title\">Спыніць выкарыстанне значэнняў па змаўчанні?</string>\n  <string name=\"selection_warning_description\">Рэкамендуецца выкарыстоўваць выбар патчаў і параметры па змаўчанні. Іх змяненне можа прывесці да нечаканых праблем.\\n\\nВам трэба ўключыць \\\"Дазволіць змяненне выбару патчаў і параметраў\\\" у пашыраных наладах перад пераключэннем патчаў.</string>\n  <string name=\"universal_patch_warning_description\">Універсальныя патчы маюць больш абагульненае выкарыстанне і працуюць не так надзейна, як патчы, арыентаваныя на пэўныя праграмы. Вы можаце сутыкнуцца з праблемамі пры іх выкарыстанні.\\n\\nВам трэба ўключыць \\\"Дазволіць выкарыстанне ўніверсальных патчаў\\\" у пашыраных наладах перад выкарыстаннем універсальных патчаў.</string>\n  <string name=\"this_version\">Гэтая версія</string>\n  <string name=\"universal\">Любая праграма</string>\n  <string name=\"search_patches\">Пошук патчаў</string>\n  <string name=\"app_version_not_compatible\">Гэты патч несумяшчальны з выбранай версіяй праграмы (%1$s)\\n\\nЁн сумяшчальны толькі з наступнымі версіямі: %2$s</string>\n  <string name=\"continue_with_version\">Працягнуць з гэтай версіяй?</string>\n  <string name=\"version_not_compatible\">Не ўсе патчы сумяшчальныя з гэтай версіяй (%s). Вы ўсё роўна хочаце працягнуць?</string>\n  <string name=\"download_application\">Спампаваць праграму?</string>\n  <string name=\"app_not_installed\">Выбраная вамі праграма не ўсталявана. Вы хочаце яе спампаваць?</string>\n  <string name=\"failed_to_load_apk\">Не атрымалася загрузіць APK</string>\n  <string name=\"split_apk_not_supported\">Раздзеленыя APK не могуць быць выпраўлены</string>\n  <string name=\"loading\">Загрузка…</string>\n  <string name=\"not_installed\">Не ўсталявана</string>\n  <string name=\"installed\">Усталявана</string>\n  <string name=\"app_info\">Інфармацыя аб праграме</string>\n  <string name=\"uninstall\">Выдаліць</string>\n  <string name=\"unpatch\">Распатчаваць</string>\n  <string name=\"repatch\">Перапатчаваць</string>\n  <string name=\"install_type\">Тып усталёўкі</string>\n  <string name=\"package_name\">Назва пакета</string>\n  <string name=\"original_package_name\">Арыгінальная назва пакета</string>\n  <string name=\"applied_patches\">Ужытыя патчы</string>\n  <string name=\"view_applied_patches\">Праглядзець ужытыя патчы</string>\n  <string name=\"default_install\">Па змаўчанні</string>\n  <string name=\"mount_install\">Змантаваць</string>\n  <string name=\"mounted\">Змантавана</string>\n  <string name=\"not_mounted\">Не змантавана</string>\n  <string name=\"mount\">Змантаваць</string>\n  <string name=\"unmount\">Дэмантаваць</string>\n  <string name=\"failed_to_mount\">Не ўдалося змантаваць: %s</string>\n  <string name=\"failed_to_unmount\">Не ўдалося дэмантаваць: %s</string>\n  <string name=\"unpatch_app\">Выдаліць патчы з праграмы?</string>\n  <string name=\"unpatch_description\">Вы ўпэўненыя, што хочаце выдаліць патчы з гэтай праграмы?</string>\n  <string name=\"downloader_invalid_version\">Спампоўшчык не атрымаў правільную версію</string>\n  <string name=\"downloader_app_not_found\">Спампоўшчык не знайшоў праграму</string>\n  <string name=\"downloader_error\">Памылка спампоўшчыка: %s</string>\n  <string name=\"no_downloaders_installed\">Загрузнікі праграм не ўсталяваны!</string>\n  <string name=\"no_downloaders_trusted\">Ніводзін загрузнік праграм не давераны! Калі ласка, праверце налады.</string>\n  <string name=\"already_patched\">Ужо адпачана</string>\n  <string name=\"patch_selector_sheet_filter_title\">Фільтр</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Сумяшчальнасць</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Пакеты</string>\n  <string name=\"patch_selector_sheet_actions_title\">Дзеянні</string>\n  <string name=\"restore_default_selection\">Аднавіць выбар па змаўчанні</string>\n  <string name=\"deselect_all\">Зняць усе выбары</string>\n  <string name=\"invert_selection\">Інвертаваць выбар</string>\n  <string name=\"deselect_all_except\">Зняць выбар з усяго, акрамя %s</string>\n  <string name=\"scope_dialog_title\">Прымяніць да</string>\n  <string name=\"scope_all_patches\">Усе выпраўленні</string>\n  <string name=\"scope_bundle_patches\">Толькі %s</string>\n  <string name=\"string_option_menu_description\">Больш опцый</string>\n  <string name=\"option_preset_custom_value\">Карыстальніцкае значэнне</string>\n  <string name=\"path_selector\">Выбраць са сховішча</string>\n  <string name=\"path_selector_parent_dir\">Папярэдні каталог</string>\n  <string name=\"path_selector_dirs\">Каталогі</string>\n  <string name=\"path_selector_files\">Файлы</string>\n  <string name=\"show_password_field\">Паказаць пароль</string>\n  <string name=\"hide_password_field\">Схаваць пароль</string>\n  <string name=\"installer\">Усталёўшчык</string>\n  <string name=\"install_app\">Усталяваць</string>\n  <string name=\"install_app_success\">Праграма ўсталявана</string>\n  <string name=\"install_app_fail\">Не ўдалося ўсталяваць праграму: %s</string>\n  <string name=\"reinstall_app_fail\">Не ўдалося пераўсталяваць праграму: %s</string>\n  <string name=\"uninstall_app_fail\">Не ўдалося выдаліць праграму: %s</string>\n  <string name=\"open_app\">Адкрыць</string>\n  <string name=\"save_apk\">Захаваць APK</string>\n  <string name=\"save_apk_success\">APK захаваны</string>\n  <string name=\"sign_fail\">Не ўдалося падпісаць APK: %s</string>\n  <string name=\"save_logs\">Захаваць логі</string>\n  <string name=\"save_as_file\">Захаваць у файлы</string>\n  <string name=\"export_patcher_logs\">Экспартаваць логі патчара</string>\n  <string name=\"save_logs_success\">Логі захаваны</string>\n  <string name=\"downloader_activity_dialog_body\">Для працягу працы з гэтым спампоўшчыкам патрабуецца ўзаемадзеянне з карыстальнікам.</string>\n  <string name=\"select_install_type\">Выберыце тып устаноўкі</string>\n  <string name=\"patcher_step_group_preparing\">Падрыхтоўка</string>\n  <string name=\"patcher_step_load_patches\">Загрузка патчаў</string>\n  <string name=\"patcher_step_unpack\">Падрыхтаваць патчар</string>\n  <string name=\"patcher_step_group_patching\">Патчынг</string>\n  <string name=\"patcher_step_group_saving\">Захаванне</string>\n  <string name=\"patcher_step_write_patched\">Запіс адпачанага файла APK</string>\n  <string name=\"patcher_step_sign_apk\">Падпісанне адпачанага файла APK</string>\n  <string name=\"patcher_notification_title\">Патчынг у працэсе…</string>\n  <string name=\"patcher_notification_text\">Націсніце, каб вярнуцца да патчара</string>\n  <string name=\"patcher_stop_confirm_title\">Спыніць патчар</string>\n  <string name=\"patcher_stop_confirm_description\">Вы ўпэўненыя, што хочаце спыніць працэс патчынгу?</string>\n  <string name=\"patcher_install_in_progress\">Устаноўка ў працэсе. Калі ласка, пачакайце</string>\n  <string name=\"execute_patches\">Выканаць патчы</string>\n  <string name=\"executing_patch\">Выканаць %s</string>\n  <string name=\"failed_to_execute_patch\">Не ўдалося выканаць %s</string>\n  <string name=\"step_completed\">завершана</string>\n  <string name=\"step_failed\">не ўдалося</string>\n  <string name=\"step_running\">выконваецца</string>\n  <string name=\"step_waiting\">чаканне</string>\n  <string name=\"expand_content\">разгарнуць</string>\n  <string name=\"collapse_content\">згарнуць</string>\n  <string name=\"drag_handle\">змяніць парадак</string>\n  <string name=\"more\">Больш</string>\n  <string name=\"less\">Менш</string>\n  <string name=\"continue_\">Працягнуць</string>\n  <string name=\"dismiss\">Адхіліць</string>\n  <string name=\"view_announcement\">Праглядзець аб\\'яву</string>\n  <string name=\"permanent_dismiss\">Не паказваць гэта зноў</string>\n  <string name=\"donate\">Ахвяраваць</string>\n  <string name=\"website\">Вэб-сайт</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Кантакт</string>\n  <string name=\"license\">Ліцэнзія</string>\n  <string name=\"source\">Крыніца</string>\n  <string name=\"repository\">Сховішча</string>\n  <string name=\"bundle_information_by_author\">Аўтар: %1$s</string>\n  <string name=\"version\">Версія</string>\n  <string name=\"version_compatibility_warning\">Выбраная версія можа быць несумяшчальнай з выбранымі выпраўленнямі</string>\n  <string name=\"submit_feedback\">Адправіць праблему або водгук</string>\n  <string name=\"submit_feedback_description\">Дапамажыце нам палепшыць гэтую праграму</string>\n  <string name=\"developer_options\">Параметры распрацоўшчыка</string>\n  <string name=\"developer_options_description\">Параметры для адладкі праблем</string>\n  <string name=\"patches_update_success\">Абнаўленне паспяховае</string>\n  <string name=\"patches_update_unavailable\">Абнаўлення няма</string>\n  <string name=\"view_patches\">Праглядзець патчы</string>\n  <string name=\"patches_view_any_version\">Любая версія</string>\n  <string name=\"patches_view_any_package\">Любы пакет</string>\n  <string name=\"patches_delete_single_dialog_description\">Вы ўпэўненыя, што хочаце выдаліць \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Вы ўпэўненыя, што хочаце выдаліць выбраныя патчы?</string>\n  <string name=\"announcements\">Аб\\'явы</string>\n  <string name=\"archive\">Архіў</string>\n  <string name=\"about_revanced_manager\">Пра ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager — гэта праграма для Android, якая выкарыстоўвае ReVanced Patcher для патчынгу праграм Android. Яна дазваляе спампоўваць і патчыць праграмы з дапамогай карыстальніцкіх патчаў, а таксама кіраваць працэсам патчынгу.</string>\n  <string name=\"developer_options_taps\">засталося %d націскаў</string>\n  <string name=\"developer_options_enabled\">Параметры распрацоўшчыка ўключаны</string>\n  <string name=\"developer_options_already_enabled\">Параметры распрацоўшчыка ўжо ўключаны</string>\n  <string name=\"update_available\">Даступна абнаўленне</string>\n  <string name=\"current_version\">Бягучая версія: %s</string>\n  <string name=\"new_version\">Новая версія: %s</string>\n  <string name=\"ready_to_install_update\">Гатова да ўстаноўкі абнаўлення</string>\n  <string name=\"update_completed\">Абнаўленне ўсталявана</string>\n  <string name=\"install_update_manager_failed\">Не ўдалося ўсталяваць абнаўленне</string>\n  <string name=\"manual_update_check\">Праверыць наяўнасць абнаўленняў</string>\n  <string name=\"view_update\">Праглядзець абнаўленне</string>\n  <string name=\"manual_update_check_description\">Праверыць абнаўленні ўручную</string>\n  <string name=\"update_checking_manager\">Праверыць наяўнасць абнаўленняў пры запуску</string>\n  <string name=\"update_checking_manager_description\">Праверыць наяўнасць новых версій ReVanced Manager пры запуску праграмы</string>\n  <string name=\"update_checking_downloader\">Праверыць абнаўленні загрузнікаў ReVanced пры запуску</string>\n  <string name=\"update_checking_downloader_description\">Праверыць абнаўленні ўсталяваных загрузнікаў ReVanced пры запуску праграмы</string>\n  <string name=\"manager_prereleases\">Выкарыстоўваць папярэднія версіі</string>\n  <string name=\"manager_prereleases_description\">Выкарыстоўваць папярэднія версіі ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Папярэднія версіі могуць быць нестабільнымі і ўтрымліваць памылкі. Вы можаце сутыкнуцца са збоямі, стратай даных або іншымі нечаканымі праблемамі. Уключайце гэта, толькі калі вы гатовыя да гэтых рызык.</string>\n  <string name=\"changelog\">Праглядзець часопіс змяненняў</string>\n  <string name=\"changelog_loading\">Загрузка змяненняў</string>\n  <string name=\"changelog_download_fail\">Не ўдалося спампаваць змены: %s</string>\n  <string name=\"changelog_description\">Праверце апошнія змены ў гэтым абнаўленні</string>\n  <string name=\"battery_optimization_notification\">Аптымізацыі батарэі павінны быць адключаны, каб ReVanced Manager правільна працаваў у фонавым рэжыме. Націсніце тут, каб адключыць аптымізацыі.</string>\n  <string name=\"installing_manager_update\">Устаноўка абнаўлення…</string>\n  <string name=\"downloading_manager_update\">Спампоўка абнаўлення…</string>\n  <string name=\"download_manager_failed\">Не ўдалося спампаваць абнаўленне: %s</string>\n  <string name=\"cancel\">Адмена</string>\n  <string name=\"save\">Захаваць</string>\n  <string name=\"save_with_count\">Захаваць (%1$s)</string>\n  <string name=\"update\">Абнавіць</string>\n  <string name=\"empty\">Пуста</string>\n  <string name=\"installing_message\">Націсніце на <b>Абнавіць</b>, калі будзе прапанавана.\nReVanced Manager закрыецца падчас абнаўлення.</string>\n  <string name=\"no_changelogs_found\">Зменаў не знойдзена</string>\n  <string name=\"just_now\">Толькі што</string>\n  <string name=\"minutes_ago\">%s хв. таму</string>\n  <string name=\"hours_ago\">%s гадз. таму</string>\n  <string name=\"days_ago\">%s дн. таму</string>\n  <string name=\"invalid_date\">Недапушчальная дата</string>\n  <string name=\"disable_battery_optimization\">Адключыць аптымізацыю батарэі</string>\n  <string name=\"input_dialog_value_invalid\">Недапушчальнае значэнне</string>\n  <string name=\"option_required\">Гэты параметр абавязковы</string>\n  <string name=\"required_options_screen\">Абавязковыя параметры</string>\n  <string name=\"failed_to_check_updates\">Не ўдалося праверыць наяўнасць абнаўленняў: %s</string>\n  <string name=\"no_update_available\">Абнаўлення няма</string>\n  <string name=\"no_announcements_found\">Абвестак не знойдзена</string>\n  <string name=\"update_check\">Праверка наяўнасці абнаўленняў…</string>\n  <string name=\"dismiss_temporary\">Не зараз</string>\n  <string name=\"update_available_dialog_description\">Даступна новая версія ReVanced Manager (%s).</string>\n  <string name=\"failed_to_download_update\">Не ўдалося спампаваць абнаўленне: %s</string>\n  <string name=\"download\">Спампаваць</string>\n  <string name=\"download_confirmation_metered\">Вы зараз карыстаецеся тарыфным злучэннем, і можа спаганяцца плата за перадачу дадзеных ад вашага правайдэра.\n\nВы ўсё яшчэ хочаце працягнуць?</string>\n  <string name=\"download_update_confirmation\">Спампаваць абнаўленне?</string>\n  <string name=\"no_contributors_found\">Удзельнікаў не знойдзена</string>\n  <string name=\"select\">Выбраць</string>\n  <string name=\"select_deselect_all\">Выбраць або адмяніць выбар усяго</string>\n  <string name=\"select_patches_type_dialog_description\">Дадаць новыя патчы з URL або лакальных файлаў</string>\n  <string name=\"local_patches_description\">Дадаць патчы з лакальнага сховішча.</string>\n  <string name=\"remote_patches_description\">Дадаць патчы з URL. Патчы могуць аўтаматычна абнаўляцца.</string>\n  <string name=\"recommended\">Рэкамендавана</string>\n  <string name=\"installation_failed_dialog_title\">Не ўдалося ўсталяваць</string>\n  <string name=\"installation_cancelled_dialog_title\">Устаноўка адменена</string>\n  <string name=\"installation_blocked_dialog_title\">Устаноўка заблакавана</string>\n  <string name=\"installation_conflict_dialog_title\">Канфлікт устаноўкі</string>\n  <string name=\"installation_incompatible_dialog_title\">Несумяшчальная ўстаноўка</string>\n  <string name=\"installation_invalid_dialog_title\">Несапраўдная ўстаноўка</string>\n  <string name=\"installation_storage_issue_dialog_title\">Недастаткова месца для захоўвання</string>\n  <string name=\"installation_timeout_dialog_title\">Час устаноўкі скончыўся</string>\n  <string name=\"installation_failed_description\">Устаноўка не ўдалася па невядомай прычыне. Паспрабаваць яшчэ раз?</string>\n  <string name=\"installation_aborted_description\">Устаноўка была адменена ўручную. Паспрабаваць яшчэ раз?</string>\n  <string name=\"installation_blocked_description\">Устаноўка была заблакавана. Праверце налады бяспекі прылады і паспрабуйце яшчэ раз.</string>\n  <string name=\"installation_conflict_description\">Устаноўка была прадухілена існуючай устаноўкай праграмы. Выдаліць усталяваную праграму і паспрабаваць яшчэ раз?</string>\n  <string name=\"installation_incompatible_description\">Праграма несумяшчальная з гэтай прыладай. Выкарыстоўвайце APK, які сумяшчальны з гэтай прыладай, і паспрабуйце яшчоў раз.</string>\n  <string name=\"installation_invalid_description\">Праграма несапраўдная. Выдаліць праграму і паспрабаваць яшчэ раз?</string>\n  <string name=\"installation_storage_issue_description\">Праграму не ўдалося ўсталяваць з-за недастатковага месца для захоўвання. Вызваліце месца і паспрабуйце яшчэ раз.</string>\n  <string name=\"installation_timeout_description\">Устаноўка заняла занадта шмат часу. Паспрабаваць яшчэ раз?</string>\n  <string name=\"reinstall\">Пераўсталяваць</string>\n  <string name=\"show\">Паказаць</string>\n  <string name=\"debugging\">Адладка</string>\n  <string name=\"about_device\">Пра прыладу</string>\n  <string name=\"enter_url\">Увядзіце URL</string>\n  <string name=\"next\">Далей</string>\n  <string name=\"auto_update\">Аўтаматычнае абнаўленне</string>\n  <string name=\"add_patches\">Дадаць патчы</string>\n  <string name=\"auto_update_description\">Аўтаматычна абнаўляць, калі даступная новая версія</string>\n  <string name=\"patches_prereleases\">Выкарыстоўваць папярэднія версіі</string>\n  <string name=\"patches_prereleases_description\">Выкарыстоўваць папярэднія версіі %s</string>\n  <string name=\"patches_url\">URL патчаў</string>\n  <string name=\"incompatible_patches_dialog\">Гэтыя патчы несумяшчальныя з абранай версіяй праграмы (%1$s).\n\nНацісніце на патчы, каб убачыць больш падрабязную інфармацыю.</string>\n  <string name=\"incompatible_patch\">Несумяшчальны патч</string>\n  <string name=\"any_version\">Любы</string>\n  <string name=\"never_show_again\">Ніколі не паказваць зноў</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Паказваць паведамленне аб абнаўленні пры запуску</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Паказваць усплывальнае апавяшчэнне кожны раз, калі пры запуску даступна новае абнаўленне</string>\n  <string name=\"failed_to_import_keystore\">Не ўдалося імпартаваць сховішча ключоў</string>\n  <string name=\"export\">Экспарт</string>\n  <string name=\"confirm\">Пацвердзіць</string>\n  <string name=\"new_announcement\">Новая абвестка:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d патч</item>\n    <item quantity=\"few\">%d патчы</item>\n    <item quantity=\"many\">%d патчоў</item>\n    <item quantity=\"other\">%d патчоў</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Выканаць %d патч</item>\n    <item quantity=\"few\">Выканаць %d патчы</item>\n    <item quantity=\"many\">Выканаць %d патчоў</item>\n    <item quantity=\"other\">Выканаць %d патчоў</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d выбраны</item>\n    <item quantity=\"few\">%d выбраныя</item>\n    <item quantity=\"many\">%d выбраных</item>\n    <item quantity=\"other\">%d выбраных</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-bg-rBG/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Пачер</string>\n  <string name=\"patches\">Пачове</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Мениджър</string>\n  <string name=\"onboarding_welcome_to\">Добре дошли в</string>\n  <string name=\"onboarding_welcome_back\">Здравейте! Това е новият</string>\n  <string name=\"onboarding_apps_subtitle\">Можете да изберете приложение за пач сега или да го направите по-късно</string>\n  <string name=\"onboarding_apps_network_error\">Не можаха да се заредят пачове, защото мрежата е недостъпна или нестабилна. Свържете се със стабилна мрежа и опитайте отново.</string>\n  <string name=\"onboarding_updates_subtitle\">Конфигурирайте автоматични актуализации, за да поддържате ReVanced Manager и пачовете актуални</string>\n  <string name=\"banner_sources_not_downloaded_description\">Пачовете и програмите за изтегляне не можаха да бъдат изтеглени по време на настройката. Докоснете актуализиране, за да ги изтеглите.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager ще се свърже с %s, за да изтегли първоначалните версии, ако вашето устройство е свързано с интернет.</string>\n  <string name=\"retry\">Повторен опит</string>\n  <string name=\"onboarding_skip\">Пропусни засега</string>\n  <string name=\"onboarding_recommended_version\">Препоръчителна версия: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Пропусни разрешенията?</string>\n  <string name=\"onboarding_permissions_skip_description\">Без необходимите разрешения някои функции може да не работят правилно. Можете да ги предоставите по-късно в настройките на приложението.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Пропусни все пак</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager се нуждае от няколко разрешения, за да работи правилно</string>\n  <string name=\"permission_install_apps\">Инсталиране на неизвестни приложения</string>\n  <string name=\"permission_install_apps_description\">Изисква се за инсталиране на пачнати приложения</string>\n  <string name=\"permission_notifications\">Известия</string>\n  <string name=\"permission_notifications_description\">Позволява непрекъснато кръпкане във фонов режим</string>\n  <string name=\"permission_battery\">Оптимизация на батерията</string>\n  <string name=\"permission_battery_description\">Предотвратява прекъсването на пачването във фонов режим</string>\n  <string name=\"permission_grant\">Предостави</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager хост за изтегляне</string>\n  <string name=\"downloader_host_permission_description\">Използва се за контролиране на достъпа до изтеглящите програми на ReVanced Manager. Само ReVanced Manager има това.</string>\n  <string name=\"toast_copied_to_clipboard\">Копирано!</string>\n  <string name=\"copy_to_clipboard\">Копирай в клипборда</string>\n  <string name=\"dashboard\">Табло</string>\n  <string name=\"settings\">Настройки</string>\n  <string name=\"select_app\">Изберете приложение</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d избрани</string>\n  <string name=\"fab_patch_app\">Пачни приложение</string>\n  <string name=\"fab_add_patches\">Добави пачове</string>\n  <string name=\"new_downloader_notification\">Налични са нови изтеглящи програми. Кликнете тук, за да ги конфигурирате.</string>\n  <string name=\"unsupported_architecture_warning\">Закърпването на тази архитектура на устройството не се поддържа и най-вероятно ще се провали.</string>\n  <string name=\"import_\">Импортиране</string>\n  <string name=\"import_patches\">Импортиране на пачове</string>\n  <string name=\"file_field_set\">Избрано</string>\n  <string name=\"file_field_not_set\">Не е избрано</string>\n  <string name=\"field_not_set\">Не е зададено</string>\n  <string name=\"patches_missing\">Липсва</string>\n  <string name=\"patches_error\">Грешка</string>\n  <string name=\"patches_error_description\">Пачовете не можаха да бъдат заредени. Кликнете, за да видите грешката</string>\n  <string name=\"patches_not_downloaded\">Пачовете не са изтеглени.</string>\n  <string name=\"patches_name_default\">Пачове</string>\n  <string name=\"patches_name_fallback\">Без име</string>\n  <string name=\"android_11_bug_dialog_title\">Бъг в Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">Разрешението за инсталиране на приложението трябва да бъде предоставено предварително, за да се избегне бъг в системата на Android 11, който ще повлияе негативно на потребителското изживяване.</string>\n  <string name=\"no_network_toast\">Няма налична интернет връзка</string>\n  <string name=\"selected_app_meta_any_version\">Всяка налична версия</string>\n  <string name=\"app_source_dialog_title\">Изберете източник</string>\n  <string name=\"app_source_dialog_option_auto\">Автоматично</string>\n  <string name=\"app_source_dialog_option_auto_description\">Използвайте инсталирано приложение, след това изтеглен APK, след това налични изтеглящи програми</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Не е намерено съвместимо приложение или достъпни изтеглящи програми</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Монтираните приложения не могат да бъдат пачвани отново без root достъп</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Версия %s не съответства на предложената версия</string>\n  <string name=\"patch_item_description\">Започнете закърпване на приложението</string>\n  <string name=\"patch_selector_item\">Изберете пачове</string>\n  <string name=\"patch_selector_item_description\">%d избрани пачове</string>\n  <string name=\"patch_selection_changed_warning\">Изборът на пачове е променен</string>\n  <string name=\"no_patches_selected\">Няма избрани пачове</string>\n  <string name=\"network_unavailable_warning\">Устройството ви не е свързано с интернет. Изтеглянето ще се провали по-късно.</string>\n  <string name=\"network_metered_warning\">В момента сте на лимитирана връзка. Могат да бъдат приложени такси за данни от вашия доставчик на услуги.</string>\n  <string name=\"apk_source_selector_item\">Изберете източник на APK</string>\n  <string name=\"apk_source_auto\">Авто</string>\n  <string name=\"apk_source_auto_installed\">Авто · Използване на инсталиран APK</string>\n  <string name=\"apk_source_auto_downloaded\">Авто · Използване на изтеглен APK</string>\n  <string name=\"apk_source_auto_downloader\">Авто · Използвайки наличните изтеглящи програми</string>\n  <string name=\"apk_source_auto_storage\">Авто · Избери от хранилище</string>\n  <string name=\"apk_source_downloader\">Използване на %s</string>\n  <string name=\"apk_source_installed\">Използване на инсталиран APK</string>\n  <string name=\"apk_source_local\">Използване на локален APK файл</string>\n  <string name=\"apk_source_downloaded\">Вече изтеглено</string>\n  <string name=\"legacy_import_failed\">Не може да се импортират стари настройки</string>\n  <string name=\"auto_updates_dialog_title\">Конфигуриране на актуализации</string>\n  <string name=\"auto_updates_dialog_description\">Искате ли ReVanced Manager периодично да проверява за актуализации за следните компоненти?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced пачове</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Изтеглящи програми</string>\n  <string name=\"auto_updates_dialog_note\">Тези настройки могат да бъдат променени по-късно.\n\n    ReVanced Manager ще се свърже с %s, за да изтегли първоначалните версии, ако вашето устройство е свързано с интернет.</string>\n  <string name=\"announcements_filter_tag\">Филтриране по таг</string>\n  <string name=\"announcements_show_archived\">Покажи архивираните</string>\n  <string name=\"general\">Общи</string>\n  <string name=\"general_description\">Език, тема, динамичен цвят</string>\n  <string name=\"updates\">Актуализации</string>\n  <string name=\"updates_description\">Проверете за актуализации и прегледайте дневника на промените</string>\n  <string name=\"downloads\">Изтегляния</string>\n  <string name=\"downloads_description\">Изтеглящи и изтеглени приложения</string>\n  <string name=\"import_export\">Импортиране &amp; експортиране</string>\n  <string name=\"import_export_description\">Keystore, опции и избор на пачове</string>\n  <string name=\"advanced\">Разширени</string>\n  <string name=\"advanced_description\">API URL, ограничение на паметта, отстраняване на грешки</string>\n  <string name=\"safeguards_toggled_warning\">Защитите са превключени</string>\n  <string name=\"about\">Относно</string>\n  <string name=\"about_app_name\">Относно %1$s</string>\n  <string name=\"opensource_licenses\">Лицензи за отворен код</string>\n  <string name=\"opensource_licenses_description\">Прегледайте всички библиотеки, използвани за създаването на това приложение</string>\n  <string name=\"contributors\">Сътрудници</string>\n  <string name=\"contributors_description\">Прегледайте сътрудниците на ReVanced</string>\n  <string name=\"dynamic_color\">Динамичен цвят</string>\n  <string name=\"dynamic_color_description\">Адаптирайте цветовете към тапета</string>\n  <string name=\"pure_black_theme\">Чисто черна тема</string>\n  <string name=\"pure_black_theme_description\">Използвайте чисто черни фонове за тъмна тема</string>\n  <string name=\"theme\">Тема</string>\n  <string name=\"theme_description\">Изберете между светла или тъмна тема</string>\n  <string name=\"language\">Език</string>\n  <string name=\"language_description\">Изберете езика на показване на приложението</string>\n  <string name=\"language_system_default\">Системни по подразбиране</string>\n  <string name=\"search_languages\">Търсене на езици…</string>\n  <string name=\"safeguards\">Предпазни мерки</string>\n  <string name=\"patch_compat_check\">Деактивиране на проверката за съвместимост на версиите</string>\n  <string name=\"patch_compat_check_description\">Не ограничавайте пачовете до съвместими версии на приложения</string>\n  <string name=\"patch_compat_check_confirmation\">Избирането на несъвместими пачове може да доведе до счупено приложение.\n\nИскате ли все пак да продължите?</string>\n  <string name=\"suggested_version_safeguard\">Изискване на предложена версия на приложението</string>\n  <string name=\"suggested_version_safeguard_description\">Наложете избора на предложената версия на приложението</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Избирането на приложение, което не е предложената версия, може да причини неочаквани проблеми.\n\nИскате ли все пак да продължите?</string>\n  <string name=\"patch_selection_safeguard\">Разрешаване на промяна на избора и опциите за пачове</string>\n  <string name=\"patch_selection_safeguard_description\">Не предотвратявайте избирането или премахването на избора на пачове и персонализирането на опциите</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Промяната на избора на пачове може да причини неочаквани проблеми.\n\nРазреши ли все пак?</string>\n  <string name=\"universal_patches_safeguard\">Разрешаване използването на универсални пачове</string>\n  <string name=\"universal_patches_safeguard_description\">Не предотвратявайте използването на универсални пачове</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Универсалните пачове не са толкова добре тествани, колкото тези, които са насочени към конкретни приложения.\n\nРазреши ли все пак?</string>\n  <string name=\"keystore\">Хранилище на ключове</string>\n  <string name=\"patches_selections\">Избор на пачове</string>\n  <string name=\"import_keystore\">Импортиране на хранилище за ключове</string>\n  <string name=\"import_keystore_description\">Импортиране на персонализирано хранилище за ключове</string>\n  <string name=\"import_keystore_dialog_title\">Въведете идентификационни данни за хранилището за ключове</string>\n  <string name=\"import_keystore_dialog_description\">Ще трябва да въведете идентификационните данни на хранилището за ключове, за да го импортирате.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Потребителско име (Псевдоним)</string>\n  <string name=\"import_keystore_dialog_password_field\">Парола</string>\n  <string name=\"import_keystore_dialog_button\">Импортиране</string>\n  <string name=\"import_keystore_wrong_credentials\">Грешни идентификационни данни за хранилището за ключове</string>\n  <string name=\"import_keystore_success\">Импортирано хранилище за ключове</string>\n  <string name=\"export_keystore\">Експортиране на хранилище за ключове</string>\n  <string name=\"export_keystore_description\">Експортиране на текущото хранилище за ключове</string>\n  <string name=\"export_keystore_unavailable\">Няма хранилище за ключове за експортиране</string>\n  <string name=\"export_keystore_success\">Експортирано хранилище за ключове</string>\n  <string name=\"regenerate_keystore\">Генериране на ново хранилище за ключове</string>\n  <string name=\"regenerate_keystore_description\">Генериране на ново хранилище за ключове</string>\n  <string name=\"regenerate_keystore_dialog_description\">Предстои ви да генерирате наново хранилището за ключове, което мениджърът ще използва по време на процеса на закърпване.\n\nНяма да можете да актуализирате предишно инсталираните приложения от този източник.</string>\n  <string name=\"regenerate_keystore_success\">Хранилището за ключове е успешно заменено</string>\n  <string name=\"import_patch_selection\">Импортиране на избор на пачове</string>\n  <string name=\"import_patch_selection_description\">Импортиране на избор на пачове от JSON файл</string>\n  <string name=\"import_patch_selection_fail\">Не може да се импортира изборът на пачове: %s</string>\n  <string name=\"import_patch_selection_success\">Импортиран избор на пачове</string>\n  <string name=\"select_bundle_for_import\">Изберете пакет за импортиране в</string>\n  <string name=\"export_patch_selection\">Експортиране на избор на пачове</string>\n  <string name=\"export_patch_selection_description\">Експортиране на избор на пачове в JSON файл</string>\n  <string name=\"export_patch_selection_fail\">Не може да се експортира изборът на пачове: %s</string>\n  <string name=\"export_patch_selection_success\">Експортиран избор на пачове</string>\n  <string name=\"select_bundle_for_export\">Изберете пакет за експортиране от</string>\n  <string name=\"patch_selection_packages\">Приложения със запазени селекции</string>\n  <string name=\"patch_selection_entries\">Общо избрани пачове</string>\n  <string name=\"reset_configuration\">Нулиране на конфигурацията</string>\n  <string name=\"reset_patch_selection\">Избор на пачове</string>\n  <string name=\"reset_patch_selection_description\">Нулиране на запазения избор на пачове</string>\n  <string name=\"reset_patch_options\">Опции за пачване</string>\n  <string name=\"reset_patch_options_description\">Нулиране на запазените опции за пачове</string>\n  <string name=\"reset_patch_selection_success\">Изборът на пачове е нулиран</string>\n  <string name=\"patch_selection_reset_all\">Нулиране на избора на пачове глобално</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Предстои ви да нулирате всички избрани пачове. Ще трябва ръчно да изберете всеки пач отново.</string>\n  <string name=\"patch_selection_reset_all_description\">Нулира всички избрани пачове</string>\n  <string name=\"patch_selection_reset_package\">Нулиране на избора на пачове за приложение</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Предстои ви да нулирате избора на пачове за приложението \\\"%s\\\". Ще трябва ръчно да изберете всеки пач отново.</string>\n  <string name=\"patch_selection_reset_package_description\">Нулира избора на пачове за едно приложение</string>\n  <string name=\"patch_selection_reset_patches\">Нулиране на избора на пачове (единично)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Предстои да нулирате избора на пачове за \\\"%s\\\". Ще трябва да изберете ръчно всеки пач отново.</string>\n  <string name=\"patch_selection_reset_patches_description\">Нулира избора на пачове за определена колекция от пачове</string>\n  <string name=\"patch_options_reset_package\">Нулиране на опциите за пачове за приложението</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Предстои да нулирате опциите за пачове за приложението \\\"%s\\\". Ще трябва да приложите отново всяка опция.</string>\n  <string name=\"patch_options_reset_package_description\">Нулира опциите за пачове за едно приложение</string>\n  <string name=\"patch_options_reset_patches\">Нулиране на опциите за пачове (единично)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Предстои да нулирате опциите за пачове за \\\"%s\\\". Ще трябва да приложите отново всяка опция.</string>\n  <string name=\"patch_options_reset_patches_description\">Нулира опциите за пачове за определена колекция от пачове</string>\n  <string name=\"patch_options_reset_all\">Нулиране на опциите за пачове глобално</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Предстои да нулирате всички опции за пачове. Ще трябва да приложите отново всяка опция.</string>\n  <string name=\"patch_options_reset_all_description\">Нулира всички опции за пачове</string>\n  <string name=\"downloaders\">Изтеглящи</string>\n  <string name=\"downloader_prereleases\">Използвай предварителни версии</string>\n  <string name=\"downloader_prereleases_description\">Използвай предварителни версии на основната програма за изтегляне</string>\n  <string name=\"downloader_state_loaded\">Зареден</string>\n  <string name=\"downloader_state_failed\">Неуспешно зареждане. Натиснете за повече подробности</string>\n  <string name=\"downloader_state_missing\">Липсва</string>\n  <string name=\"downloader_delete_apps_title\">Изтриване на избрани приложения</string>\n  <string name=\"downloader_delete_apps_description\">Сигурни ли сте, че искате да изтриете избраните приложения?</string>\n  <string name=\"downloader_delete_single_description\">Сигурни ли сте, че искате да изтриете \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Няма намерени изтеглени приложения.</string>\n  <string name=\"downloader_settings_no_apps_description\">Приложенията, изтеглени чрез ReVanced Manager, ще се появят тук.</string>\n  <string name=\"downloader_url\">URL адрес на изтеглящата програма</string>\n  <string name=\"downloader_add\">Добавяне на изтегляща програма</string>\n  <string name=\"select_downloader_type_dialog_description\">Добавяне на нови изтеглящи програми от URL адрес или локални файлове</string>\n  <string name=\"local_downloaders_description\">Добавяне на изтеглящи програми от локално хранилище.</string>\n  <string name=\"remote_downloaders_description\">Добавяне на изтеглящи програми от URL адрес. Могат да бъдат автоматично актуализирани.</string>\n  <string name=\"install_revanced_downloaders\">Инсталирайте изтеглящи програми, за да получавате приложения директно в ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Инсталиране на ReVanced Изтеглящи програми</string>\n  <string name=\"cancel_downloader_install_title\">Отмени инсталацията на изтеглящи програми?</string>\n  <string name=\"cancel_downloader_install_description\">Инсталацията на изтеглящи програми е в ход. Ако напуснете сега, изтеглянето ще бъде отменено.</string>\n  <string name=\"downloader_sources_unavailable_title\">Тези изтеглящи програми липсват</string>\n  <string name=\"downloader_sources_unavailable_description\">Натиснете бутона за актуализация, за да го поправите.</string>\n  <string name=\"downloader_update_failed\">Неуспешна актуализация на изтеглящата програма: %s</string>\n  <string name=\"downloader_replace_fail\">Неуспешен импорт на изтеглящата програма: %s</string>\n  <string name=\"search_apps\">Търсене на приложения…</string>\n  <string name=\"loading_body\">Зареждане…</string>\n  <string name=\"downloading_patches\">Изтегляне на пачове…</string>\n  <string name=\"options\">Опции</string>\n  <string name=\"ok\">ОК</string>\n  <string name=\"yes\">Да</string>\n  <string name=\"no\">Не</string>\n  <string name=\"edit\">Редактиране</string>\n  <string name=\"dialog_input_placeholder\">Стойност</string>\n  <string name=\"reset\">Нулиране</string>\n  <string name=\"share\">Споделяне</string>\n  <string name=\"patch\">Пач</string>\n  <string name=\"select_from_storage\">Избор от хранилището</string>\n  <string name=\"select_from_storage_description\">Изберете APK файл от хранилището с помощта на инструмент за избор на файлове</string>\n  <string name=\"suggested_version_info\">Препоръчителна версия: %s</string>\n  <string name=\"type_anything\">Напишете нещо, за да продължите</string>\n  <string name=\"search\">Търсене на пачове…</string>\n  <string name=\"apply\">Приложи</string>\n  <string name=\"help\">Помощ</string>\n  <string name=\"back\">Назад</string>\n  <string name=\"warning\">Предупреждение</string>\n  <string name=\"add\">Добавяне</string>\n  <string name=\"enable\">Активиране</string>\n  <string name=\"disable\">Деактивиране</string>\n  <string name=\"close\">Затвори</string>\n  <string name=\"clear\">Изчистване</string>\n  <string name=\"system\">Система</string>\n  <string name=\"light\">Светъл</string>\n  <string name=\"dark\">Тъмен</string>\n  <string name=\"appearance\">Външен вид</string>\n  <string name=\"networking\">Мрежа</string>\n  <string name=\"allow_metered_networks\">Разрешаване на тарифирани мрежи</string>\n  <string name=\"allow_metered_networks_description\">Разрешава автоматични актуализации през тарифирани мрежи.\\n    Приложението може все още да предупреждава за тарифирани мрежи при ръчни операции.</string>\n  <string name=\"downloaded_apps\">Изтеглени приложения</string>\n  <string name=\"process_runtime\">Стартиране на Patcher в друг процес (експериментално)</string>\n  <string name=\"process_runtime_description\">Това е по-бързо и позволява на Patcher да използва повече памет</string>\n  <string name=\"process_runtime_memory_limit\">Ограничение на паметта за процеса на Patcher</string>\n  <string name=\"process_runtime_memory_limit_description\">Максималният обем памет, който може да използва процесът на Patcher</string>\n  <string name=\"debug_logs_export\">Експортиране на регистрационни файлове за отстраняване на грешки</string>\n  <string name=\"debug_logs_export_read_failed\">Неуспешно четене на регистрационни файлове (код за изход %d)</string>\n  <string name=\"debug_logs_export_failed\">Неуспешно експортиране на регистрационни файлове</string>\n  <string name=\"debug_logs_export_success\">Експортирани регистрационни файлове</string>\n  <string name=\"api_url\">API URL</string>\n  <string name=\"api_url_description\">API, използван за изтегляне на необходимите файлове</string>\n  <string name=\"api_url_dialog_title\">Промяна на API URL</string>\n  <string name=\"api_url_dialog_description\">Променете API URL на ReVanced Manager. ReVanced Manager използва API за изтегляне на пачове и актуализации.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager се свързва с API, за да изтегля пачове и актуализации. Уверете се, че му се доверявате.</string>\n  <string name=\"api_url_dialog_save\">Задай</string>\n  <string name=\"api_url_dialog_reset\">Нулиране на API URL</string>\n  <string name=\"device\">Устройство</string>\n  <string name=\"device_android_version\">Версия на Android</string>\n  <string name=\"device_model\">Модел</string>\n  <string name=\"device_architectures\">CPU архитектури</string>\n  <string name=\"device_memory_limit\">Ограничения на паметта</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Нормална) - %2$dMB (Голяма)</string>\n  <string name=\"patches_force_download\">Принудително изтегляне на всички корекции</string>\n  <string name=\"patches_reset\">Нулиране на корекциите</string>\n  <string name=\"reset_onboarding\">Нулиране на въвеждането</string>\n  <string name=\"reset_onboarding_description\">Показване на екрана за въвеждане при следващото стартиране на приложението</string>\n  <string name=\"patching\">Коригиране</string>\n  <string name=\"signing\">Подписване</string>\n  <string name=\"storage\">Хранилище</string>\n  <string name=\"no_patch_found\">Не може да се намери корекция. Проверете вашите корекции</string>\n  <string name=\"tab_apps\">Приложения</string>\n  <string name=\"tab_patches\">Корекции</string>\n  <string name=\"delete\">Изтриване</string>\n  <string name=\"refresh\">Опресняване</string>\n  <string name=\"continue_anyways\">Продължи така или иначе</string>\n  <string name=\"download_another_version\">Изтегляне на друга версия</string>\n  <string name=\"download_app\">Изтегляне на приложение</string>\n  <string name=\"download_apk\">Изтегляне на APK файл</string>\n  <string name=\"patches_download_fail\">Неуспешно изтегляне на корекции: %s</string>\n  <string name=\"api_not_working_title\">Услугата на API в момента не работи</string>\n  <string name=\"api_not_working_description\">Някои функции може да бъдат засегнати. Проверете връзката си или URL адреса на API в настройките.</string>\n  <string name=\"patches_replace_fail\">Неуспешно импортиране на корекции: %s</string>\n  <string name=\"no_patched_apps_found\">Не са намерени пачнати приложения</string>\n  <string name=\"no_patched_apps_description\">Понастоящем нямате пачнати приложения, за които да знаем. Променете това, като пачнете първото си приложение!</string>\n  <string name=\"patched_apps_section_title\">Кръпкирани приложения</string>\n  <string name=\"patchable_apps_section_title\">Приложения, които могат да бъдат кръпкирани</string>\n  <string name=\"no_patches_found\">Не са намерени пачове</string>\n  <string name=\"no_patches_description\">Все още нямате пачове. Добавете пачове, като докоснете бутона по-долу!</string>\n  <string name=\"tap_on_patches\">Докоснете корекциите, за да получите повече информация за тях</string>\n  <string name=\"patches_selected\">%s избрани</string>\n  <string name=\"incompatible_patches\">Несъвместими корекции</string>\n  <string name=\"universal_patches\">Универсални корекции</string>\n  <string name=\"patch_selection_reset_toast\">Изборът и опциите на корекциите са нулирани до препоръчителните по подразбиране</string>\n  <string name=\"patch_options_reset_toast\">Опциите за корекция са нулирани</string>\n  <string name=\"non_suggested_version_warning_title\">Непрепоръчителна версия</string>\n  <string name=\"non_suggested_version_warning_description\">Избраната от вас версия на приложението не съответства на предложената версия.\\nМоля, използвайте предложената версия: %s\\n\\nЗа да продължите въпреки това, деактивирайте „Изискване на предложена версия на приложението“ в разширените настройки.</string>\n  <string name=\"selection_warning_title\">Спиране на използването по подразбиране?</string>\n  <string name=\"selection_warning_description\">Препоръчително е да използвате избора и опциите на корекциите по подразбиране. Промяната им може да доведе до неочаквани проблеми.\\n\\nТрябва да включите „Разрешаване на промяна на избора и опциите на корекциите“ в разширените настройки, преди да превключвате корекции.</string>\n  <string name=\"universal_patch_warning_description\">Универсалните корекции имат по-обща употреба и не работят толкова надеждно, колкото корекциите, които са насочени към конкретни приложения. Може да срещнете проблеми, докато ги използвате.\\n\\nТрябва да включите „Разрешаване на използване на универсални корекции“ в разширените настройки, преди да използвате универсални корекции.</string>\n  <string name=\"this_version\">Тази версия</string>\n  <string name=\"universal\">Всяко приложение</string>\n  <string name=\"search_patches\">Търсене на корекции</string>\n  <string name=\"app_version_not_compatible\">Тази корекция не е съвместима с избраната версия на приложението (%1$s)\\n\\nТя е съвместима само със следните версии: %2$s</string>\n  <string name=\"continue_with_version\">Продължаване с тази версия?</string>\n  <string name=\"version_not_compatible\">Не всички корекции са съвместими с тази версия (%s). Искате ли да продължите въпреки това?</string>\n  <string name=\"download_application\">Изтегляне на приложение?</string>\n  <string name=\"app_not_installed\">Избраното приложение не е инсталирано. Искате ли да го изтеглите?</string>\n  <string name=\"failed_to_load_apk\">Неуспешно зареждане на APK</string>\n  <string name=\"split_apk_not_supported\">Разделени APK файлове не могат да бъдат закърпени</string>\n  <string name=\"loading\">Зареждане…</string>\n  <string name=\"not_installed\">Не е инсталирано</string>\n  <string name=\"installed\">Инсталирано</string>\n  <string name=\"app_info\">Информация за приложението</string>\n  <string name=\"uninstall\">Деинсталиране</string>\n  <string name=\"unpatch\">Премахване на корекция</string>\n  <string name=\"repatch\">Повторно коригиране</string>\n  <string name=\"install_type\">Устройство</string>\n  <string name=\"package_name\">Име на пакета</string>\n  <string name=\"original_package_name\">Оригинално име на пакета</string>\n  <string name=\"applied_patches\">Приложени пачове</string>\n  <string name=\"view_applied_patches\">Преглед на приложените пачове</string>\n  <string name=\"default_install\">По подразбиране</string>\n  <string name=\"mount_install\">Монтиране</string>\n  <string name=\"mounted\">Монтирано</string>\n  <string name=\"not_mounted\">Не е монтирано</string>\n  <string name=\"mount\">Монтиране</string>\n  <string name=\"unmount\">Демонтиране</string>\n  <string name=\"failed_to_mount\">Неуспешно монтиране: %s</string>\n  <string name=\"failed_to_unmount\">Неуспешно демонтиране: %s</string>\n  <string name=\"unpatch_app\">Премахване на пачове от приложението?</string>\n  <string name=\"unpatch_description\">Сигурни ли сте, че искате да премахнете пачовете от това приложение?</string>\n  <string name=\"downloader_invalid_version\">Изтеглящият инструмент не изтегли правилната версия</string>\n  <string name=\"downloader_app_not_found\">Изтеглящият инструмент не намери приложението</string>\n  <string name=\"downloader_error\">Грешка в изтеглящия инструмент: %s</string>\n  <string name=\"no_downloaders_installed\">Няма инсталирани изтеглящи програми за приложения!</string>\n  <string name=\"no_downloaders_trusted\">Няма доверени изтеглящи програми за приложения! Моля, проверете настройките си.</string>\n  <string name=\"already_patched\">Вече е пачнато</string>\n  <string name=\"patch_selector_sheet_filter_title\">Филтър</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Съвместимост</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Пакети</string>\n  <string name=\"patch_selector_sheet_actions_title\">Действия</string>\n  <string name=\"restore_default_selection\">Възстановяване на избора по подразбиране</string>\n  <string name=\"deselect_all\">Отмяна на избора на всички</string>\n  <string name=\"invert_selection\">Обръщане на избора</string>\n  <string name=\"deselect_all_except\">Премахване на избора на всичко освен %s</string>\n  <string name=\"scope_dialog_title\">Приложи към</string>\n  <string name=\"scope_all_patches\">Всички корекции</string>\n  <string name=\"scope_bundle_patches\">Само %s</string>\n  <string name=\"string_option_menu_description\">Още опции</string>\n  <string name=\"option_preset_custom_value\">Персонализирана стойност</string>\n  <string name=\"path_selector\">Избор от хранилището</string>\n  <string name=\"path_selector_parent_dir\">Предишна директория</string>\n  <string name=\"path_selector_dirs\">Директории</string>\n  <string name=\"path_selector_files\">Файлове</string>\n  <string name=\"show_password_field\">Показване на паролата</string>\n  <string name=\"hide_password_field\">Скриване на паролата</string>\n  <string name=\"installer\">Инсталатор</string>\n  <string name=\"install_app\">Инсталиране</string>\n  <string name=\"install_app_success\">Приложението е инсталирано</string>\n  <string name=\"install_app_fail\">Неуспешно инсталиране на приложението: %s</string>\n  <string name=\"reinstall_app_fail\">Неуспешно преинсталиране на приложението: %s</string>\n  <string name=\"uninstall_app_fail\">Неуспешно деинсталиране на приложението: %s</string>\n  <string name=\"open_app\">Отваряне</string>\n  <string name=\"save_apk\">Запазване на APK</string>\n  <string name=\"save_apk_success\">APK файлът е запазен</string>\n  <string name=\"sign_fail\">Неуспешно подписване на APK: %s</string>\n  <string name=\"save_logs\">Запазване на логове</string>\n  <string name=\"save_as_file\">Запиши във файлове</string>\n  <string name=\"export_patcher_logs\">Експортиране на логове на пачера</string>\n  <string name=\"save_logs_success\">Логовете са запазени</string>\n  <string name=\"downloader_activity_dialog_body\">Изисква се потребителско взаимодействие, за да продължите с този изтеглящ.</string>\n  <string name=\"select_install_type\">Изберете тип инсталация</string>\n  <string name=\"patcher_step_group_preparing\">Подготовка</string>\n  <string name=\"patcher_step_load_patches\">Зареждане на пачове</string>\n  <string name=\"patcher_step_unpack\">Подготви пачър</string>\n  <string name=\"patcher_step_group_patching\">Пачване</string>\n  <string name=\"patcher_step_group_saving\">Запазване</string>\n  <string name=\"patcher_step_write_patched\">Запис на пачнатия APK файл</string>\n  <string name=\"patcher_step_sign_apk\">Подписване на пачнатия APK файл</string>\n  <string name=\"patcher_notification_title\">Пачването е в ход…</string>\n  <string name=\"patcher_notification_text\">Докоснете, за да се върнете към пачера</string>\n  <string name=\"patcher_stop_confirm_title\">Спиране на пачера</string>\n  <string name=\"patcher_stop_confirm_description\">Сигурни ли сте, че искате да спрете процеса на пачване?</string>\n  <string name=\"patcher_install_in_progress\">Инсталацията е в ход. Моля, изчакайте</string>\n  <string name=\"execute_patches\">Изпълнение на пачове</string>\n  <string name=\"executing_patch\">Изпълняване на %s</string>\n  <string name=\"failed_to_execute_patch\">Неуспешно изпълнение на %s</string>\n  <string name=\"step_completed\">завършено</string>\n  <string name=\"step_failed\">неуспешно</string>\n  <string name=\"step_running\">изпълнява се</string>\n  <string name=\"step_waiting\">изчаква се</string>\n  <string name=\"expand_content\">разгъване</string>\n  <string name=\"collapse_content\">свиване</string>\n  <string name=\"drag_handle\">пренареждане</string>\n  <string name=\"more\">Още</string>\n  <string name=\"less\">По-малко</string>\n  <string name=\"continue_\">Продължи</string>\n  <string name=\"dismiss\">Отхвърляне</string>\n  <string name=\"view_announcement\">Преглед на съобщението</string>\n  <string name=\"permanent_dismiss\">Не показвай това отново</string>\n  <string name=\"donate\">Дари</string>\n  <string name=\"website\">Уебсайт</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Контакт</string>\n  <string name=\"license\">Лиценз</string>\n  <string name=\"source\">Източник</string>\n  <string name=\"repository\">Хранилище</string>\n  <string name=\"bundle_information_by_author\">От %1$s</string>\n  <string name=\"version\">Версия</string>\n  <string name=\"version_compatibility_warning\">Избраната версия може да е несъвместима с избраните кръпки</string>\n  <string name=\"submit_feedback\">Изпратете проблем или обратна връзка</string>\n  <string name=\"submit_feedback_description\">Помогнете ни да подобрим това приложение</string>\n  <string name=\"developer_options\">Опции за разработчици</string>\n  <string name=\"developer_options_description\">Опции за отстраняване на грешки</string>\n  <string name=\"patches_update_success\">Актуализацията е успешна</string>\n  <string name=\"patches_update_unavailable\">Няма налична актуализация</string>\n  <string name=\"view_patches\">Преглед на пачове</string>\n  <string name=\"patches_view_any_version\">Всяка версия</string>\n  <string name=\"patches_view_any_package\">Всеки пакет</string>\n  <string name=\"patches_delete_single_dialog_description\">Сигурни ли сте, че искате да изтриете \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Сигурни ли сте, че искате да изтриете избраните пачове?</string>\n  <string name=\"announcements\">Съобщения</string>\n  <string name=\"archive\">Архив</string>\n  <string name=\"about_revanced_manager\">Относно ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager е приложение за Android, което използва ReVanced Patcher за пачване на Android приложения. То ви позволява да изтегляте и пачвате приложения с персонализирани пачове и да управлявате процеса на пачване.</string>\n  <string name=\"developer_options_taps\">%d докосвания остават</string>\n  <string name=\"developer_options_enabled\">Опциите за разработчици са активирани</string>\n  <string name=\"developer_options_already_enabled\">Опциите за разработчици вече са активирани</string>\n  <string name=\"update_available\">Налична е актуализация</string>\n  <string name=\"current_version\">Текуща версия: %s</string>\n  <string name=\"new_version\">Нова версия: %s</string>\n  <string name=\"ready_to_install_update\">Готово за инсталиране на актуализация</string>\n  <string name=\"update_completed\">Актуализацията е инсталирана</string>\n  <string name=\"install_update_manager_failed\">Неуспешно инсталиране на актуализацията</string>\n  <string name=\"manual_update_check\">Проверка за актуализации</string>\n  <string name=\"view_update\">Преглед на актуализация</string>\n  <string name=\"manual_update_check_description\">Ръчна проверка за актуализации</string>\n  <string name=\"update_checking_manager\">Проверка за актуализации при стартиране</string>\n  <string name=\"update_checking_manager_description\">Проверявайте за нови версии на ReVanced Manager при стартиране на приложението</string>\n  <string name=\"update_checking_downloader\">Проверявайте за актуализации на ReVanced Изтеглящи програми при стартиране</string>\n  <string name=\"update_checking_downloader_description\">Проверявайте за актуализации на инсталирани ReVanced Изтеглящи програми при стартиране на приложението</string>\n  <string name=\"manager_prereleases\">Използвайте предварителни версии</string>\n  <string name=\"manager_prereleases_description\">Използвайте предварителни версии на ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Предварителните версии може да са нестабилни и да съдържат грешки. Може да изпитате сривове, загуба на данни или други неочаквани проблеми. Активирайте това само ако сте съгласни с тези рискове.</string>\n  <string name=\"changelog\">Преглед на дневника на промените</string>\n  <string name=\"changelog_loading\">Зареждане на дневник с промени</string>\n  <string name=\"changelog_download_fail\">Неуспешно изтегляне на дневника с промени: %s</string>\n  <string name=\"changelog_description\">Вижте последните промени в тази актуализация</string>\n  <string name=\"battery_optimization_notification\">Оптимизациите на батерията трябва да бъдат изключени, за да може ReVanced Manager да работи правилно във фонов режим. Кликнете тук, за да изключите оптимизациите.</string>\n  <string name=\"installing_manager_update\">Инсталиране на актуализация…</string>\n  <string name=\"downloading_manager_update\">Изтегляне на актуализация…</string>\n  <string name=\"download_manager_failed\">Неуспешно изтегляне на актуализацията: %s</string>\n  <string name=\"cancel\">Отказ</string>\n  <string name=\"save\">Запазване</string>\n  <string name=\"save_with_count\">Запазване (%1$s)</string>\n  <string name=\"update\">Актуализиране</string>\n  <string name=\"empty\">Празно</string>\n  <string name=\"installing_message\">Докоснете <b>Актуализиране</b>, когато бъдете подканени.\nReVanced Manager ще се затвори при актуализиране.</string>\n  <string name=\"no_changelogs_found\">Не са намерени дневници с промени</string>\n  <string name=\"just_now\">Току-що</string>\n  <string name=\"minutes_ago\">преди %sm</string>\n  <string name=\"hours_ago\">преди %sh</string>\n  <string name=\"days_ago\">преди %sd</string>\n  <string name=\"invalid_date\">Невалидна дата</string>\n  <string name=\"disable_battery_optimization\">Деактивиране на оптимизацията на батерията</string>\n  <string name=\"input_dialog_value_invalid\">Невалидна стойност</string>\n  <string name=\"option_required\">Тази опция е задължителна</string>\n  <string name=\"required_options_screen\">Задължителни опции</string>\n  <string name=\"failed_to_check_updates\">Неуспешна проверка за актуализации: %s</string>\n  <string name=\"no_update_available\">Няма налична актуализация</string>\n  <string name=\"no_announcements_found\">Няма намерени съобщения</string>\n  <string name=\"update_check\">Проверка за актуализации…</string>\n  <string name=\"dismiss_temporary\">Не сега</string>\n  <string name=\"update_available_dialog_description\">Налична е нова версия на ReVanced Manager (%s).</string>\n  <string name=\"failed_to_download_update\">Неуспешно изтегляне на актуализацията: %s</string>\n  <string name=\"download\">Изтегляне</string>\n  <string name=\"download_confirmation_metered\">В момента използвате тарифирана връзка и може да се прилагат такси за данни от вашия доставчик на услуги.\n\nВсе още ли искате да продължите?</string>\n  <string name=\"download_update_confirmation\">Изтегляне на актуализация?</string>\n  <string name=\"no_contributors_found\">Не са намерени сътрудници</string>\n  <string name=\"select\">Избор</string>\n  <string name=\"select_deselect_all\">Избиране или отменяне на избора на всички</string>\n  <string name=\"select_patches_type_dialog_description\">Добавете нови пачове от URL адрес или локални файлове</string>\n  <string name=\"local_patches_description\">Добавяне на пачове от локалното хранилище.</string>\n  <string name=\"remote_patches_description\">Добавяне на пачове от URL адрес. Пачовете могат да се актуализират автоматично.</string>\n  <string name=\"recommended\">Препоръчително</string>\n  <string name=\"installation_failed_dialog_title\">Инсталацията е неуспешна</string>\n  <string name=\"installation_cancelled_dialog_title\">Инсталацията е отменена</string>\n  <string name=\"installation_blocked_dialog_title\">Инсталацията е блокирана</string>\n  <string name=\"installation_conflict_dialog_title\">Конфликт при инсталиране</string>\n  <string name=\"installation_incompatible_dialog_title\">Несъвместима инсталация</string>\n  <string name=\"installation_invalid_dialog_title\">Невалидна инсталация</string>\n  <string name=\"installation_storage_issue_dialog_title\">Недостатъчно място за съхранение</string>\n  <string name=\"installation_timeout_dialog_title\">Инсталацията изтече</string>\n  <string name=\"installation_failed_description\">Инсталацията е неуспешна поради неизвестна причина. Да опитате ли отново?</string>\n  <string name=\"installation_aborted_description\">Инсталацията е отменена ръчно. Да опитате ли отново?</string>\n  <string name=\"installation_blocked_description\">Инсталацията е блокирана. Прегледайте настройките за сигурност на устройството си и опитайте отново.</string>\n  <string name=\"installation_conflict_description\">Инсталацията беше предотвратена от съществуваща инсталация на приложението. Да деинсталирате ли инсталираното приложение и да опитате отново?</string>\n  <string name=\"installation_incompatible_description\">Приложението е несъвместимо с това устройство. Използвайте APK, който е съвместим с това устройство, и опитайте отново.</string>\n  <string name=\"installation_invalid_description\">Приложението е невалидно. Да деинсталирате ли приложението и да опитате отново?</string>\n  <string name=\"installation_storage_issue_description\">Приложението не може да бъде инсталирано поради недостатъчно място за съхранение. Освободете малко място и опитайте отново.</string>\n  <string name=\"installation_timeout_description\">Инсталацията отне твърде много време. Да опитате ли отново?</string>\n  <string name=\"reinstall\">Преинсталиране</string>\n  <string name=\"show\">Показване</string>\n  <string name=\"debugging\">Отстраняване на грешки</string>\n  <string name=\"about_device\">Относно устройството</string>\n  <string name=\"enter_url\">Въведете URL адрес</string>\n  <string name=\"next\">Напред</string>\n  <string name=\"auto_update\">Автоматична актуализация</string>\n  <string name=\"add_patches\">Добавяне на пачове</string>\n  <string name=\"auto_update_description\">Автоматично актуализиране, когато е налична нова версия</string>\n  <string name=\"patches_prereleases\">Използвайте предварителни версии</string>\n  <string name=\"patches_prereleases_description\">Използвайте предварителни версии на %s</string>\n  <string name=\"patches_url\">URL адрес на пачове</string>\n  <string name=\"incompatible_patches_dialog\">Тези пачове не са съвместими с избраната версия на приложението (%1$s).\n\nКликнете върху пачовете, за да видите повече подробности.</string>\n  <string name=\"incompatible_patch\">Несъвместим пач</string>\n  <string name=\"any_version\">Всеки</string>\n  <string name=\"never_show_again\">Никога повече да не се показва</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Показване на съобщение за актуализация при стартиране</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Показвайте изскачащо известие, когато е налична нова актуализация при стартиране</string>\n  <string name=\"failed_to_import_keystore\">Неуспешно импортиране на хранилище за ключове</string>\n  <string name=\"export\">Експортиране</string>\n  <string name=\"confirm\">Потвърди</string>\n  <string name=\"new_announcement\">Ново съобщение:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d корекция</item>\n    <item quantity=\"other\">%d корекции</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Изпълни %d корекция</item>\n    <item quantity=\"other\">Изпълни %d корекции</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d избран</item>\n    <item quantity=\"other\">%d избрани</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-bn-rBD/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">প্যাচার</string>\n  <string name=\"patches\">প্যাচ</string>\n  <string name=\"cli\">সিএলআই</string>\n  <string name=\"manager\">ম্যানেজার</string>\n  <string name=\"onboarding_welcome_to\">স্বাগত জানাই</string>\n  <string name=\"onboarding_welcome_back\">হাই! এটা নতুন</string>\n  <string name=\"onboarding_apps_subtitle\">আপনি এখনই বা পরে প্যাচ করার জন্য একটি অ্যাপ নির্বাচন করতে পারেন</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager এবং প্যাচগুলি আপ টু ডেট রাখতে স্বয়ংক্রিয় আপডেট কনফিগার করুন</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager %s এর সাথে কানেক্ট হবে যাতে প্রাথমিক সংস্করণগুলি ডাউনলোড করা যায় যদি আপনার ডিভাইস ইন্টারনেটের সাথে সংযুক্ত থাকে।</string>\n  <string name=\"retry\">পুনরায় চেষ্টা করুন</string>\n  <string name=\"onboarding_skip\">এখনকার জন্য এড়িয়ে যান</string>\n  <string name=\"onboarding_recommended_version\">প্রস্তাবিত সংস্করণ: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">অনুমতি এড়িয়ে যাবেন?</string>\n  <string name=\"onboarding_permissions_skip_description\">প্রয়োজনীয় অনুমতি ছাড়া কিছু বৈশিষ্ট্য সঠিকভাবে কাজ নাও করতে পারে। আপনি পরে অ্যাপ সেটিংসে সেগুলি দিতে পারবেন।</string>\n  <string name=\"onboarding_permissions_skip_anyway\">যাইহোক এড়িয়ে যান</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager-এর সঠিকভাবে কাজ করার জন্য কিছু অনুমতির প্রয়োজন</string>\n  <string name=\"permission_install_apps\">অজানা অ্যাপ ইনস্টল করুন</string>\n  <string name=\"permission_install_apps_description\">প্যাচ করা অ্যাপ্লিকেশন ইনস্টল করার জন্য প্রয়োজনীয়</string>\n  <string name=\"permission_notifications\">নোটিস্য়াসেগ</string>\n  <string name=\"permission_battery\">ব্যাটারি অপ্টিমাইজেশন</string>\n  <string name=\"permission_battery_description\">ব্যাকগ্রাউন্ডে প্যাচিং-এর বাধা বন্ধ করে</string>\n  <string name=\"permission_grant\">অনুমতি দিন</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager ডাউনলোডার হোস্ট</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager ডাউনলোডারগুলির অ্যাক্সেস নিয়ন্ত্রণ করতে ব্যবহৃত হয়। শুধুমাত্র ReVanced Manager-এর এটি আছে।</string>\n  <string name=\"toast_copied_to_clipboard\">অনুলিপি করা হয়েছে!</string>\n  <string name=\"copy_to_clipboard\">ক্লিপবোর্ডে কপি করুন</string>\n  <string name=\"dashboard\">ড্যাশবোর্ড</string>\n  <string name=\"settings\">সেটিংস</string>\n  <string name=\"select_app\">একটি অ্যাপ নির্বাচন করুন</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d নির্বাচিত</string>\n  <string name=\"fab_patch_app\">একটি অ্যাপ প্যাচ করুন</string>\n  <string name=\"fab_add_patches\">প্যাচ যোগ করুন</string>\n  <string name=\"new_downloader_notification\">নতুন ডাউনলোডার(গুলি) উপলব্ধ। সেগুলি কনফিগার করতে এখানে ক্লিক করুন।</string>\n  <string name=\"unsupported_architecture_warning\">এই ডিভাইসের আর্কিটেকচারে প্যাচিং অসমর্থিত এবং সম্ভবত ব্যর্থ হবে।</string>\n  <string name=\"import_\">আমদানি করুন</string>\n  <string name=\"import_patches\">প্যাচ আমদানি করুন</string>\n  <string name=\"file_field_set\">নির্বাচিত</string>\n  <string name=\"file_field_not_set\">নির্বাচিত নয়</string>\n  <string name=\"field_not_set\">সেট করা হয়নি</string>\n  <string name=\"patches_missing\">নেই</string>\n  <string name=\"patches_error\">ত্রুটি</string>\n  <string name=\"patches_error_description\">প্যাচ লোড করা যায়নি। ত্রুটি দেখতে ক্লিক করুন</string>\n  <string name=\"patches_not_downloaded\">প্যাচগুলি ডাউনলোড করা হয়নি।</string>\n  <string name=\"patches_name_default\">প্যাচগুলি</string>\n  <string name=\"patches_name_fallback\">নামহীন</string>\n  <string name=\"android_11_bug_dialog_title\">Android 11 বাগ</string>\n  <string name=\"android_11_bug_dialog_description\">Android 11 সিস্টেমে একটি বাগ এড়াতে অ্যাপ ইনস্টলেশনের অনুমতি আগে থেকেই দিতে হবে, যা ব্যবহারকারীর অভিজ্ঞতার উপর নেতিবাচক প্রভাব ফেলবে।</string>\n  <string name=\"no_network_toast\">কোনো ইন্টারনেট সংযোগ উপলব্ধ নেই</string>\n  <string name=\"selected_app_meta_any_version\">যেকোনো উপলব্ধ সংস্করণ</string>\n  <string name=\"app_source_dialog_title\">উৎস নির্বাচন করুন</string>\n  <string name=\"app_source_dialog_option_auto\">স্বয়ংক্রিয়</string>\n  <string name=\"app_source_dialog_option_auto_description\">ইনস্টল করা অ্যাপ ব্যবহার করুন, তারপর ডাউনলোড করা APK, তারপর উপলব্ধ ডাউনলোডার।</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">কোনো সামঞ্জস্যপূর্ণ অ্যাপ বা ডাউনলোডার উপলব্ধ নেই</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">রুট অ্যাক্সেস ছাড়া মাউন্ট করা অ্যাপ আবার প্যাচ করা যাবে না</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">সংস্করণ %s প্রস্তাবিত সংস্করণের সাথে মেলে না</string>\n  <string name=\"patch_item_description\">অ্যাপ্লিকেশন প্যাচ করা শুরু করুন</string>\n  <string name=\"patch_selector_item\">প্যাচ নির্বাচন করুন</string>\n  <string name=\"patch_selector_item_description\">%d প্যাচ নির্বাচিত</string>\n  <string name=\"patch_selection_changed_warning\">প্যাচ নির্বাচন পরিবর্তন করা হয়েছে</string>\n  <string name=\"no_patches_selected\">কোনো প্যাচ নির্বাচিত নেই</string>\n  <string name=\"network_unavailable_warning\">আপনার ডিভাইস ইন্টারনেটের সাথে সংযুক্ত নয়। ডাউনলোড পরে ব্যর্থ হবে।</string>\n  <string name=\"network_metered_warning\">আপনি বর্তমানে একটি মিটারযুক্ত সংযোগে আছেন। আপনার পরিষেবা প্রদানকারীর থেকে ডেটা চার্জ প্রযোজ্য হতে পারে।</string>\n  <string name=\"apk_source_selector_item\">APK উৎস নির্বাচন করুন</string>\n  <string name=\"apk_source_auto\">স্বতস্ফূর্তভাবে</string>\n  <string name=\"apk_source_auto_installed\">স্বতস্ফূর্তভাবে · ইনস্টল করা APK ব্যবহার করে</string>\n  <string name=\"apk_source_auto_downloaded\">স্বতস্ফূর্তভাবে · ডাউনলোড করা APK ব্যবহার করে</string>\n  <string name=\"apk_source_auto_downloader\">স্বয়ংক্রিয় · উপলব্ধ ডাউনলোডার ব্যবহার করে</string>\n  <string name=\"apk_source_auto_storage\">স্বয়ংক্রিয় · স্টোরেজ থেকে নির্বাচন করুন</string>\n  <string name=\"apk_source_downloader\">%s ব্যবহার করা হচ্ছে</string>\n  <string name=\"apk_source_installed\">ইনস্টল করা APK ব্যবহার করা হচ্ছে</string>\n  <string name=\"apk_source_local\">একটি স্থানীয় APK ফাইল ব্যবহার করা হচ্ছে</string>\n  <string name=\"apk_source_downloaded\">ইতিমধ্যেই ডাউনলোড করা হয়েছে</string>\n  <string name=\"legacy_import_failed\">লেগ্যাসি সেটিংস আমদানি করা যায়নি</string>\n  <string name=\"auto_updates_dialog_title\">আপডেটগুলি কনফিগার করুন</string>\n  <string name=\"auto_updates_dialog_description\">আপনি কি চান ReVanced Manager নিম্নলিখিত উপাদানগুলির জন্য পর্যায়ক্রমে আপডেট চেক করুক?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced প্যাচগুলি</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: ডাউনলোডার</string>\n  <string name=\"auto_updates_dialog_note\">এই সেটিংসগুলি পরে পরিবর্তন করা যাবে।\n\n    ReVanced Manager %s এর সাথে কানেক্ট হবে যাতে প্রাথমিক সংস্করণগুলি ডাউনলোড করা যায় যদি আপনার ডিভাইস ইন্টারনেটের সাথে সংযুক্ত থাকে।</string>\n  <string name=\"announcements_filter_tag\">ট্যাগ দ্বারা ফিল্টার করুন</string>\n  <string name=\"announcements_show_archived\">আর্কাইভ করা দেখান</string>\n  <string name=\"general\">সাধারণ</string>\n  <string name=\"general_description\">ভাষা, থিম, গতিশীল রঙ</string>\n  <string name=\"updates\">আপডেটগুলি</string>\n  <string name=\"updates_description\">আপডেটগুলির জন্য চেক করুন এবং চেঞ্জলগ দেখুন</string>\n  <string name=\"downloads\">ডাউনলোডগুলি</string>\n  <string name=\"downloads_description\">ডাউনলোডার এবং ডাউনলোড করা অ্যাপস</string>\n  <string name=\"import_export\">আমদানি &amp; রপ্তানি</string>\n  <string name=\"import_export_description\">কিস্টোর, প্যাচ বিকল্প এবং নির্বাচন</string>\n  <string name=\"advanced\">উন্নত</string>\n  <string name=\"advanced_description\">API URL, মেমরি সীমা, ডিবাগিং</string>\n  <string name=\"safeguards_toggled_warning\">সুরক্ষা ব্যবস্থা টগল করা হয়েছে</string>\n  <string name=\"about\">সম্পর্কে</string>\n  <string name=\"about_app_name\">%1$s সম্পর্কে</string>\n  <string name=\"opensource_licenses\">ওপেন সোর্স লাইসেন্স</string>\n  <string name=\"opensource_licenses_description\">এই অ্যাপ্লিকেশনটি তৈরি করতে ব্যবহৃত সমস্ত লাইব্রেরি দেখুন</string>\n  <string name=\"contributors\">অবদানকারীগণ</string>\n  <string name=\"contributors_description\">ReVanced-এর অবদানকারীগণ দেখুন</string>\n  <string name=\"dynamic_color\">গতিশীল রঙ</string>\n  <string name=\"dynamic_color_description\">ওয়ালপেপারের সাথে রঙগুলি মানিয়ে নিন</string>\n  <string name=\"pure_black_theme\">বিশুদ্ধ কালো থিম</string>\n  <string name=\"pure_black_theme_description\">ডার্ক থিমের জন্য বিশুদ্ধ কালো ব্যাকগ্রাউন্ড ব্যবহার করুন</string>\n  <string name=\"theme\">থিম</string>\n  <string name=\"theme_description\">হালকা বা গাঢ় থিমের মধ্যে বেছে নিন</string>\n  <string name=\"language\">ভাষা</string>\n  <string name=\"language_description\">অ্যাপ প্রদর্শনের ভাষা নির্বাচন করুন</string>\n  <string name=\"language_system_default\">সিস্টেম ডিফল্ট</string>\n  <string name=\"search_languages\">ভাষা অনুসন্ধান করুন…</string>\n  <string name=\"safeguards\">নিরাপত্তা ব্যবস্থা</string>\n  <string name=\"patch_compat_check\">সংস্করণ সামঞ্জস্যতা পরীক্ষা নিষ্ক্রিয় করুন</string>\n  <string name=\"patch_compat_check_description\">প্যাচগুলিকে সামঞ্জস্যপূর্ণ অ্যাপ সংস্করণগুলিতে সীমাবদ্ধ করবেন না</string>\n  <string name=\"patch_compat_check_confirmation\">বেমানান প্যাচ নির্বাচন করলে অ্যাপটি ভাঙতে পারে।\n\nআপনি কি তবুও চালিয়ে যেতে চান?</string>\n  <string name=\"suggested_version_safeguard\">প্রস্তাবিত অ্যাপ সংস্করণ প্রয়োজন</string>\n  <string name=\"suggested_version_safeguard_description\">প্রস্তাবিত অ্যাপ সংস্করণ নির্বাচন প্রয়োগ করুন</string>\n  <string name=\"suggested_version_safeguard_confirmation\">প্রস্তাবিত সংস্করণ নয় এমন একটি অ্যাপ নির্বাচন করলে অপ্রত্যাশিত সমস্যা হতে পারে।\n\nআপনি কি তবুও চালিয়ে যেতে চান?</string>\n  <string name=\"patch_selection_safeguard\">প্যাচ নির্বাচন এবং বিকল্পগুলি পরিবর্তন করার অনুমতি দিন</string>\n  <string name=\"patch_selection_safeguard_description\">প্যাচ নির্বাচন বা বাতিল করা এবং বিকল্পগুলির কাস্টমাইজেশন প্রতিরোধ করবেন না</string>\n  <string name=\"patch_selection_safeguard_confirmation\">প্যাচগুলির নির্বাচন পরিবর্তন করলে অপ্রত্যাশিত সমস্যা হতে পারে।\n\nতবুও সক্ষম করবেন?</string>\n  <string name=\"universal_patches_safeguard\">ইউনিভার্সাল প্যাচ ব্যবহার করার অনুমতি দিন</string>\n  <string name=\"universal_patches_safeguard_description\">ইউনিভার্সাল প্যাচ ব্যবহার প্রতিরোধ করবেন না</string>\n  <string name=\"universal_patches_safeguard_confirmation\">ইউনিভার্সাল প্যাচগুলি নির্দিষ্ট অ্যাপগুলিকে লক্ষ্য করে তৈরি প্যাচগুলির মতো ভালোভাবে পরীক্ষিত নয়।\n\nতবুও সক্ষম করবেন?</string>\n  <string name=\"keystore\">কিস্টোর</string>\n  <string name=\"patches_selections\">প্যাচ নির্বাচন</string>\n  <string name=\"import_keystore\">কিস্টোর আমদানি করুন</string>\n  <string name=\"import_keystore_description\">একটি কাস্টম কিস্টোর আমদানি করুন</string>\n  <string name=\"import_keystore_dialog_title\">কিস্টোর শংসাপত্র লিখুন</string>\n  <string name=\"import_keystore_dialog_description\">এটি আমদানি করতে আপনাকে কিস্টোরের শংসাপত্রগুলি প্রবেশ করাতে হবে।</string>\n  <string name=\"import_keystore_dialog_alias_field\">ব্যবহারকারীর নাম (উপনাম)</string>\n  <string name=\"import_keystore_dialog_password_field\">পাসওয়ার্ড</string>\n  <string name=\"import_keystore_dialog_button\">আমদানি করুন</string>\n  <string name=\"import_keystore_wrong_credentials\">ভুল কিস্টোর শংসাপত্র</string>\n  <string name=\"import_keystore_success\">আমদানি করা কিস্টোর</string>\n  <string name=\"export_keystore\">কিস্টোর রপ্তানি করুন</string>\n  <string name=\"export_keystore_description\">বর্তমান কিস্টোর রপ্তানি করুন</string>\n  <string name=\"export_keystore_unavailable\">রপ্তানি করার জন্য কোনো কিস্টোর নেই</string>\n  <string name=\"export_keystore_success\">রপ্তানি করা কিস্টোর</string>\n  <string name=\"regenerate_keystore\">কিস্টোর পুনরায় তৈরি করুন</string>\n  <string name=\"regenerate_keystore_description\">একটি নতুন কিস্টোর তৈরি করুন</string>\n  <string name=\"regenerate_keystore_dialog_description\">আপনি আপনার কিস্টোরটি পুনরায় তৈরি করতে চলেছেন যা ম্যানেজার প্যাচিং প্রক্রিয়ার সময় ব্যবহার করবে।\n\nআপনি এই উৎস থেকে পূর্বে ইনস্টল করা অ্যাপগুলি আপডেট করতে পারবেন না।</string>\n  <string name=\"regenerate_keystore_success\">কিস্টোর সফলভাবে প্রতিস্থাপন করা হয়েছে</string>\n  <string name=\"import_patch_selection\">প্যাচ নির্বাচন আমদানি করুন</string>\n  <string name=\"import_patch_selection_description\">একটি JSON ফাইল থেকে প্যাচ নির্বাচন আমদানি করুন</string>\n  <string name=\"import_patch_selection_fail\">প্যাচ নির্বাচন আমদানি করা যায়নি: %s</string>\n  <string name=\"import_patch_selection_success\">আমদানি করা প্যাচ নির্বাচন</string>\n  <string name=\"select_bundle_for_import\">আমদানি করার জন্য বান্ডিল নির্বাচন করুন</string>\n  <string name=\"export_patch_selection\">প্যাচ নির্বাচন রপ্তানি করুন</string>\n  <string name=\"export_patch_selection_description\">একটি JSON ফাইলে প্যাচ নির্বাচন রপ্তানি করুন</string>\n  <string name=\"export_patch_selection_fail\">প্যাচ নির্বাচন রপ্তানি করা যায়নি: %s</string>\n  <string name=\"export_patch_selection_success\">রপ্তানি করা প্যাচ নির্বাচন</string>\n  <string name=\"select_bundle_for_export\">রপ্তানি করার জন্য বান্ডিল নির্বাচন করুন</string>\n  <string name=\"patch_selection_packages\">সংরক্ষিত নির্বাচন সহ অ্যাপগুলি</string>\n  <string name=\"patch_selection_entries\">মোট নির্বাচিত প্যাচ</string>\n  <string name=\"reset_configuration\">কনফিগারেশন রিসেট করুন</string>\n  <string name=\"reset_patch_selection\">প্যাচ নির্বাচনগুলি</string>\n  <string name=\"reset_patch_selection_description\">সংরক্ষিত প্যাচ নির্বাচন রিসেট করুন</string>\n  <string name=\"reset_patch_options\">প্যাচ অপশনগুলি</string>\n  <string name=\"reset_patch_options_description\">সংরক্ষিত প্যাচ বিকল্প রিসেট করুন</string>\n  <string name=\"reset_patch_selection_success\">প্যাচ নির্বাচন রিসেট করা হয়েছে</string>\n  <string name=\"patch_selection_reset_all\">বৈশ্বিকভাবে প্যাচ নির্বাচন রিসেট করুন</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">আপনি সমস্ত প্যাচ নির্বাচন রিসেট করতে চলেছেন। আপনাকে প্রতিটি প্যাচ ম্যানুয়ালি আবার নির্বাচন করতে হবে।</string>\n  <string name=\"patch_selection_reset_all_description\">সমস্ত প্যাচ নির্বাচন রিসেট করে</string>\n  <string name=\"patch_selection_reset_package\">অ্যাপের জন্য প্যাচ নির্বাচন রিসেট করুন</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">আপনি \\\"%s\\\" অ্যাপের জন্য প্যাচ নির্বাচন রিসেট করতে চলেছেন। আপনাকে প্রতিটি প্যাচ ম্যানুয়ালি আবার নির্বাচন করতে হবে।</string>\n  <string name=\"patch_selection_reset_package_description\">একটি একক অ্যাপের জন্য প্যাচ নির্বাচন পুনরায় সেট করে</string>\n  <string name=\"patch_selection_reset_patches\">প্যাচ নির্বাচন পুনরায় সেট করুন (একক)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">আপনি \\\"%s\\\" এর জন্য প্যাচ নির্বাচন পুনরায় সেট করতে চলেছেন। আপনাকে প্রতিটি প্যাচ আবার ম্যানুয়ালি নির্বাচন করতে হবে।</string>\n  <string name=\"patch_selection_reset_patches_description\">প্যাচের একটি নির্দিষ্ট সংগ্রহের জন্য প্যাচ নির্বাচন পুনরায় সেট করে</string>\n  <string name=\"patch_options_reset_package\">অ্যাপের জন্য প্যাচ বিকল্পগুলি পুনরায় সেট করুন</string>\n  <string name=\"patch_options_reset_package_dialog_description\">আপনি \\\"%s\\\" অ্যাপের জন্য প্যাচ বিকল্পগুলি পুনরায় সেট করতে চলেছেন। আপনাকে প্রতিটি বিকল্প আবার প্রয়োগ করতে হবে।</string>\n  <string name=\"patch_options_reset_package_description\">একটি একক অ্যাপের জন্য প্যাচ বিকল্পগুলি পুনরায় সেট করে</string>\n  <string name=\"patch_options_reset_patches\">প্যাচ বিকল্পগুলি পুনরায় সেট করুন (একক)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">আপনি \\\"%s\\\" এর জন্য প্যাচ বিকল্পগুলি পুনরায় সেট করতে চলেছেন। আপনাকে প্রতিটি বিকল্প আবার প্রয়োগ করতে হবে।</string>\n  <string name=\"patch_options_reset_patches_description\">প্যাচের একটি নির্দিষ্ট সংগ্রহের জন্য প্যাচ বিকল্পগুলি পুনরায় সেট করে</string>\n  <string name=\"patch_options_reset_all\">বিশ্বব্যাপী প্যাচ বিকল্পগুলি পুনরায় সেট করুন</string>\n  <string name=\"patch_options_reset_all_dialog_description\">আপনি সমস্ত প্যাচ বিকল্পগুলি পুনরায় সেট করতে চলেছেন। আপনাকে প্রতিটি বিকল্প আবার প্রয়োগ করতে হবে।</string>\n  <string name=\"patch_options_reset_all_description\">সমস্ত প্যাচ বিকল্প পুনরায় সেট করে</string>\n  <string name=\"downloaders\">ডাউনলোডার</string>\n  <string name=\"downloader_prereleases\">প্রি-রিলিজ ব্যবহার করুন</string>\n  <string name=\"downloader_prereleases_description\">মূল ডাউনলোডারের প্রি-রিলিজ সংস্করণ ব্যবহার করুন</string>\n  <string name=\"downloader_state_loaded\">লোড হয়েছে</string>\n  <string name=\"downloader_state_failed\">লোড করতে ব্যর্থ হয়েছে। আরও বিস্তারিত জানতে ক্লিক করুন</string>\n  <string name=\"downloader_state_missing\">নেই</string>\n  <string name=\"downloader_delete_apps_title\">নির্বাচিত অ্যাপস মুছুন</string>\n  <string name=\"downloader_delete_apps_description\">আপনি কি নিশ্চিত যে আপনি নির্বাচিত অ্যাপসগুলি মুছতে চান?</string>\n  <string name=\"downloader_delete_single_description\">আপনি কি \\\"%s\\\" মুছে ফেলতে চান?</string>\n  <string name=\"downloader_settings_no_apps\">কোনো ডাউনলোড করা অ্যাপ পাওয়া যায়নি।</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager এর মাধ্যমে ডাউনলোড করা অ্যাপগুলি এখানে প্রদর্শিত হবে।</string>\n  <string name=\"downloader_url\">ডাউনলোডার ইউআরএল</string>\n  <string name=\"downloader_add\">ডাউনলোডার যোগ করুন</string>\n  <string name=\"select_downloader_type_dialog_description\">ইউআরএল বা স্থানীয় ফাইল থেকে নতুন ডাউনলোডার যোগ করুন</string>\n  <string name=\"local_downloaders_description\">স্থানীয় স্টোরেজ থেকে ডাউনলোডার যোগ করুন।</string>\n  <string name=\"remote_downloaders_description\">ইউআরএল থেকে ডাউনলোডার যোগ করুন। স্বয়ংক্রিয়ভাবে আপডেট করা যেতে পারে।</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager এর মধ্যে সরাসরি অ্যাপ পেতে ডাউনলোডার ইনস্টল করুন।</string>\n  <string name=\"install_revanced_downloader\">ReVanced ডাউনলোডার ইনস্টল করুন</string>\n  <string name=\"cancel_downloader_install_title\">ডাউনলোডার ইনস্টল বাতিল করবেন?</string>\n  <string name=\"cancel_downloader_install_description\">একটি ডাউনলোডার ইনস্টল প্রক্রিয়া চলছে। আপনি যদি এখন চলে যান, তাহলে ডাউনলোড বাতিল হয়ে যাবে।</string>\n  <string name=\"downloader_sources_unavailable_title\">এই ডাউনলোডারগুলো নেই</string>\n  <string name=\"downloader_sources_unavailable_description\">এটি ঠিক করতে আপডেট বাটনে ক্লিক করুন।</string>\n  <string name=\"downloader_update_failed\">ডাউনলোডার আপডেট করা যায়নি: %s</string>\n  <string name=\"downloader_replace_fail\">ডাউনলোডার ইম্পোর্ট করা যায়নি: %s</string>\n  <string name=\"search_apps\">অ্যাপ অনুসন্ধান করুন…</string>\n  <string name=\"loading_body\">লোড হচ্ছে…</string>\n  <string name=\"downloading_patches\">প্যাচ ডাউনলোড হচ্ছে…</string>\n  <string name=\"options\">বিকল্প</string>\n  <string name=\"ok\">ঠিক আছে</string>\n  <string name=\"yes\">হ্যাঁ</string>\n  <string name=\"no\">না</string>\n  <string name=\"edit\">সম্পাদনা করুন</string>\n  <string name=\"dialog_input_placeholder\">মান</string>\n  <string name=\"reset\">পুনরায় সেট করুন</string>\n  <string name=\"share\">শেয়ার করুন</string>\n  <string name=\"patch\">প্যাচ</string>\n  <string name=\"select_from_storage\">স্টোরেজ থেকে নির্বাচন করুন</string>\n  <string name=\"select_from_storage_description\">ফাইল পিকার ব্যবহার করে স্টোরেজ থেকে একটি APK ফাইল নির্বাচন করুন</string>\n  <string name=\"suggested_version_info\">প্রস্তাবিত সংস্করণ: %s</string>\n  <string name=\"type_anything\">চালিয়ে যেতে যেকোনো কিছু টাইপ করুন</string>\n  <string name=\"search\">প্যাচ অনুসন্ধান করুন…</string>\n  <string name=\"apply\">প্রয়োগ করুন</string>\n  <string name=\"help\">সাহায্য</string>\n  <string name=\"back\">ফিরে যান</string>\n  <string name=\"warning\">সতর্কতা</string>\n  <string name=\"add\">যোগ করুন</string>\n  <string name=\"enable\">সক্ষম করুন</string>\n  <string name=\"disable\">নিষ্ক্রিয় করুন</string>\n  <string name=\"close\">বন্ধ করুন</string>\n  <string name=\"clear\">পরিষ্কার করুন</string>\n  <string name=\"system\">সিস্টেম</string>\n  <string name=\"light\">হালকা</string>\n  <string name=\"dark\">অন্ধকার</string>\n  <string name=\"appearance\">উপস্থিতি</string>\n  <string name=\"networking\">নেটওয়ার্কিং</string>\n  <string name=\"allow_metered_networks\">মিটারড নেটওয়ার্কের অনুমতি দিন</string>\n  <string name=\"allow_metered_networks_description\">মিটারড নেটওয়ার্কে স্বয়ংক্রিয় আপডেটের অনুমতি দেয়।\\n    ম্যানুয়াল অপারেশনের জন্য অ্যাপ্লিকেশনটি এখনও মিটারড নেটওয়ার্ক সম্পর্কে সতর্ক করতে পারে।</string>\n  <string name=\"downloaded_apps\">ডাউনলোড করা অ্যাপস</string>\n  <string name=\"process_runtime\">অন্য প্রক্রিয়ায় প্যাচার চালান (পরীক্ষামূলক)</string>\n  <string name=\"process_runtime_description\">এটি দ্রুত এবং প্যাচারকে আরও মেমরি ব্যবহার করার অনুমতি দেয়</string>\n  <string name=\"process_runtime_memory_limit\">প্যাচার প্রক্রিয়ার মেমরি সীমা</string>\n  <string name=\"process_runtime_memory_limit_description\">প্যাচার প্রক্রিয়া যে সর্বোচ্চ পরিমাণ মেমরি ব্যবহার করতে পারে</string>\n  <string name=\"debug_logs_export\">ডিবাগ লগ এক্সপোর্ট করুন</string>\n  <string name=\"debug_logs_export_read_failed\">লগ পড়তে ব্যর্থ হয়েছে (প্রস্থান কোড %d)</string>\n  <string name=\"debug_logs_export_failed\">লগ এক্সপোর্ট করতে ব্যর্থ হয়েছে</string>\n  <string name=\"debug_logs_export_success\">এক্সপোর্ট করা লগ</string>\n  <string name=\"api_url\">API URL</string>\n  <string name=\"api_url_description\">প্রয়োজনীয় ফাইল ডাউনলোড করতে ব্যবহৃত API</string>\n  <string name=\"api_url_dialog_title\">API URL পরিবর্তন করুন</string>\n  <string name=\"api_url_dialog_description\">ReVanced Manager এর API URL পরিবর্তন করুন। ReVanced Manager প্যাচ এবং আপডেট ডাউনলোড করতে API ব্যবহার করে।</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager প্যাচ এবং আপডেট ডাউনলোড করতে API এর সাথে সংযোগ করে। নিশ্চিত করুন যে আপনি এটিকে বিশ্বাস করেন।</string>\n  <string name=\"api_url_dialog_save\">সেট করুন</string>\n  <string name=\"api_url_dialog_reset\">API URL পুনরায় সেট করুন</string>\n  <string name=\"device\">ডিভাইস</string>\n  <string name=\"device_android_version\">অ্যান্ড্রয়েড সংস্করণ</string>\n  <string name=\"device_model\">মডেল</string>\n  <string name=\"device_architectures\">CPU আর্কিটেকচার</string>\n  <string name=\"device_memory_limit\">মেমরি সীমা</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (সাধারণ) - %2$dMB (বড়)</string>\n  <string name=\"patches_force_download\">সমস্ত প্যাচ ডাউনলোড করতে বাধ্য করুন</string>\n  <string name=\"patches_reset\">প্যাচ পুনরায় সেট করুন</string>\n  <string name=\"reset_onboarding\">অনবোর্ডিং রিসেট করুন</string>\n  <string name=\"reset_onboarding_description\">পরবর্তী অ্যাপ চালু করার সময় অনবোর্ডিং স্ক্রিন দেখান</string>\n  <string name=\"patching\">প্যাচ করা হচ্ছে</string>\n  <string name=\"signing\">স্বাক্ষর করা হচ্ছে</string>\n  <string name=\"storage\">স্টোরেজ</string>\n  <string name=\"no_patch_found\">কোনো প্যাচ খুঁজে পাওয়া যায়নি। আপনার প্যাচগুলি পরীক্ষা করুন</string>\n  <string name=\"tab_apps\">অ্যাপস</string>\n  <string name=\"tab_patches\">প্যাচ</string>\n  <string name=\"delete\">মুছুন</string>\n  <string name=\"refresh\">রিফ্রেশ করুন</string>\n  <string name=\"continue_anyways\">যাইহোক চালিয়ে যান</string>\n  <string name=\"download_another_version\">অন্য সংস্করণ ডাউনলোড করুন</string>\n  <string name=\"download_app\">অ্যাপ ডাউনলোড করুন</string>\n  <string name=\"download_apk\">APK ফাইল ডাউনলোড করুন</string>\n  <string name=\"patches_download_fail\">প্যাচ ডাউনলোড করতে ব্যর্থ হয়েছে: %s</string>\n  <string name=\"api_not_working_title\">এপিআই পরিষেবা বর্তমানে অনুপলব্ধ</string>\n  <string name=\"api_not_working_description\">কিছু বৈশিষ্ট্য প্রভাবিত হতে পারে। আপনার সংযোগ বা সেটিংস-এ এপিআই ইউআরএল পরীক্ষা করুন।</string>\n  <string name=\"patches_replace_fail\">প্যাচ আমদানি করতে ব্যর্থ হয়েছে: %s</string>\n  <string name=\"no_patched_apps_found\">কোনো প্যাচ করা অ্যাপ পাওয়া যায়নি</string>\n  <string name=\"no_patched_apps_description\">আপনার কাছে বর্তমানে আমাদের জানা কোনো প্যাচ করা অ্যাপ নেই। আপনার প্রথম অ্যাপ প্যাচ করে এটি পরিবর্তন করুন!</string>\n  <string name=\"patched_apps_section_title\">প্যাচ করা অ্যাপস</string>\n  <string name=\"patchable_apps_section_title\">যে অ্যাপসগুলো প্যাচ করা যেতে পারে</string>\n  <string name=\"no_patches_found\">কোনো প্যাচ পাওয়া যায়নি</string>\n  <string name=\"no_patches_description\">আপনার কাছে এখনো কোনো প্যাচ নেই। নিচের বোতামে ট্যাপ করে প্যাচ যোগ করুন!</string>\n  <string name=\"tap_on_patches\">প্যাচ সম্পর্কে আরও তথ্য পেতে সেগুলিতে ট্যাপ করুন</string>\n  <string name=\"patches_selected\">%s নির্বাচিত</string>\n  <string name=\"incompatible_patches\">বেমানান প্যাচ</string>\n  <string name=\"universal_patches\">ইউনিভার্সাল প্যাচ</string>\n  <string name=\"patch_selection_reset_toast\">প্যাচ নির্বাচন এবং বিকল্পগুলি প্রস্তাবিত ডিফল্টে পুনরায় সেট করা হয়েছে</string>\n  <string name=\"patch_options_reset_toast\">প্যাচ বিকল্পগুলি পুনরায় সেট করা হয়েছে</string>\n  <string name=\"non_suggested_version_warning_title\">অ-প্রস্তাবিত সংস্করণ</string>\n  <string name=\"non_suggested_version_warning_description\">আপনার নির্বাচিত অ্যাপের সংস্করণ প্রস্তাবিত সংস্করণের সাথে মেলে না।\\nঅনুগ্রহ করে প্রস্তাবিত সংস্করণ ব্যবহার করুন: %s\\n\\nযাইহোক চালিয়ে যেতে, উন্নত সেটিংসে \\\"প্রস্তাবিত অ্যাপ সংস্করণ প্রয়োজন\\\" অক্ষম করুন।</string>\n  <string name=\"selection_warning_title\">ডিফল্ট ব্যবহার বন্ধ করবেন?</string>\n  <string name=\"selection_warning_description\">ডিফল্ট প্যাচ নির্বাচন এবং বিকল্পগুলি ব্যবহার করার পরামর্শ দেওয়া হয়। সেগুলি পরিবর্তন করলে অপ্রত্যাশিত সমস্যা হতে পারে।\\n\\nপ্যাচ টগল করার আগে আপনাকে উন্নত সেটিংসে \\\"প্যাচ নির্বাচন এবং বিকল্পগুলি পরিবর্তন করার অনুমতি দিন\\\" চালু করতে হবে।</string>\n  <string name=\"universal_patch_warning_description\">ইউনিভার্সাল প্যাচগুলির আরও সাধারণ ব্যবহার রয়েছে এবং নির্দিষ্ট অ্যাপগুলিকে লক্ষ্য করে এমন প্যাচগুলির মতো নির্ভরযোগ্যভাবে কাজ করে না। সেগুলি ব্যবহার করার সময় আপনি সমস্যার সম্মুখীন হতে পারেন।\\n\\nইউনিভার্সাল প্যাচ ব্যবহার করার আগে আপনাকে উন্নত সেটিংসে \\\"ইউনিভার্সাল প্যাচ ব্যবহার করার অনুমতি দিন\\\" চালু করতে হবে।</string>\n  <string name=\"this_version\">এই সংস্করণ</string>\n  <string name=\"universal\">যেকোনো অ্যাপ</string>\n  <string name=\"search_patches\">প্যাচ অনুসন্ধান করুন</string>\n  <string name=\"app_version_not_compatible\">এই প্যাচটি নির্বাচিত অ্যাপ সংস্করণ (%1$s) এর সাথে সামঞ্জস্যপূর্ণ নয়।\\n\\nএটি শুধুমাত্র নিম্নলিখিত সংস্করণ(গুলি) এর সাথে সামঞ্জস্যপূর্ণ: %2$s</string>\n  <string name=\"continue_with_version\">এই সংস্করণ দিয়ে চালিয়ে যাবেন?</string>\n  <string name=\"version_not_compatible\">এই সংস্করণের (%s) সাথে সমস্ত প্যাচ সামঞ্জস্যপূর্ণ নয়। আপনি কি যাইহোক চালিয়ে যেতে চান?</string>\n  <string name=\"download_application\">অ্যাপ্লিকেশন ডাউনলোড করবেন?</string>\n  <string name=\"app_not_installed\">আপনি যে অ্যাপটি নির্বাচন করেছেন তা ইনস্টল করা নেই। আপনি কি এটি ডাউনলোড করতে চান?</string>\n  <string name=\"failed_to_load_apk\">APK লোড করতে ব্যর্থ হয়েছে</string>\n  <string name=\"split_apk_not_supported\">বিভক্ত APK প্যাচ করা যাবে না</string>\n  <string name=\"loading\">লোড হচ্ছে…</string>\n  <string name=\"not_installed\">ইনস্টল করা নেই</string>\n  <string name=\"installed\">ইনস্টল করা হয়েছে</string>\n  <string name=\"app_info\">অ্যাপের তথ্য</string>\n  <string name=\"uninstall\">আনইনস্টল করুন</string>\n  <string name=\"unpatch\">আনপ্যাচ করুন</string>\n  <string name=\"repatch\">রিপ্যাচ করুন</string>\n  <string name=\"install_type\">ইনস্টলেশনের প্রকার</string>\n  <string name=\"package_name\">প্যাকেজের নাম</string>\n  <string name=\"original_package_name\">আসল প্যাকেজের নাম</string>\n  <string name=\"applied_patches\">প্রয়োগকৃত প্যাচসমূহ</string>\n  <string name=\"view_applied_patches\">প্রয়োগকৃত প্যাচসমূহ দেখুন</string>\n  <string name=\"default_install\">ডিফল্ট</string>\n  <string name=\"mount_install\">মাউন্ট করুন</string>\n  <string name=\"mounted\">মাউন্ট করা হয়েছে</string>\n  <string name=\"not_mounted\">মাউন্ট করা হয়নি</string>\n  <string name=\"mount\">মাউন্ট</string>\n  <string name=\"unmount\">আনমাউন্ট করুন</string>\n  <string name=\"failed_to_mount\">মাউন্ট করতে ব্যর্থ: %s</string>\n  <string name=\"failed_to_unmount\">আনমাউন্ট করতে ব্যর্থ: %s</string>\n  <string name=\"unpatch_app\">অ্যাপ আনপ্যাচ করবেন?</string>\n  <string name=\"unpatch_description\">আপনি কি নিশ্চিত যে আপনি এই অ্যাপটি আনপ্যাচ করতে চান?</string>\n  <string name=\"downloader_invalid_version\">ডাউনলোডার সঠিক সংস্করণ আনতে পারেনি</string>\n  <string name=\"downloader_app_not_found\">ডাউনলোডার অ্যাপটি খুঁজে পায়নি</string>\n  <string name=\"downloader_error\">ডাউনলোডার ত্রুটি: %s</string>\n  <string name=\"no_downloaders_installed\">কোনো অ্যাপ ডাউনলোডার ইনস্টল করা হয়নি!</string>\n  <string name=\"no_downloaders_trusted\">কোনো অ্যাপ ডাউনলোডার বিশ্বস্ত করা হয়নি! আপনার সেটিংস পরীক্ষা করুন।</string>\n  <string name=\"already_patched\">ইতিমধ্যেই প্যাচ করা হয়েছে</string>\n  <string name=\"patch_selector_sheet_filter_title\">ফিল্টার</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">সামঞ্জস্য</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">প্যাকেজসমূহ</string>\n  <string name=\"patch_selector_sheet_actions_title\">অ্যাকশন</string>\n  <string name=\"restore_default_selection\">ডিফল্ট নির্বাচন পুনরুদ্ধার করুন</string>\n  <string name=\"deselect_all\">সবগুলো অনির্বাচন করুন</string>\n  <string name=\"invert_selection\">নির্বাচন উল্টান</string>\n  <string name=\"deselect_all_except\">%s ব্যতীত সবগুলি নির্বাচনমুক্ত করুন</string>\n  <string name=\"scope_dialog_title\">প্রয়োগ করুন</string>\n  <string name=\"scope_all_patches\">সমস্ত প্যাচ</string>\n  <string name=\"scope_bundle_patches\">শুধুমাত্র %s</string>\n  <string name=\"string_option_menu_description\">আরও বিকল্প</string>\n  <string name=\"option_preset_custom_value\">কাস্টম মান</string>\n  <string name=\"path_selector\">স্টোরেজ থেকে নির্বাচন করুন</string>\n  <string name=\"path_selector_parent_dir\">পূর্ববর্তী ডিরেক্টরি</string>\n  <string name=\"path_selector_dirs\">ডিরেক্টরিগুলো</string>\n  <string name=\"path_selector_files\">ফাইলগুলো</string>\n  <string name=\"show_password_field\">পাসওয়ার্ড দেখান</string>\n  <string name=\"hide_password_field\">পাসওয়ার্ড লুকান</string>\n  <string name=\"installer\">ইনস্টলার</string>\n  <string name=\"install_app\">ইনস্টল করুন</string>\n  <string name=\"install_app_success\">অ্যাপ ইনস্টল করা হয়েছে</string>\n  <string name=\"install_app_fail\">অ্যাপ ইনস্টল করতে ব্যর্থ: %s</string>\n  <string name=\"reinstall_app_fail\">অ্যাপ পুনরায় ইনস্টল করতে ব্যর্থ: %s</string>\n  <string name=\"uninstall_app_fail\">অ্যাপ আনইনস্টল করতে ব্যর্থ: %s</string>\n  <string name=\"open_app\">খুলুন</string>\n  <string name=\"save_apk\">APK সংরক্ষণ করুন</string>\n  <string name=\"save_apk_success\">APK সংরক্ষিত হয়েছে</string>\n  <string name=\"sign_fail\">APK স্বাক্ষর করতে ব্যর্থ: %s</string>\n  <string name=\"save_logs\">লগ সংরক্ষণ করুন</string>\n  <string name=\"save_as_file\">ফাইলে সংরক্ষণ করুন</string>\n  <string name=\"export_patcher_logs\">প্যাচার লগ রপ্তানি করুন</string>\n  <string name=\"save_logs_success\">লগ সংরক্ষণ করা হয়েছে</string>\n  <string name=\"downloader_activity_dialog_body\">এই ডাউনলোডার দিয়ে এগিয়ে যাওয়ার জন্য ব্যবহারকারীর মিথস্ক্রিয়া প্রয়োজন।</string>\n  <string name=\"select_install_type\">ইনস্টলেশনের প্রকার নির্বাচন করুন</string>\n  <string name=\"patcher_step_group_preparing\">প্রস্তুতি চলছে</string>\n  <string name=\"patcher_step_load_patches\">প্যাচ লোড করুন</string>\n  <string name=\"patcher_step_unpack\">প্যাচার প্রস্তুত করুন</string>\n  <string name=\"patcher_step_group_patching\">প্যাচিং চলছে</string>\n  <string name=\"patcher_step_group_saving\">সংরক্ষণ করা হচ্ছে</string>\n  <string name=\"patcher_step_write_patched\">প্যাচ করা APK ফাইল লিখুন</string>\n  <string name=\"patcher_step_sign_apk\">প্যাচ করা APK ফাইল স্বাক্ষর করুন</string>\n  <string name=\"patcher_notification_title\">প্যাচিং প্রক্রিয়া চলছে…</string>\n  <string name=\"patcher_notification_text\">প্যাচারে ফিরে যেতে ট্যাপ করুন</string>\n  <string name=\"patcher_stop_confirm_title\">প্যাচার বন্ধ করুন</string>\n  <string name=\"patcher_stop_confirm_description\">আপনি কি নিশ্চিত যে আপনি প্যাচিং প্রক্রিয়া বন্ধ করতে চান?</string>\n  <string name=\"patcher_install_in_progress\">ইনস্টলেশন চলছে। অনুগ্রহ করে অপেক্ষা করুন</string>\n  <string name=\"execute_patches\">প্যাচসমূহ কার্যকর করুন</string>\n  <string name=\"executing_patch\">%s কার্যকর করা হচ্ছে</string>\n  <string name=\"failed_to_execute_patch\">%s কার্যকর করতে ব্যর্থ হয়েছে</string>\n  <string name=\"step_completed\">সম্পন্ন হয়েছে</string>\n  <string name=\"step_failed\">ব্যর্থ হয়েছে</string>\n  <string name=\"step_running\">চলছে</string>\n  <string name=\"step_waiting\">অপেক্ষা করছে</string>\n  <string name=\"expand_content\">বিস্তৃত করুন</string>\n  <string name=\"collapse_content\">সংকুচিত করুন</string>\n  <string name=\"drag_handle\">পুনরায় সাজান</string>\n  <string name=\"more\">আরও</string>\n  <string name=\"less\">কম</string>\n  <string name=\"continue_\">চালিয়ে যান</string>\n  <string name=\"dismiss\">বাতিল করুন</string>\n  <string name=\"view_announcement\">ঘোষণা দেখুন</string>\n  <string name=\"permanent_dismiss\">এটি আর দেখাবেন না</string>\n  <string name=\"donate\">অনুদান দিন</string>\n  <string name=\"website\">ওয়েবসাইট</string>\n  <string name=\"github\">গিটহাব</string>\n  <string name=\"contact\">যোগাযোগ</string>\n  <string name=\"license\">লাইসেন্স</string>\n  <string name=\"source\">উৎস</string>\n  <string name=\"repository\">রিপোজিটরি</string>\n  <string name=\"bundle_information_by_author\">%1$s দ্বারা</string>\n  <string name=\"version\">সংস্করণ</string>\n  <string name=\"version_compatibility_warning\">নির্বাচিত সংস্করণ নির্বাচিত প্যাচগুলির সাথে সামঞ্জস্যপূর্ণ নাও হতে পারে।</string>\n  <string name=\"submit_feedback\">সমস্যা বা প্রতিক্রিয়া জমা দিন</string>\n  <string name=\"submit_feedback_description\">আমাদের এই অ্যাপ্লিকেশনটি উন্নত করতে সাহায্য করুন</string>\n  <string name=\"developer_options\">ডেভেলপার বিকল্পসমূহ</string>\n  <string name=\"developer_options_description\">সমস্যা ডিবাগ করার জন্য বিকল্প</string>\n  <string name=\"patches_update_success\">আপডেট সফল হয়েছে</string>\n  <string name=\"patches_update_unavailable\">কোনো আপডেট উপলব্ধ নেই</string>\n  <string name=\"view_patches\">প্যাচসমূহ দেখুন</string>\n  <string name=\"patches_view_any_version\">যেকোনো সংস্করণ</string>\n  <string name=\"patches_view_any_package\">যেকোনো প্যাকেজ</string>\n  <string name=\"patches_delete_single_dialog_description\">আপনি কি নিশ্চিত যে আপনি \\\"%s\\\" মুছে ফেলতে চান?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">আপনি কি নিশ্চিত যে আপনি নির্বাচিত প্যাচগুলি মুছে ফেলতে চান?</string>\n  <string name=\"announcements\">ঘোষণাসমূহ</string>\n  <string name=\"archive\">আর্কাইভ</string>\n  <string name=\"about_revanced_manager\">ReVanced Manager সম্পর্কে</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager হল একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন যা অ্যান্ড্রয়েড অ্যাপগুলিকে প্যাচ করতে ReVanced Patcher ব্যবহার করে। এটি আপনাকে কাস্টম প্যাচ সহ অ্যাপ ডাউনলোড এবং প্যাচ করতে এবং প্যাচিং প্রক্রিয়া পরিচালনা করতে দেয়।</string>\n  <string name=\"developer_options_taps\">%d ট্যাপ বাকি</string>\n  <string name=\"developer_options_enabled\">ডেভেলপার বিকল্পসমূহ সক্রিয় করা হয়েছে</string>\n  <string name=\"developer_options_already_enabled\">ডেভেলপার বিকল্পসমূহ ইতিমধ্যেই সক্রিয় করা হয়েছে</string>\n  <string name=\"update_available\">একটি আপডেট উপলব্ধ আছে</string>\n  <string name=\"current_version\">বর্তমান সংস্করণ: %s</string>\n  <string name=\"new_version\">নতুন সংস্করণ: %s</string>\n  <string name=\"ready_to_install_update\">আপডেট ইনস্টল করার জন্য প্রস্তুত</string>\n  <string name=\"update_completed\">আপডেট ইনস্টল করা হয়েছে</string>\n  <string name=\"install_update_manager_failed\">আপডেট ইনস্টল করতে ব্যর্থ</string>\n  <string name=\"manual_update_check\">আপডেটগুলির জন্য পরীক্ষা করুন</string>\n  <string name=\"view_update\">আপডেট দেখুন</string>\n  <string name=\"manual_update_check_description\">ম্যানুয়ালি আপডেটগুলির জন্য পরীক্ষা করুন</string>\n  <string name=\"update_checking_manager\">চালু করার সময় আপডেটগুলির জন্য পরীক্ষা করুন</string>\n  <string name=\"update_checking_manager_description\">অ্যাপ্লিকেশন চালু হওয়ার সময় ReVanced Manager-এর নতুন সংস্করণগুলির জন্য পরীক্ষা করুন</string>\n  <string name=\"update_checking_downloader\">চালু করার সময় ReVanced ডাউনলোডারের আপডেটের জন্য চেক করুন</string>\n  <string name=\"update_checking_downloader_description\">অ্যাপ্লিকেশন শুরু হওয়ার সময় ইনস্টল করা ReVanced ডাউনলোডারের আপডেটগুলির জন্য চেক করুন</string>\n  <string name=\"manager_prereleases\">প্রি-রিলিজ ব্যবহার করুন</string>\n  <string name=\"manager_prereleases_description\">ReVanced Manager-এর প্রি-রিলিজ সংস্করণগুলি ব্যবহার করুন</string>\n  <string name=\"prereleases_warning\">প্রি-রিলিজ সংস্করণগুলি অস্থির হতে পারে এবং বাগ থাকতে পারে। আপনি ক্র্যাশ, ডেটা হারানো বা অন্যান্য অপ্রত্যাশিত সমস্যার সম্মুখীন হতে পারেন। যদি আপনি এই ঝুঁকিগুলির সাথে স্বাচ্ছন্দ্য বোধ করেন তবেই এটি সক্ষম করুন।</string>\n  <string name=\"changelog\">চেঞ্জলগ দেখুন</string>\n  <string name=\"changelog_loading\">চেঞ্জলগ লোড হচ্ছে</string>\n  <string name=\"changelog_download_fail\">চেঞ্জলগ ডাউনলোড করতে ব্যর্থ: %s</string>\n  <string name=\"changelog_description\">এই আপডেটের সর্বশেষ পরিবর্তনগুলি দেখুন</string>\n  <string name=\"battery_optimization_notification\">ReVanced Manager সঠিকভাবে ব্যাকগ্রাউন্ডে কাজ করার জন্য ব্যাটারি অপটিমাইজেশন বন্ধ করতে হবে। অপটিমাইজেশন বন্ধ করতে এখানে ক্লিক করুন।</string>\n  <string name=\"installing_manager_update\">আপডেট ইনস্টল করা হচ্ছে…</string>\n  <string name=\"downloading_manager_update\">আপডেট ডাউনলোড করা হচ্ছে…</string>\n  <string name=\"download_manager_failed\">আপডেট ডাউনলোড করতে ব্যর্থ: %s</string>\n  <string name=\"cancel\">বাতিল করুন</string>\n  <string name=\"save\">সংরক্ষণ করুন</string>\n  <string name=\"save_with_count\">সংরক্ষণ করুন (%1$s)</string>\n  <string name=\"update\">আপডেট করুন</string>\n  <string name=\"empty\">খালি</string>\n  <string name=\"installing_message\">প্রম্পট করা হলে <b>আপডেট</b>-এ ট্যাপ করুন।\nআপডেট করার সময় ReVanced Manager বন্ধ হয়ে যাবে।</string>\n  <string name=\"no_changelogs_found\">কোনো চেঞ্জলগ পাওয়া যায়নি</string>\n  <string name=\"just_now\">এইমাত্র</string>\n  <string name=\"minutes_ago\">%sমি আগে</string>\n  <string name=\"hours_ago\">%sঘ আগে</string>\n  <string name=\"days_ago\">%sদি আগে</string>\n  <string name=\"invalid_date\">অবৈধ তারিখ</string>\n  <string name=\"disable_battery_optimization\">ব্যাটারি অপটিমাইজেশন নিষ্ক্রিয় করুন</string>\n  <string name=\"input_dialog_value_invalid\">অবৈধ মান</string>\n  <string name=\"option_required\">এই বিকল্পটি প্রয়োজনীয়</string>\n  <string name=\"required_options_screen\">প্রয়োজনীয় বিকল্পসমূহ</string>\n  <string name=\"failed_to_check_updates\">আপডেটগুলির জন্য পরীক্ষা করতে ব্যর্থ: %s</string>\n  <string name=\"no_update_available\">কোনো আপডেট উপলব্ধ নেই</string>\n  <string name=\"no_announcements_found\">কোনো ঘোষণা পাওয়া যায়নি</string>\n  <string name=\"update_check\">আপডেটগুলির জন্য পরীক্ষা করা হচ্ছে…</string>\n  <string name=\"dismiss_temporary\">এখন নয়</string>\n  <string name=\"update_available_dialog_description\">ReVanced Manager-এর একটি নতুন সংস্করণ (%s) উপলব্ধ আছে।</string>\n  <string name=\"failed_to_download_update\">আপডেট ডাউনলোড করতে ব্যর্থ: %s</string>\n  <string name=\"download\">ডাউনলোড করুন</string>\n  <string name=\"download_confirmation_metered\">আপনি বর্তমানে একটি মিটারড সংযোগে আছেন এবং আপনার পরিষেবা প্রদানকারী থেকে ডেটা চার্জ প্রযোজ্য হতে পারে।\n\nআপনি কি এখনও চালিয়ে যেতে চান?</string>\n  <string name=\"download_update_confirmation\">আপডেট ডাউনলোড করবেন?</string>\n  <string name=\"no_contributors_found\">কোনো অবদানকারী পাওয়া যায়নি</string>\n  <string name=\"select\">নির্বাচন করুন</string>\n  <string name=\"select_deselect_all\">সব নির্বাচন বা অনির্বাচন করুন</string>\n  <string name=\"select_patches_type_dialog_description\">URL বা স্থানীয় ফাইল থেকে নতুন প্যাচ যোগ করুন</string>\n  <string name=\"local_patches_description\">স্থানীয় স্টোরেজ থেকে প্যাচ যোগ করুন।</string>\n  <string name=\"remote_patches_description\">URL থেকে প্যাচ যোগ করুন। প্যাচগুলি স্বয়ংক্রিয়ভাবে আপডেট হতে পারে।</string>\n  <string name=\"recommended\">প্রস্তাবিত</string>\n  <string name=\"installation_failed_dialog_title\">ইনস্টলেশন ব্যর্থ হয়েছে</string>\n  <string name=\"installation_cancelled_dialog_title\">ইনস্টলেশন বাতিল হয়েছে</string>\n  <string name=\"installation_blocked_dialog_title\">ইনস্টলেশন ব্লক করা হয়েছে</string>\n  <string name=\"installation_conflict_dialog_title\">ইনস্টলেশন সংঘাত</string>\n  <string name=\"installation_incompatible_dialog_title\">ইনস্টলেশন অসঙ্গত</string>\n  <string name=\"installation_invalid_dialog_title\">ইনস্টলেশন অবৈধ</string>\n  <string name=\"installation_storage_issue_dialog_title\">পর্যাপ্ত স্টোরেজ নেই</string>\n  <string name=\"installation_timeout_dialog_title\">ইনস্টলেশনের সময় শেষ হয়ে গেছে</string>\n  <string name=\"installation_failed_description\">একটি অজানা কারণে ইনস্টলেশন ব্যর্থ হয়েছে। আবার চেষ্টা করবেন?</string>\n  <string name=\"installation_aborted_description\">ইনস্টলেশন ম্যানুয়ালি বাতিল করা হয়েছিল। আবার চেষ্টা করবেন?</string>\n  <string name=\"installation_blocked_description\">ইনস্টলেশন ব্লক করা হয়েছিল। আপনার ডিভাইসের নিরাপত্তা সেটিংস পর্যালোচনা করুন এবং আবার চেষ্টা করুন।</string>\n  <string name=\"installation_conflict_description\">অ্যাপটির একটি বিদ্যমান ইনস্টলেশন দ্বারা ইনস্টলেশন প্রতিরোধ করা হয়েছিল। ইনস্টল করা অ্যাপটি আনইনস্টল করে আবার চেষ্টা করবেন?</string>\n  <string name=\"installation_incompatible_description\">অ্যাপটি এই ডিভাইসের সাথে অসঙ্গত। এই ডিভাইসের সাথে সামঞ্জস্যপূর্ণ একটি APK ব্যবহার করুন এবং আবার চেষ্টা করুন।</string>\n  <string name=\"installation_invalid_description\">অ্যাপটি অবৈধ। অ্যাপটি আনইনস্টল করে আবার চেষ্টা করবেন?</string>\n  <string name=\"installation_storage_issue_description\">পর্যাপ্ত স্টোরেজ না থাকার কারণে অ্যাপটি ইনস্টল করা যায়নি। কিছু জায়গা খালি করুন এবং আবার চেষ্টা করুন।</string>\n  <string name=\"installation_timeout_description\">ইনস্টলেশনের জন্য অনেক বেশি সময় লেগেছে। আবার চেষ্টা করবেন?</string>\n  <string name=\"reinstall\">পুনরায় ইনস্টল করুন</string>\n  <string name=\"show\">দেখুন</string>\n  <string name=\"debugging\">ডিবাগিং</string>\n  <string name=\"about_device\">ডিভাইস সম্পর্কে</string>\n  <string name=\"enter_url\">URL লিখুন</string>\n  <string name=\"next\">পরবর্তী</string>\n  <string name=\"auto_update\">স্বয়ংক্রিয় আপডেট</string>\n  <string name=\"add_patches\">প্যাচ যোগ করুন</string>\n  <string name=\"auto_update_description\">একটি নতুন সংস্করণ উপলব্ধ হলে স্বয়ংক্রিয়ভাবে আপডেট করুন</string>\n  <string name=\"patches_prereleases\">প্রি-রিলিজ ব্যবহার করুন</string>\n  <string name=\"patches_prereleases_description\">%s এর প্রি-রিলিজ সংস্করণগুলি ব্যবহার করুন</string>\n  <string name=\"patches_url\">প্যাচের URL</string>\n  <string name=\"incompatible_patches_dialog\">এই প্যাচগুলি নির্বাচিত অ্যাপ সংস্করণ (%1$s) এর সাথে সামঞ্জস্যপূর্ণ নয়।\n\nআরও বিশদ দেখতে প্যাচগুলিতে ক্লিক করুন।</string>\n  <string name=\"incompatible_patch\">অসঙ্গতিপূর্ণ প্যাচ</string>\n  <string name=\"any_version\">যেকোনো</string>\n  <string name=\"never_show_again\">আর কখনও দেখাবেন না</string>\n  <string name=\"show_manager_update_dialog_on_launch\">চালু করার সময় আপডেট বার্তা দেখান</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">চালু হওয়ার সময় যখনই একটি নতুন আপডেট উপলব্ধ হবে তখন একটি পপআপ বিজ্ঞপ্তি দেখান</string>\n  <string name=\"failed_to_import_keystore\">কিস্টোর আমদানি করতে ব্যর্থ</string>\n  <string name=\"export\">রপ্তানি করুন</string>\n  <string name=\"confirm\">নিশ্চিত করুন</string>\n  <string name=\"new_announcement\">নতুন ঘোষণা:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d প্যাচ</item>\n    <item quantity=\"other\">%d প্যাচ</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d প্যাচ কার্যকর করুন</item>\n    <item quantity=\"other\">%d প্যাচ কার্যকর করুন</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d নির্বাচিত</item>\n    <item quantity=\"other\">%d নির্বাচিত</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-bs-rBA/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">Zakrpač</string>\n  <string name=\"onboarding_welcome_to\">Dobrodošli u</string>\n  <string name=\"onboarding_welcome_back\">Zdravo! To je novi</string>\n  <string name=\"onboarding_apps_subtitle\">Možete odabrati aplikaciju za zakrpu sada ili to učiniti kasnije</string>\n  <string name=\"onboarding_updates_subtitle\">Konfigurišite automatska ažuriranja kako bi ReVanced Manager i zakrpe bili ažurni</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager će se povezati na %s kako bi preuzeo početne verzije ako je vaš uređaj povezan na internet.</string>\n  <string name=\"retry\">Pokušaj ponovo</string>\n  <string name=\"onboarding_skip\">Preskoči za sada</string>\n  <string name=\"onboarding_recommended_version\">Preporučena verzija: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Preskočiti dozvole?</string>\n  <string name=\"onboarding_permissions_skip_description\">Bez potrebnih dozvola, neke funkcije možda neće raditi ispravno. Možete ih dodijeliti kasnije u postavkama aplikacije.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Preskoči u svakom slučaju</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager treba nekoliko dozvola za ispravan rad</string>\n  <string name=\"permission_install_apps\">Instaliraj nepoznate aplikacije</string>\n  <string name=\"permission_install_apps_description\">Potrebno za instalaciju patchovanih aplikacija</string>\n  <string name=\"permission_notifications\">Obavještenja</string>\n  <string name=\"permission_battery\">Optimizacija baterije</string>\n  <string name=\"permission_battery_description\">Sprečava prekid patchovanja u pozadini</string>\n  <string name=\"permission_grant\">Dodijeli</string>\n  <string name=\"downloader_host_permission_label\">Host preuzimača ReVanced Managera</string>\n  <string name=\"downloader_host_permission_description\">Koristi se za kontrolu pristupa preuzimačima ReVanced Managera. Samo ReVanced Manager ovo posjeduje.</string>\n  <string name=\"fab_patch_app\">Patchuj aplikaciju</string>\n  <string name=\"fab_add_patches\">Dodaj patcheve</string>\n  <string name=\"new_downloader_notification\">Dostupan(ni) novi downloader(i). Kliknite ovdje da ih konfigurišete.</string>\n  <string name=\"patches_not_downloaded\">Zakrpe nisu preuzete.</string>\n  <string name=\"app_source_dialog_option_auto_description\">Koristite instaliranu aplikaciju, zatim preuzeti APK, zatim dostupne preuzimače</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Nema kompatibilne pronađene aplikacije ili dostupnih preuzimača</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Montirane aplikacije ne mogu se ponovo zakrpati bez root pristupa</string>\n  <string name=\"patch_selector_item\">Odaberite patcheve</string>\n  <string name=\"patch_selector_item_description\">Odabrano je %d patcheva</string>\n  <string name=\"patch_selection_changed_warning\">Odabir zakrpa je promijenjen.</string>\n  <string name=\"apk_source_selector_item\">Odaberite APK izvor</string>\n  <string name=\"apk_source_auto\">Automatski</string>\n  <string name=\"apk_source_auto_installed\">Automatski · Korišćenjem instaliranog APK-a</string>\n  <string name=\"apk_source_auto_downloaded\">Automatski · Korišćenjem preuzetog APK-a</string>\n  <string name=\"apk_source_auto_downloader\">Automatski · Korištenje dostupnih preuzimača</string>\n  <string name=\"apk_source_auto_storage\">Automatski · Odabir iz pohrane</string>\n  <string name=\"apk_source_downloaded\">Već preuzeto</string>\n  <string name=\"auto_updates_dialog_description\">Želite li da ReVanced Manager povremeno provjerava ažuriranja za sljedeće komponente?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Patchevi</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Preuzimači</string>\n  <string name=\"auto_updates_dialog_note\">Ove postavke se mogu promijeniti kasnije.\n\n    ReVanced Manager će se povezati na %s kako bi preuzeo početne verzije ako je vaš uređaj povezan na internet.</string>\n  <string name=\"announcements_filter_tag\">Filtriraj po oznaci</string>\n  <string name=\"announcements_show_archived\">Prikaži arhivirano</string>\n  <string name=\"updates_description\">Provjeri ažuriranja i pogledaj historiju izmjena</string>\n  <string name=\"downloads_description\">Preuzimači i preuzete aplikacije</string>\n  <string name=\"safeguards_toggled_warning\">Sigurnosne mjere su preklopljene.</string>\n  <string name=\"about_app_name\">O aplikaciji %1$s</string>\n  <string name=\"search_languages\">Pretraži jezike…</string>\n  <string name=\"keystore\">Spremište ključeva</string>\n  <string name=\"patches_selections\">Odabiri patcheva</string>\n  <string name=\"select_bundle_for_import\">Odaberite paket za uvoz</string>\n  <string name=\"select_bundle_for_export\">Odaberite paket za izvoz</string>\n  <string name=\"patch_selection_packages\">Aplikacije sa sačuvanim odabirima</string>\n  <string name=\"patch_selection_entries\">Ukupno odabranih patcheva</string>\n  <string name=\"reset_configuration\">Resetuj konfiguraciju</string>\n  <string name=\"reset_patch_selection\">Odabiri patcheva</string>\n  <string name=\"reset_patch_options\">Opcije patcheva</string>\n  <string name=\"downloaders\">Preuzimači</string>\n  <string name=\"downloader_prereleases\">Koristi pre-izdanja</string>\n  <string name=\"downloader_prereleases_description\">Koristi pre-izdane verzije glavnog preuzimača</string>\n  <string name=\"downloader_state_loaded\">Učitano</string>\n  <string name=\"downloader_state_failed\">Nije uspjelo učitavanje. Kliknite za više detalja</string>\n  <string name=\"downloader_state_missing\">Nedostaje</string>\n  <string name=\"downloader_delete_apps_title\">Izbriši odabrane aplikacije</string>\n  <string name=\"downloader_delete_apps_description\">Jeste li sigurni da želite izbrisati odabrane aplikacije?</string>\n  <string name=\"downloader_delete_single_description\">Jeste li sigurni da želite obrisati \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps_description\">Aplikacije preuzete putem ReVanced Managera će se pojaviti ovdje.</string>\n  <string name=\"downloader_url\">URL preuzimača</string>\n  <string name=\"downloader_add\">Dodaj preuzimač</string>\n  <string name=\"select_downloader_type_dialog_description\">Dodajte nove preuzimače sa URL-a ili lokalnih datoteka</string>\n  <string name=\"local_downloaders_description\">Dodajte preuzimače iz lokalne pohrane.</string>\n  <string name=\"remote_downloaders_description\">Dodajte preuzimače sa URL-a. Mogu se automatski ažurirati.</string>\n  <string name=\"install_revanced_downloaders\">Instalirajte downloadere da biste dobili aplikacije direktno unutar ReVanced Managera.</string>\n  <string name=\"install_revanced_downloader\">Instaliraj ReVanced Downloadere</string>\n  <string name=\"cancel_downloader_install_title\">Otkaži instalaciju downloadera?</string>\n  <string name=\"cancel_downloader_install_description\">Instalacija downloadera je u toku. Ako sada odete, preuzimanje će biti otkazano.</string>\n  <string name=\"downloader_sources_unavailable_title\">Ovi preuzimači nedostaju</string>\n  <string name=\"downloader_sources_unavailable_description\">Kliknite na dugme za ažuriranje da biste to popravili.</string>\n  <string name=\"downloader_update_failed\">Nije uspjelo ažuriranje preuzimača: %s</string>\n  <string name=\"downloader_replace_fail\">Nije uspjelo uvoz preuzimača: %s</string>\n  <string name=\"select_from_storage_description\">Odaberite APK datoteku iz pohrane pomoću birača datoteka</string>\n  <string name=\"enable\">Omogući</string>\n  <string name=\"disable\">Onemogući</string>\n  <string name=\"process_runtime_memory_limit_description\">Maksimalna količina memorije koju proces Patcher može koristiti</string>\n  <string name=\"reset_onboarding\">Resetuj onboarding</string>\n  <string name=\"reset_onboarding_description\">Prikaži ekran za onboarding pri sljedećem pokretanju aplikacije</string>\n  <string name=\"api_not_working_title\">API servis je trenutno nedostupan</string>\n  <string name=\"api_not_working_description\">Neke funkcije mogu biti pogođene. Provjerite svoju vezu ili URL API-ja u postavkama.</string>\n  <string name=\"no_patched_apps_found\">Nema pronađenih patchovanih aplikacija</string>\n  <string name=\"no_patched_apps_description\">Trenutno nemate nijednu patchovanu aplikaciju za koju znamo. Promijenite to patchovanjem svoje prve aplikacije!</string>\n  <string name=\"patched_apps_section_title\">Zakrpljene aplikacije</string>\n  <string name=\"patchable_apps_section_title\">Aplikacije koje se mogu zakrpiti</string>\n  <string name=\"no_patches_found\">Nema pronađenih patcheva</string>\n  <string name=\"no_patches_description\">Još uvijek nemate patcheva. Dodajte patcheve dodirom na dugme ispod!</string>\n  <string name=\"split_apk_not_supported\">Podijeljeni APK-ovi se ne mogu zakrpiti</string>\n  <string name=\"no_downloaders_installed\">Nijedan downloader aplikacija nije instaliran!</string>\n  <string name=\"no_downloaders_trusted\">Nijedan downloader aplikacija nije povjerljiv! Provjerite svoje postavke.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paketi</string>\n  <string name=\"patch_selector_sheet_actions_title\">Akcije</string>\n  <string name=\"restore_default_selection\">Vrati zadani odabir</string>\n  <string name=\"deselect_all\">Poništi sav odabir</string>\n  <string name=\"invert_selection\">Invertiraj odabir</string>\n  <string name=\"deselect_all_except\">Poništi odabir svih osim %s</string>\n  <string name=\"scope_dialog_title\">Primijeni na</string>\n  <string name=\"scope_all_patches\">Sve zakrpe</string>\n  <string name=\"scope_bundle_patches\">Samo %s</string>\n  <string name=\"save_as_file\">Sačuvaj u datoteke</string>\n  <string name=\"export_patcher_logs\">Izvezi logove patchera</string>\n  <string name=\"save_logs_success\">Logovi sačuvani</string>\n  <string name=\"downloader_activity_dialog_body\">Potrebna je interakcija korisnika kako bi se nastavilo s ovim preuzimačem.</string>\n  <string name=\"patcher_step_unpack\">Pripremi zakrpu</string>\n  <string name=\"view_announcement\">Pogledaj obavještenje</string>\n  <string name=\"license\">Licenca</string>\n  <string name=\"source\">Izvor</string>\n  <string name=\"repository\">Repozitorij</string>\n  <string name=\"bundle_information_by_author\">Od %1$s</string>\n  <string name=\"version_compatibility_warning\">Odabrana verzija može biti nekompatibilna sa odabranim zakrpama</string>\n  <string name=\"announcements\">Obavještenja</string>\n  <string name=\"archive\">Arhiva</string>\n  <string name=\"view_update\">Pogledaj ažuriranje</string>\n  <string name=\"update_checking_downloader\">Provjeri ažuriranja za ReVanced Downloadere pri pokretanju</string>\n  <string name=\"update_checking_downloader_description\">Provjeri ažuriranja za instalirane ReVanced Downloadere kada se aplikacija pokrene</string>\n  <string name=\"prereleases_warning\">Pred-izdanja verzije mogu biti nestabilne i sadržavati greške. Možete iskusiti rušenja, gubitak podataka ili druge neočekivane probleme. Omogućite ovo samo ako ste svjesni ovih rizika.</string>\n  <string name=\"changelog\">Pogledaj historiju izmjena</string>\n  <string name=\"no_announcements_found\">Nema pronađenih obavještenja</string>\n  <string name=\"new_announcement\">Novo obavještenje:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d zakrpa</item>\n    <item quantity=\"few\">%d zakrpe</item>\n    <item quantity=\"other\">%d zakrpa</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Izvršite %d zakrpu</item>\n    <item quantity=\"few\">Izvršite %d zakrpe</item>\n    <item quantity=\"other\">Izvršite %d zakrpa</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d odabrana</item>\n    <item quantity=\"few\">%d odabrane</item>\n    <item quantity=\"other\">%d odabranih</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ca-rES/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">Actualitzador</string>\n  <string name=\"onboarding_welcome_to\">Benvingut a</string>\n  <string name=\"onboarding_welcome_back\">Hola! És el nou</string>\n  <string name=\"onboarding_apps_subtitle\">Pots seleccionar una aplicació per aplicar el pegat ara o fer-ho més tard</string>\n  <string name=\"onboarding_apps_network_error\">No s\\'han pogut carregar els pegats perquè la xarxa no està disponible o és inestable. Connecta\\'t a una xarxa estable i torna-ho a provar.</string>\n  <string name=\"onboarding_updates_subtitle\">Configura les actualitzacions automàtiques per mantenir ReVanced Manager i els pegats actualitzats</string>\n  <string name=\"banner_sources_not_downloaded_description\">No s\\'han pogut baixar els pegats i els descarregadors durant la configuració. Toca Actualitza per baixar-los.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager es connectarà a %s per descarregar les versions inicials si el teu dispositiu està connectat a internet.</string>\n  <string name=\"retry\">Torna-ho a provar</string>\n  <string name=\"onboarding_skip\">Omet-ho per ara</string>\n  <string name=\"onboarding_recommended_version\">Versió recomanada: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Omet els permisos?</string>\n  <string name=\"onboarding_permissions_skip_description\">Sense els permisos necessaris, algunes funcions poden no funcionar correctament. Els pots concedir més tard a la configuració de l\\'aplicació.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Omet-ho igualment</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager necessita uns quants permisos per funcionar correctament</string>\n  <string name=\"permission_install_apps\">Instal·la aplicacions desconegudes</string>\n  <string name=\"permission_install_apps_description\">Necessari per instal·lar aplicacions amb pegats</string>\n  <string name=\"permission_notifications\">Notificacions</string>\n  <string name=\"permission_notifications_description\">Permet aplicar pegats ininterrompudament en segon pla</string>\n  <string name=\"permission_battery\">Optimització de la bateria</string>\n  <string name=\"permission_battery_description\">Evita que l\\'aplicació de pegats s\\'interrompi en segon pla</string>\n  <string name=\"permission_grant\">Concedeix</string>\n  <string name=\"downloader_host_permission_label\">Host del descarregador de ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">S\\'utilitza per controlar l\\'accés als descarregadors de ReVanced Manager. Només ReVanced Manager disposa d\\'això.</string>\n  <string name=\"fab_patch_app\">Aplica un pegat a una aplicació</string>\n  <string name=\"fab_add_patches\">Afegeix pegats</string>\n  <string name=\"new_downloader_notification\">Hi ha nous descarregadors disponibles. Fes clic aquí per configurar-los.</string>\n  <string name=\"patches_not_downloaded\">Els pedaços no s\\'han descarregat.</string>\n  <string name=\"app_source_dialog_option_auto_description\">Utilitza l\\'aplicació instal·lada, després l\\'APK descarregat, després els descarregadors disponibles</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">No s\\'ha trobat cap aplicació o descarregador compatible disponible</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Les aplicacions muntades no es poden tornar a parchejar sense accés root</string>\n  <string name=\"patch_selector_item\">Selecciona pegats</string>\n  <string name=\"patch_selector_item_description\">%d pegats seleccionats</string>\n  <string name=\"patch_selection_changed_warning\">S\\'ha canviat la selecció de pedaços.</string>\n  <string name=\"apk_source_selector_item\">Selecciona la font de l\\'APK</string>\n  <string name=\"apk_source_auto\">Automàtic</string>\n  <string name=\"apk_source_auto_installed\">Automàtic · Utilitzant l\\'APK instal·lat</string>\n  <string name=\"apk_source_auto_downloaded\">Automàtic · Utilitzant l\\'APK descarregat</string>\n  <string name=\"apk_source_auto_downloader\">Automàtic · Utilitzant descarregadors disponibles</string>\n  <string name=\"apk_source_auto_storage\">Automàtic · Seleccionar de l\\'emmagatzematge</string>\n  <string name=\"apk_source_downloaded\">Ja descarregat</string>\n  <string name=\"auto_updates_dialog_description\">Vols que ReVanced Manager comprovi periòdicament si hi ha actualitzacions per als components següents?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Pegats de ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Descarregadors</string>\n  <string name=\"auto_updates_dialog_note\">Aquests ajustos es poden canviar més tard.\n\n    ReVanced Manager es connectarà a %s per descarregar les versions inicials si el teu dispositiu està connectat a internet.</string>\n  <string name=\"announcements_filter_tag\">Filtrar per etiqueta</string>\n  <string name=\"announcements_show_archived\">Mostrar arxivats</string>\n  <string name=\"updates_description\">Comprova si hi ha actualitzacions i consulta el registre de canvis</string>\n  <string name=\"downloads_description\">Descarregadors i aplicacions descarregades</string>\n  <string name=\"safeguards_toggled_warning\">S\\'han activat/desactivat les mesures de seguretat.</string>\n  <string name=\"about_app_name\">Quant a %1$s</string>\n  <string name=\"search_languages\">Cerca idiomes…</string>\n  <string name=\"keystore\">Magatzem de claus</string>\n  <string name=\"patches_selections\">Seleccions de pegats</string>\n  <string name=\"select_bundle_for_import\">Selecciona el paquet per importar-hi</string>\n  <string name=\"select_bundle_for_export\">Selecciona el paquet des d\\'on exportar</string>\n  <string name=\"patch_selection_packages\">Aplicacions amb seleccions desades</string>\n  <string name=\"patch_selection_entries\">Total de pegats seleccionats</string>\n  <string name=\"reset_configuration\">Restableix la configuració</string>\n  <string name=\"reset_patch_selection\">Seleccions de pegats</string>\n  <string name=\"reset_patch_options\">Opcions de pegats</string>\n  <string name=\"downloaders\">Descarregadors</string>\n  <string name=\"downloader_prereleases\">Utilitza pre-llançaments</string>\n  <string name=\"downloader_prereleases_description\">Utilitza versions de pre-llançament del descarregador principal</string>\n  <string name=\"downloader_state_loaded\">Carregat</string>\n  <string name=\"downloader_state_failed\">No s\\'ha pogut carregar. Fes clic per a més detalls</string>\n  <string name=\"downloader_state_missing\">Falta</string>\n  <string name=\"downloader_delete_apps_title\">Elimina les aplicacions seleccionades</string>\n  <string name=\"downloader_delete_apps_description\">Estàs segur que vols eliminar les aplicacions seleccionades?</string>\n  <string name=\"downloader_delete_single_description\">Estàs segur que vols suprimir \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps_description\">Les aplicacions descarregades mitjançant ReVanced Manager apareixeran aquí.</string>\n  <string name=\"downloader_url\">URL del descarregador</string>\n  <string name=\"downloader_add\">Afegir descarregador</string>\n  <string name=\"select_downloader_type_dialog_description\">Afegeix nous descarregadors des d\\'una URL o fitxers locals</string>\n  <string name=\"local_downloaders_description\">Afegeix descarregadors des de l\\'emmagatzematge local.</string>\n  <string name=\"remote_downloaders_description\">Afegeix descarregadors des d\\'una URL. Es poden actualitzar automàticament.</string>\n  <string name=\"install_revanced_downloaders\">Instal·la descarregadors per obtenir aplicacions directament des de ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Instal·la els descarregadors de ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Vols cancel·lar la instal·lació dels descarregadors?</string>\n  <string name=\"cancel_downloader_install_description\">Hi ha una instal·lació de descarregadors en curs. Si surts ara, la descàrrega es cancel·larà.</string>\n  <string name=\"downloader_sources_unavailable_title\">Aquests descarregadors falten</string>\n  <string name=\"downloader_sources_unavailable_description\">Fes clic al botó d\\'actualització per solucionar-ho.</string>\n  <string name=\"downloader_update_failed\">No s\\'ha pogut actualitzar el descarregador: %s</string>\n  <string name=\"downloader_replace_fail\">No s\\'ha pogut importar el descarregador: %s</string>\n  <string name=\"select_from_storage_description\">Selecciona un fitxer APK de l\\'emmagatzematge mitjançant el selector de fitxers</string>\n  <string name=\"enable\">Activa</string>\n  <string name=\"disable\">Desactiva</string>\n  <string name=\"process_runtime_memory_limit_description\">La quantitat màxima de memòria que pot utilitzar el procés de Patcher</string>\n  <string name=\"reset_onboarding\">Restableix l\\'experiència d\\'incorporació</string>\n  <string name=\"reset_onboarding_description\">Mostra la pantalla d\\'incorporació al proper inici de l\\'aplicació</string>\n  <string name=\"api_not_working_title\">El servei de l\\'API no funciona actualment</string>\n  <string name=\"api_not_working_description\">Algunes funcions podrien estar afectades. Comproveu la vostra connexió o l\\'URL de l\\'API a la configuració.</string>\n  <string name=\"no_patched_apps_found\">No s\\'han trobat aplicacions amb pegats</string>\n  <string name=\"no_patched_apps_description\">Actualment no tens cap aplicació amb pegats que coneguem. Canvia-ho aplicant pegats a la teva primera aplicació!</string>\n  <string name=\"patched_apps_section_title\">Aplicacions pegades</string>\n  <string name=\"patchable_apps_section_title\">Aplicacions que es poden pegar</string>\n  <string name=\"no_patches_found\">No s\\'han trobat pegats</string>\n  <string name=\"no_patches_description\">Encara no tens cap pegat. Afegeix pegats tocant el botó de sota!</string>\n  <string name=\"split_apk_not_supported\">Els APKs dividits no es poden aplicar pegats</string>\n  <string name=\"no_downloaders_installed\">No hi ha cap descarregador d\\'aplicacions instal·lat!</string>\n  <string name=\"no_downloaders_trusted\">No s\\'ha confiat en cap descarregador d\\'aplicacions! Si us plau, comprova la configuració.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paquets</string>\n  <string name=\"patch_selector_sheet_actions_title\">Accions</string>\n  <string name=\"restore_default_selection\">Restaurar selecció predeterminada</string>\n  <string name=\"deselect_all\">Desseleccionar tot</string>\n  <string name=\"invert_selection\">Invertir selecció</string>\n  <string name=\"deselect_all_except\">Desseleccionar tot excepte %s</string>\n  <string name=\"scope_dialog_title\">Aplicar a</string>\n  <string name=\"scope_all_patches\">Tots els pegats</string>\n  <string name=\"scope_bundle_patches\">%s només</string>\n  <string name=\"save_as_file\">Desa als fitxers</string>\n  <string name=\"export_patcher_logs\">Exporta els registres del pegat</string>\n  <string name=\"save_logs_success\">Registres desats</string>\n  <string name=\"downloader_activity_dialog_body\">Es requereix la interacció de l\\'usuari per procedir amb aquest descarregador.</string>\n  <string name=\"patcher_step_unpack\">Preparar l\\'instal·lador de pegats</string>\n  <string name=\"view_announcement\">Veure anunci</string>\n  <string name=\"license\">Llicència</string>\n  <string name=\"source\">Font</string>\n  <string name=\"repository\">Repositori</string>\n  <string name=\"bundle_information_by_author\">De %1$s</string>\n  <string name=\"version_compatibility_warning\">La versió seleccionada pot ser incompatible amb els pegats seleccionats</string>\n  <string name=\"announcements\">Anuncis</string>\n  <string name=\"archive\">Arxiu</string>\n  <string name=\"view_update\">Mostra l\\'actualització</string>\n  <string name=\"update_checking_downloader\">Comprova si hi ha actualitzacions dels descarregadors de ReVanced en iniciar-se</string>\n  <string name=\"update_checking_downloader_description\">Comprova si hi ha actualitzacions dels descarregadors de ReVanced instal·lats quan s\\'inicia l\\'aplicació</string>\n  <string name=\"prereleases_warning\">Les versions preliminars poden ser inestables i contenir errors. Podries experimentar bloquejos, pèrdua de dades o altres problemes inesperats. Habilita-ho només si et sents còmode amb aquests riscos.</string>\n  <string name=\"changelog\">Mostra el registre de canvis</string>\n  <string name=\"no_announcements_found\">No s\\'han trobat anuncis</string>\n  <string name=\"new_announcement\">Nou anunci:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d pedaç</item>\n    <item quantity=\"other\">%d pedaços</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Executa %d pedaç</item>\n    <item quantity=\"other\">Executa %d pedaços</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d seleccionat</item>\n    <item quantity=\"other\">%d seleccionats</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-cs-rCZ/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Záplatovač</string>\n  <string name=\"patches\">Záplaty</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Správce</string>\n  <string name=\"onboarding_welcome_to\">Vítejte v</string>\n  <string name=\"onboarding_welcome_back\">Ahoj! Je to nový</string>\n  <string name=\"onboarding_apps_subtitle\">Můžete vybrat aplikaci k patchování nyní nebo to udělat později</string>\n  <string name=\"onboarding_apps_network_error\">Nelze načíst patche, protože síť je nedostupná nebo nestabilní. Připojte se ke stabilní síti a zkuste to znovu.</string>\n  <string name=\"onboarding_updates_subtitle\">Nastavte automatické aktualizace, aby byly ReVanced Manager a patche aktuální</string>\n  <string name=\"banner_sources_not_downloaded_description\">Během nastavení nebylo možné stáhnout patche a stahovače. Klepněte na \\\"aktualizovat\\\" a stáhněte je.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager se připojí k %s, aby stáhl počáteční verze, pokud je vaše zařízení připojeno k internetu.</string>\n  <string name=\"retry\">Zkusit znovu</string>\n  <string name=\"onboarding_skip\">Prozatím přeskočit</string>\n  <string name=\"onboarding_recommended_version\">Doporučená verze: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Přeskočit oprávnění?</string>\n  <string name=\"onboarding_permissions_skip_description\">Bez požadovaných oprávnění některé funkce nemusí fungovat správně. Můžete je udělit později v nastavení aplikace.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Přeskočit i tak</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager potřebuje několik oprávnění k řádnému fungování</string>\n  <string name=\"permission_install_apps\">Instalovat neznámé aplikace</string>\n  <string name=\"permission_install_apps_description\">Nutné pro instalaci záplatovaných aplikací</string>\n  <string name=\"permission_notifications\">Oznámení</string>\n  <string name=\"permission_notifications_description\">Umožňuje nepřerušované patchování na pozadí</string>\n  <string name=\"permission_battery\">Optimalizace baterie</string>\n  <string name=\"permission_battery_description\">Zabraňuje přerušení patchování na pozadí</string>\n  <string name=\"permission_grant\">Udělit</string>\n  <string name=\"downloader_host_permission_label\">Hostitel stahování ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Používá se k řízení přístupu ke stahovacím nástrojům ReVanced Manager. Pouze ReVanced Manager toto má.</string>\n  <string name=\"toast_copied_to_clipboard\">Zkopírováno!</string>\n  <string name=\"copy_to_clipboard\">Kopírovat do schránky</string>\n  <string name=\"dashboard\">Přehled</string>\n  <string name=\"settings\">Nastavení</string>\n  <string name=\"select_app\">Vybrat aplikaci</string>\n  <string name=\"patches_count_selected\">Vybráno: %1$d/%2$d</string>\n  <string name=\"fab_patch_app\">Patchovat aplikaci</string>\n  <string name=\"fab_add_patches\">Přidat záplaty</string>\n  <string name=\"new_downloader_notification\">K dispozici nový(é) stahovač(e). Klikněte zde pro jejich konfiguraci.</string>\n  <string name=\"unsupported_architecture_warning\">Patchování není na této architektuře zařízení podporováno a s největší pravděpodobností selže.</string>\n  <string name=\"import_\">Importovat</string>\n  <string name=\"import_patches\">Importovat záplaty</string>\n  <string name=\"file_field_set\">Vybráno</string>\n  <string name=\"file_field_not_set\">Nevybráno</string>\n  <string name=\"field_not_set\">Nenastaveno</string>\n  <string name=\"patches_missing\">Chybí</string>\n  <string name=\"patches_error\">Chyba</string>\n  <string name=\"patches_error_description\">Záplaty nebylo možné načíst. Kliknutím zobrazíte chybu.</string>\n  <string name=\"patches_not_downloaded\">Záplaty nebyly staženy.</string>\n  <string name=\"patches_name_default\">Záplaty</string>\n  <string name=\"patches_name_fallback\">Nepojmenováno</string>\n  <string name=\"android_11_bug_dialog_title\">Chyba Androidu 11</string>\n  <string name=\"android_11_bug_dialog_description\">Povolení k instalaci aplikací musí být uděleno předem, aby se předešlo chybě v systému Android 11, která by negativně ovlivnila uživatelský zážitek.</string>\n  <string name=\"no_network_toast\">Připojení k internetu není dostupné</string>\n  <string name=\"selected_app_meta_any_version\">Jakákoli dostupná verze</string>\n  <string name=\"app_source_dialog_title\">Vybrat zdroj</string>\n  <string name=\"app_source_dialog_option_auto\">Automaticky</string>\n  <string name=\"app_source_dialog_option_auto_description\">Použít nainstalovanou aplikaci, poté stažený soubor APK, poté dostupné stahovače</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Nebyly nalezeny žádné kompatibilní aplikace nebo dostupné nástroje pro stahování</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Namontované aplikace nelze znovu patchovat bez přístupu root</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Verze %s neodpovídá doporučené verzi</string>\n  <string name=\"patch_item_description\">Spustit patchování aplikace</string>\n  <string name=\"patch_selector_item\">Vybrat záplaty</string>\n  <string name=\"patch_selector_item_description\">%d záplat vybráno</string>\n  <string name=\"patch_selection_changed_warning\">Výběr záplat byl změněn</string>\n  <string name=\"no_patches_selected\">Žádné záplaty nejsou vybrány</string>\n  <string name=\"network_unavailable_warning\">Vaše zařízení není připojeno k internetu. Stahování později selže.</string>\n  <string name=\"network_metered_warning\">Momentálně jste na účtovaném připojení. Mohou být účtovány poplatky za data od Vašeho poskytovatele služeb.</string>\n  <string name=\"apk_source_selector_item\">Vybrat zdroj souboru APK</string>\n  <string name=\"apk_source_auto\">Automaticky</string>\n  <string name=\"apk_source_auto_installed\">Automaticky · Používá nainstalované soubory APK</string>\n  <string name=\"apk_source_auto_downloaded\">Automaticky · Používá stažené soubory APK</string>\n  <string name=\"apk_source_auto_downloader\">Automaticky · Pomocí dostupných stahovačů</string>\n  <string name=\"apk_source_auto_storage\">Automaticky · Vybrat z úložiště</string>\n  <string name=\"apk_source_downloader\">Používá se %s</string>\n  <string name=\"apk_source_installed\">Používá se nainstalovaný soubor APK</string>\n  <string name=\"apk_source_local\">Používá se místní soubor APK</string>\n  <string name=\"apk_source_downloaded\">Již staženo</string>\n  <string name=\"legacy_import_failed\">Nepodařilo se importovat starší nastavení</string>\n  <string name=\"auto_updates_dialog_title\">Konfigurovat aktualizace</string>\n  <string name=\"auto_updates_dialog_description\">Chcete, aby ReVanced Manager pravidelně kontroloval aktualizace pro následující součásti?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Záplaty ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Stahovače</string>\n  <string name=\"auto_updates_dialog_note\">Tato nastavení lze později změnit.\n\n    ReVanced Manager se připojí k %s, aby stáhl počáteční verze, pokud je vaše zařízení připojeno k internetu.</string>\n  <string name=\"announcements_filter_tag\">Filtrovat podle tagu</string>\n  <string name=\"announcements_show_archived\">Zobrazit archivované</string>\n  <string name=\"general\">Obecné</string>\n  <string name=\"general_description\">Jazyk, motiv, dynamická barva</string>\n  <string name=\"updates\">Aktualizace</string>\n  <string name=\"updates_description\">Zkontrolovat aktualizace a zobrazit záznam změn</string>\n  <string name=\"downloads\">Stažené soubory</string>\n  <string name=\"downloads_description\">Stahovače a stažené aplikace</string>\n  <string name=\"import_export\">Importovat &amp; exportovat</string>\n  <string name=\"import_export_description\">Úložiště klíčů, možnosti a výběr záplat</string>\n  <string name=\"advanced\">Pokročilé</string>\n  <string name=\"advanced_description\">URL API, limit paměti, ladění</string>\n  <string name=\"safeguards_toggled_warning\">Ochranné prvky byly přepnuty</string>\n  <string name=\"about\">O aplikaci</string>\n  <string name=\"about_app_name\">O aplikaci %1$s</string>\n  <string name=\"opensource_licenses\">Licence Open Source</string>\n  <string name=\"opensource_licenses_description\">Zobrazit všechny knihovny použité k vytvoření této aplikace</string>\n  <string name=\"contributors\">Přispěvatelé</string>\n  <string name=\"contributors_description\">Zobrazit přispěvatele ReVanced</string>\n  <string name=\"dynamic_color\">Dynamická barva</string>\n  <string name=\"dynamic_color_description\">Přizpůsobit barvy tapetě</string>\n  <string name=\"pure_black_theme\">Čistě černý motiv</string>\n  <string name=\"pure_black_theme_description\">Použít čistě černé pozadí pro tmavý motiv</string>\n  <string name=\"theme\">Motiv</string>\n  <string name=\"theme_description\">Vybrat mezi světlým nebo tmavým motivem</string>\n  <string name=\"language\">Jazyk</string>\n  <string name=\"language_description\">Vybrat jazyk zobrazení aplikace</string>\n  <string name=\"language_system_default\">Výchozí systémový</string>\n  <string name=\"search_languages\">Hledat jazyky…</string>\n  <string name=\"safeguards\">Ochranná opatření</string>\n  <string name=\"patch_compat_check\">Vypnout kontrolu kompatibility verzí</string>\n  <string name=\"patch_compat_check_description\">Neomezovat záplaty na kompatibilní verze aplikací</string>\n  <string name=\"patch_compat_check_confirmation\">Výběr nekompatibilních záplat může vést k poškozené aplikaci.\n\nChcete přesto pokračovat?</string>\n  <string name=\"suggested_version_safeguard\">Vyžadovat doporučenou verzi aplikace</string>\n  <string name=\"suggested_version_safeguard_description\">Vynutit výběr doporučené verze aplikace</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Výběr aplikace, která není doporučenou verzí, může způsobit neočekávané problémy.\n\nChcete přesto pokračovat?</string>\n  <string name=\"patch_selection_safeguard\">Povolit změnu výběru a možností záplat</string>\n  <string name=\"patch_selection_safeguard_description\">Nebránit výběru či zrušení výběru záplat a přizpůsobení možností</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Změna výběru záplat může způsobit neočekávané problémy.\n\nPřesto povolit?</string>\n  <string name=\"universal_patches_safeguard\">Povolit použití univerzálních záplat</string>\n  <string name=\"universal_patches_safeguard_description\">Nebránit použití univerzálních záplat</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Univerzální záplaty nejsou tak dobře testovány jako ty, které cílí na konkrétní aplikace.\n\nPřesto povolit?</string>\n  <string name=\"keystore\">Úložiště klíčů</string>\n  <string name=\"patches_selections\">Výběr záplat</string>\n  <string name=\"import_keystore\">Importovat úložiště klíčů</string>\n  <string name=\"import_keystore_description\">Importovat vlastní úložiště klíčů</string>\n  <string name=\"import_keystore_dialog_title\">Zadat přihlašovací údaje k úložišti klíčů</string>\n  <string name=\"import_keystore_dialog_description\">Pro import úložiště klíčů budete muset zadat jeho přihlašovací údaje.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Uživatelské jméno (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Heslo</string>\n  <string name=\"import_keystore_dialog_button\">Importovat</string>\n  <string name=\"import_keystore_wrong_credentials\">Chybné přihlašovací údaje k úložišti klíčů</string>\n  <string name=\"import_keystore_success\">Úložiště klíčů importováno</string>\n  <string name=\"export_keystore\">Exportovat úložiště klíčů</string>\n  <string name=\"export_keystore_description\">Exportovat aktuální úložiště klíčů</string>\n  <string name=\"export_keystore_unavailable\">Žádné úložiště klíčů k exportu</string>\n  <string name=\"export_keystore_success\">Úložiště klíčů exportováno</string>\n  <string name=\"regenerate_keystore\">Regenerovat úložiště klíčů</string>\n  <string name=\"regenerate_keystore_description\">Vygenerovat nové úložiště klíčů</string>\n  <string name=\"regenerate_keystore_dialog_description\">Chystáte se regenerovat své úložiště klíčů, které správce použije během procesu záplatování.\n\nNebudete moci aktualizovat dříve nainstalované aplikace z tohoto zdroje.</string>\n  <string name=\"regenerate_keystore_success\">Úložiště klíčů bylo úspěšně nahrazeno</string>\n  <string name=\"import_patch_selection\">Importovat výběr záplat</string>\n  <string name=\"import_patch_selection_description\">Importovat výběr záplat ze souboru JSON</string>\n  <string name=\"import_patch_selection_fail\">Nepodařilo se importovat výběr záplat: %s</string>\n  <string name=\"import_patch_selection_success\">Výběr záplat importován</string>\n  <string name=\"select_bundle_for_import\">Vybrat balíček pro import</string>\n  <string name=\"export_patch_selection\">Exportovat výběr záplat</string>\n  <string name=\"export_patch_selection_description\">Exportovat výběr záplat do souboru JSON</string>\n  <string name=\"export_patch_selection_fail\">Nepodařilo se exportovat výběr záplat: %s</string>\n  <string name=\"export_patch_selection_success\">Výběr záplat exportován</string>\n  <string name=\"select_bundle_for_export\">Vybrat balíček pro export</string>\n  <string name=\"patch_selection_packages\">Aplikace s uloženými výběry</string>\n  <string name=\"patch_selection_entries\">Celkem vybráno záplat</string>\n  <string name=\"reset_configuration\">Obnovit konfiguraci</string>\n  <string name=\"reset_patch_selection\">Výběr záplat</string>\n  <string name=\"reset_patch_selection_description\">Resetovat uložený výběr záplat</string>\n  <string name=\"reset_patch_options\">Možnosti záplatování</string>\n  <string name=\"reset_patch_options_description\">Resetovat uložené možnosti záplat</string>\n  <string name=\"reset_patch_selection_success\">Výběr záplat byl resetován</string>\n  <string name=\"patch_selection_reset_all\">Globálně resetovat výběr záplat</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Chystáte se resetovat všechny výběry záplat. Každou záplatu budete muset vybrat ručně znovu.</string>\n  <string name=\"patch_selection_reset_all_description\">Resetuje všechny výběry záplat</string>\n  <string name=\"patch_selection_reset_package\">Resetovat výběr záplat pro aplikaci</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Chystáte se resetovat výběr záplat pro aplikaci \\\"%s\\\". Každou záplatu budete muset vybrat ručně znovu.</string>\n  <string name=\"patch_selection_reset_package_description\">Resetuje výběr záplat pro jednu aplikaci</string>\n  <string name=\"patch_selection_reset_patches\">Resetovat výběr záplat (jednotlivý)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Chystáte se resetovat výběr záplat pro \\\"%s\\\". Každou záplatu budete muset vybrat znovu ručně.</string>\n  <string name=\"patch_selection_reset_patches_description\">Resetuje výběr záplat pro konkrétní sadu záplat</string>\n  <string name=\"patch_options_reset_package\">Resetovat možnosti záplat pro aplikaci</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Chystáte se resetovat možnosti záplat pro aplikaci \\\"%s\\\". Každou možnost budete muset znovu použít.</string>\n  <string name=\"patch_options_reset_package_description\">Resetuje možnosti záplat pro jednu aplikaci</string>\n  <string name=\"patch_options_reset_patches\">Resetovat možnosti záplat (jednotlivé)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Chystáte se resetovat možnosti záplat pro \\\"%s\\\". Každou možnost budete muset znovu použít.</string>\n  <string name=\"patch_options_reset_patches_description\">Resetuje možnosti záplat pro konkrétní sadu záplat</string>\n  <string name=\"patch_options_reset_all\">Globálně resetovat možnosti záplat</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Chystáte se resetovat všechny možnosti záplat. Každou možnost budete muset znovu použít.</string>\n  <string name=\"patch_options_reset_all_description\">Resetuje všechny možnosti záplat</string>\n  <string name=\"downloaders\">Stahovače</string>\n  <string name=\"downloader_prereleases\">Používat předběžné verze</string>\n  <string name=\"downloader_prereleases_description\">Používat předběžné verze hlavního stahovače</string>\n  <string name=\"downloader_state_loaded\">Načteno</string>\n  <string name=\"downloader_state_failed\">Nepodařilo se načíst. Klepněte pro více podrobností</string>\n  <string name=\"downloader_state_missing\">Chybí</string>\n  <string name=\"downloader_delete_apps_title\">Odstranit vybrané aplikace</string>\n  <string name=\"downloader_delete_apps_description\">Opravdu chcete odstranit vybrané aplikace?</string>\n  <string name=\"downloader_delete_single_description\">Opravdu chcete smazat \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Nebyly nalezeny žádné stažené aplikace.</string>\n  <string name=\"downloader_settings_no_apps_description\">Aplikace stažené přes ReVanced Manager se zobrazí zde.</string>\n  <string name=\"downloader_url\">URL stahovače</string>\n  <string name=\"downloader_add\">Přidat stahovač</string>\n  <string name=\"select_downloader_type_dialog_description\">Přidat nové stahovače z URL nebo lokálních souborů</string>\n  <string name=\"local_downloaders_description\">Přidat stahovače z místního úložiště.</string>\n  <string name=\"remote_downloaders_description\">Přidat stahovače z URL. Mohou být automaticky aktualizovány.</string>\n  <string name=\"install_revanced_downloaders\">Nainstalujte stahovače pro získání aplikací přímo v ReVanced Manageru.</string>\n  <string name=\"install_revanced_downloader\">Nainstalovat stahovače ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Zrušit instalaci stahovačů?</string>\n  <string name=\"cancel_downloader_install_description\">Probíhá instalace stahovačů. Pokud nyní odejdete, stahování bude zrušeno.</string>\n  <string name=\"downloader_sources_unavailable_title\">Tyto stahovače chybí</string>\n  <string name=\"downloader_sources_unavailable_description\">Kliknutím na tlačítko aktualizace to opravíte.</string>\n  <string name=\"downloader_update_failed\">Nepodařilo se aktualizovat stahovač: %s</string>\n  <string name=\"downloader_replace_fail\">Nepodařilo se importovat stahovač: %s</string>\n  <string name=\"search_apps\">Hledat aplikace…</string>\n  <string name=\"loading_body\">Načítání…</string>\n  <string name=\"downloading_patches\">Stahování záplat…</string>\n  <string name=\"options\">Možnosti</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Ano</string>\n  <string name=\"no\">Ne</string>\n  <string name=\"edit\">Upravit</string>\n  <string name=\"dialog_input_placeholder\">Hodnota</string>\n  <string name=\"reset\">Resetovat</string>\n  <string name=\"share\">Sdílet</string>\n  <string name=\"patch\">Záplata</string>\n  <string name=\"select_from_storage\">Vybrat z úložiště</string>\n  <string name=\"select_from_storage_description\">Vyberte soubor APK z úložiště pomocí výběru souborů</string>\n  <string name=\"suggested_version_info\">Doporučená verze: %s</string>\n  <string name=\"type_anything\">Napište cokoli pro pokračování</string>\n  <string name=\"search\">Hledat záplaty…</string>\n  <string name=\"apply\">Použít</string>\n  <string name=\"help\">Nápověda</string>\n  <string name=\"back\">Zpět</string>\n  <string name=\"warning\">Upozornění</string>\n  <string name=\"add\">Přidat</string>\n  <string name=\"enable\">Povolit</string>\n  <string name=\"disable\">Zakázat</string>\n  <string name=\"close\">Zavřít</string>\n  <string name=\"clear\">Vyčistit</string>\n  <string name=\"system\">Systém</string>\n  <string name=\"light\">Světlý</string>\n  <string name=\"dark\">Tmavý</string>\n  <string name=\"appearance\">Vzhled</string>\n  <string name=\"networking\">Síť</string>\n  <string name=\"allow_metered_networks\">Povolit sítě s omezeným objemem dat</string>\n  <string name=\"allow_metered_networks_description\">Povoluje automatické aktualizace v sítích s omezeným objemem dat.\\n    Aplikace může stále upozorňovat na sítě s omezeným objemem dat pro manuální operace.</string>\n  <string name=\"downloaded_apps\">Stažené aplikace</string>\n  <string name=\"process_runtime\">Spustit Patcher v jiném procesu (experimentální)</string>\n  <string name=\"process_runtime_description\">To je rychlejší a umožňuje Patcheru využívat více paměti</string>\n  <string name=\"process_runtime_memory_limit\">Limit paměti procesu Patcheru</string>\n  <string name=\"process_runtime_memory_limit_description\">Maximální množství paměti, které může proces Patcheru použít</string>\n  <string name=\"debug_logs_export\">Exportovat ladicí protokoly</string>\n  <string name=\"debug_logs_export_read_failed\">Nepodařilo se přečíst protokoly (kód chyby %d)</string>\n  <string name=\"debug_logs_export_failed\">Nepodařilo se exportovat protokoly</string>\n  <string name=\"debug_logs_export_success\">Exportované protokoly</string>\n  <string name=\"api_url\">URL API</string>\n  <string name=\"api_url_description\">API používané ke stahování potřebných souborů</string>\n  <string name=\"api_url_dialog_title\">Změnit URL API</string>\n  <string name=\"api_url_dialog_description\">Změnit URL API aplikace ReVanced Manager. ReVanced Manager používá API ke stahování záplat a aktualizací.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager se připojuje k API pro stahování záplat a aktualizací. Ujistěte se, že mu důvěřujete.</string>\n  <string name=\"api_url_dialog_save\">Nastavit</string>\n  <string name=\"api_url_dialog_reset\">Resetovat URL API</string>\n  <string name=\"device\">Zařízení</string>\n  <string name=\"device_android_version\">Verze Androidu</string>\n  <string name=\"device_model\">Model</string>\n  <string name=\"device_architectures\">Architektury CPU</string>\n  <string name=\"device_memory_limit\">Limity paměti</string>\n  <string name=\"device_memory_limit_format\">%1$d MB (normální) - %2$d MB (velký)</string>\n  <string name=\"patches_force_download\">Vynutit stažení všech záplat</string>\n  <string name=\"patches_reset\">Resetovat záplaty</string>\n  <string name=\"reset_onboarding\">Obnovit úvodní nastavení</string>\n  <string name=\"reset_onboarding_description\">Zobrazit obrazovku úvodního nastavení při dalším spuštění aplikace</string>\n  <string name=\"patching\">Patchování</string>\n  <string name=\"signing\">Podepisování</string>\n  <string name=\"storage\">Úložiště</string>\n  <string name=\"no_patch_found\">Žádná záplata nebyla nalezena. Zkontrolujte své záplaty</string>\n  <string name=\"tab_apps\">Aplikace</string>\n  <string name=\"tab_patches\">Záplaty</string>\n  <string name=\"delete\">Smazat</string>\n  <string name=\"refresh\">Obnovit</string>\n  <string name=\"continue_anyways\">Přesto pokračovat</string>\n  <string name=\"download_another_version\">Stáhnout jinou verzi</string>\n  <string name=\"download_app\">Stáhnout aplikaci</string>\n  <string name=\"download_apk\">Stáhnout soubor APK</string>\n  <string name=\"patches_download_fail\">Nepodařilo se stáhnout záplaty: %s</string>\n  <string name=\"api_not_working_title\">Služba API je momentálně nedostupná</string>\n  <string name=\"api_not_working_description\">Některé funkce mohou být ovlivněny. Zkontrolujte připojení nebo URL API v nastavení.</string>\n  <string name=\"patches_replace_fail\">Nepodařilo se importovat záplaty: %s</string>\n  <string name=\"no_patched_apps_found\">Nenalezeny žádné záplatované aplikace</string>\n  <string name=\"no_patched_apps_description\">V současné době nemáte žádné záplatované aplikace, o kterých bychom věděli. Změňte to záplatováním vaší první aplikace!</string>\n  <string name=\"patched_apps_section_title\">Opravené aplikace</string>\n  <string name=\"patchable_apps_section_title\">Aplikace, které lze opravit</string>\n  <string name=\"no_patches_found\">Nenalezeny žádné záplaty</string>\n  <string name=\"no_patches_description\">Zatím nemáte žádné záplaty. Přidejte záplaty klepnutím na tlačítko níže!</string>\n  <string name=\"tap_on_patches\">Klepnutím na záplaty získáte o nich více informací</string>\n  <string name=\"patches_selected\">%s vybráno</string>\n  <string name=\"incompatible_patches\">Nekompatibilní záplaty</string>\n  <string name=\"universal_patches\">Univerzální záplaty</string>\n  <string name=\"patch_selection_reset_toast\">Výběr záplat a možnosti byly resetovány na doporučené výchozí hodnoty</string>\n  <string name=\"patch_options_reset_toast\">Možnosti záplat byly resetovány</string>\n  <string name=\"non_suggested_version_warning_title\">Nenavrhovaná verze</string>\n  <string name=\"non_suggested_version_warning_description\">Verze aplikace, kterou jste vybrali, neodpovídá doporučené verzi.\\nPoužijte doporučenou verzi: %s\\n\\nChcete-li přesto pokračovat, vypněte \\\"Vyžadovat doporučenou verzi aplikace\\\" v rozšířeném nastavení.</string>\n  <string name=\"selection_warning_title\">Přestat používat výchozí nastavení?</string>\n  <string name=\"selection_warning_description\">Doporučuje se používat výchozí výběr záplat a možnosti. Jejich změna může vést k neočekávaným problémům.\\n\\nPřed přepínáním záplat musíte v rozšířeném nastavení zapnout \\\"Povolit změnu výběru záplat a možností\\\".</string>\n  <string name=\"universal_patch_warning_description\">Univerzální záplaty mají obecnější použití a nefungují tak spolehlivě jako záplaty zaměřené na konkrétní aplikace. Při jejich používání se můžete setkat s problémy.\\n\\nPřed použitím univerzálních záplat musíte v rozšířeném nastavení zapnout \\\"Povolit použití univerzálních záplat\\\".</string>\n  <string name=\"this_version\">Tato verze</string>\n  <string name=\"universal\">Libovolná aplikace</string>\n  <string name=\"search_patches\">Hledat záplaty</string>\n  <string name=\"app_version_not_compatible\">Tato záplata není kompatibilní s vybranou verzí aplikace (%1$s)\\n\\nJe kompatibilní pouze s následujícími verzemi: %2$s</string>\n  <string name=\"continue_with_version\">Pokračovat s touto verzí?</string>\n  <string name=\"version_not_compatible\">Ne všechny záplaty jsou kompatibilní s touto verzí (%s). Chcete přesto pokračovat?</string>\n  <string name=\"download_application\">Stáhnout aplikaci?</string>\n  <string name=\"app_not_installed\">Vybraná aplikace není nainstalovaná. Chcete ji stáhnout?</string>\n  <string name=\"failed_to_load_apk\">Nepodařilo se načíst APK</string>\n  <string name=\"split_apk_not_supported\">Rozdělené APK nelze opravit</string>\n  <string name=\"loading\">Načítání…</string>\n  <string name=\"not_installed\">Nenainstalováno</string>\n  <string name=\"installed\">Nainstalováno</string>\n  <string name=\"app_info\">Informace o aplikaci</string>\n  <string name=\"uninstall\">Odinstalovat</string>\n  <string name=\"unpatch\">Zrušit záplatu</string>\n  <string name=\"repatch\">Znovu záplatovat</string>\n  <string name=\"install_type\">Typ instalace</string>\n  <string name=\"package_name\">Název balíčku</string>\n  <string name=\"original_package_name\">Původní název balíčku</string>\n  <string name=\"applied_patches\">Použité záplaty</string>\n  <string name=\"view_applied_patches\">Zobrazit použité záplaty</string>\n  <string name=\"default_install\">Výchozí</string>\n  <string name=\"mount_install\">Připojit</string>\n  <string name=\"mounted\">Připojeno</string>\n  <string name=\"not_mounted\">Nepřipojeno</string>\n  <string name=\"mount\">Připojit</string>\n  <string name=\"unmount\">Odpojit</string>\n  <string name=\"failed_to_mount\">Nepodařilo se připojit: %s</string>\n  <string name=\"failed_to_unmount\">Nepodařilo se odpojit: %s</string>\n  <string name=\"unpatch_app\">Odzáplatovat aplikaci?</string>\n  <string name=\"unpatch_description\">Opravdu chcete tuto aplikaci odzáplatovat?</string>\n  <string name=\"downloader_invalid_version\">Downloader nestáhl správnou verzi</string>\n  <string name=\"downloader_app_not_found\">Downloader nenašel aplikaci</string>\n  <string name=\"downloader_error\">Chyba downloaderu: %s</string>\n  <string name=\"no_downloaders_installed\">Nejsou nainstalovány žádné stahovače aplikací!</string>\n  <string name=\"no_downloaders_trusted\">Žádným stahovačům aplikací nebylo důvěřováno! Zkontrolujte prosím svá nastavení.</string>\n  <string name=\"already_patched\">Již patchováno</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filtr</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Kompatibilita</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Balíčky</string>\n  <string name=\"patch_selector_sheet_actions_title\">Akce</string>\n  <string name=\"restore_default_selection\">Obnovit výchozí výběr</string>\n  <string name=\"deselect_all\">Zrušit výběr všech</string>\n  <string name=\"invert_selection\">Invertovat výběr</string>\n  <string name=\"deselect_all_except\">Zrušit výběr všech kromě %s</string>\n  <string name=\"scope_dialog_title\">Použít na</string>\n  <string name=\"scope_all_patches\">Všechny opravy</string>\n  <string name=\"scope_bundle_patches\">Pouze %s</string>\n  <string name=\"string_option_menu_description\">Další možnosti</string>\n  <string name=\"option_preset_custom_value\">Vlastní hodnota</string>\n  <string name=\"path_selector\">Vybrat z úložiště</string>\n  <string name=\"path_selector_parent_dir\">Předchozí adresář</string>\n  <string name=\"path_selector_dirs\">Adresáře</string>\n  <string name=\"path_selector_files\">Soubory</string>\n  <string name=\"show_password_field\">Zobrazit heslo</string>\n  <string name=\"hide_password_field\">Skrýt heslo</string>\n  <string name=\"installer\">Instalátor</string>\n  <string name=\"install_app\">Nainstalovat</string>\n  <string name=\"install_app_success\">Aplikace nainstalována</string>\n  <string name=\"install_app_fail\">Nepodařilo se nainstalovat aplikaci: %s</string>\n  <string name=\"reinstall_app_fail\">Nepodařilo se přeinstalovat aplikaci: %s</string>\n  <string name=\"uninstall_app_fail\">Nepodařilo se odinstalovat aplikaci: %s</string>\n  <string name=\"open_app\">Otevřít</string>\n  <string name=\"save_apk\">Uložit APK</string>\n  <string name=\"save_apk_success\">APK uloženo</string>\n  <string name=\"sign_fail\">Nepodařilo se podepsat APK: %s</string>\n  <string name=\"save_logs\">Uložit protokoly</string>\n  <string name=\"save_as_file\">Uložit do souborů</string>\n  <string name=\"export_patcher_logs\">Exportovat protokoly patcheru</string>\n  <string name=\"save_logs_success\">Protokoly uloženy</string>\n  <string name=\"downloader_activity_dialog_body\">K pokračování s tímto stahovačem je vyžadována interakce uživatele.</string>\n  <string name=\"select_install_type\">Vyberte typ instalace</string>\n  <string name=\"patcher_step_group_preparing\">Příprava</string>\n  <string name=\"patcher_step_load_patches\">Načíst záplaty</string>\n  <string name=\"patcher_step_unpack\">Přípravit patcher</string>\n  <string name=\"patcher_step_group_patching\">Záplatování</string>\n  <string name=\"patcher_step_group_saving\">Ukládání</string>\n  <string name=\"patcher_step_write_patched\">Zapsat záplatovaný soubor APK</string>\n  <string name=\"patcher_step_sign_apk\">Podepsat záplatovaný soubor APK</string>\n  <string name=\"patcher_notification_title\">Probíhá patchování…</string>\n  <string name=\"patcher_notification_text\">Klepnutím se vrátíte k záplatovači</string>\n  <string name=\"patcher_stop_confirm_title\">Zastavit záplatovač</string>\n  <string name=\"patcher_stop_confirm_description\">Opravdu chcete zastavit proces patchování?</string>\n  <string name=\"patcher_install_in_progress\">Instalace probíhá. Počkejte prosím</string>\n  <string name=\"execute_patches\">Spustit záplaty</string>\n  <string name=\"executing_patch\">Spustit %s</string>\n  <string name=\"failed_to_execute_patch\">Nepodařilo se spustit %s</string>\n  <string name=\"step_completed\">dokončeno</string>\n  <string name=\"step_failed\">selhalo</string>\n  <string name=\"step_running\">běží</string>\n  <string name=\"step_waiting\">čeká se</string>\n  <string name=\"expand_content\">rozbalit</string>\n  <string name=\"collapse_content\">sbalit</string>\n  <string name=\"drag_handle\">změnit pořadí</string>\n  <string name=\"more\">Více</string>\n  <string name=\"less\">Méně</string>\n  <string name=\"continue_\">Pokračovat</string>\n  <string name=\"dismiss\">Zavřít</string>\n  <string name=\"view_announcement\">Zobrazit oznámení</string>\n  <string name=\"permanent_dismiss\">Toto již nezobrazovat</string>\n  <string name=\"donate\">Darovat</string>\n  <string name=\"website\">Webová stránka</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Kontakt</string>\n  <string name=\"license\">Licence</string>\n  <string name=\"source\">Zdroj</string>\n  <string name=\"repository\">Úložiště</string>\n  <string name=\"bundle_information_by_author\">Od %1$s</string>\n  <string name=\"version\">Verze</string>\n  <string name=\"version_compatibility_warning\">Vybraná verze může být nekompatibilní s vybranými záplatami</string>\n  <string name=\"submit_feedback\">Odeslat problém nebo zpětnou vazbu</string>\n  <string name=\"submit_feedback_description\">Pomozte nám vylepšit tuto aplikaci</string>\n  <string name=\"developer_options\">Možnosti pro vývojáře</string>\n  <string name=\"developer_options_description\">Možnosti pro ladění problémů</string>\n  <string name=\"patches_update_success\">Aktualizace úspěšná</string>\n  <string name=\"patches_update_unavailable\">Není dostupná žádná aktualizace</string>\n  <string name=\"view_patches\">Zobrazit záplaty</string>\n  <string name=\"patches_view_any_version\">Jakákoli verze</string>\n  <string name=\"patches_view_any_package\">Jakýkoli balíček</string>\n  <string name=\"patches_delete_single_dialog_description\">Opravdu chcete smazat \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Opravdu chcete smazat vybrané záplaty?</string>\n  <string name=\"announcements\">Oznámení</string>\n  <string name=\"archive\">Archiv</string>\n  <string name=\"about_revanced_manager\">O aplikaci ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager je aplikace pro Android, která používá ReVanced Patcher k záplatování aplikací pro Android. Umožňuje stahovat a záplatovat aplikace vlastními záplatami a spravovat proces záplatování.</string>\n  <string name=\"developer_options_taps\">%d klepnutí zbývá</string>\n  <string name=\"developer_options_enabled\">Možnosti pro vývojáře povoleny</string>\n  <string name=\"developer_options_already_enabled\">Možnosti pro vývojáře jsou již povoleny</string>\n  <string name=\"update_available\">Je dostupná aktualizace</string>\n  <string name=\"current_version\">Aktuální verze: %s</string>\n  <string name=\"new_version\">Nová verze: %s</string>\n  <string name=\"ready_to_install_update\">Připraveno k instalaci aktualizace</string>\n  <string name=\"update_completed\">Aktualizace nainstalována</string>\n  <string name=\"install_update_manager_failed\">Nepodařilo se nainstalovat aktualizaci</string>\n  <string name=\"manual_update_check\">Zkontrolovat aktualizace</string>\n  <string name=\"view_update\">Zobrazit aktualizaci</string>\n  <string name=\"manual_update_check_description\">Ručně zkontrolovat aktualizace</string>\n  <string name=\"update_checking_manager\">Zkontrolovat aktualizace při spuštění</string>\n  <string name=\"update_checking_manager_description\">Zkontrolovat nové verze ReVanced Manager při spuštění aplikace</string>\n  <string name=\"update_checking_downloader\">Zkontrolovat aktualizace stahovačů ReVanced při spuštění</string>\n  <string name=\"update_checking_downloader_description\">Kontrolovat aktualizace nainstalovaných stahovačů ReVanced při spuštění aplikace</string>\n  <string name=\"manager_prereleases\">Použít předběžné verze</string>\n  <string name=\"manager_prereleases_description\">Použít předběžné verze ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Předběžné verze mohou být nestabilní a obsahovat chyby. Můžete se setkat s pády, ztrátou dat nebo jinými neočekávanými problémy. Povolte to pouze, pokud jste si vědomi těchto rizik.</string>\n  <string name=\"changelog\">Zobrazit protokol změn</string>\n  <string name=\"changelog_loading\">Načítání protokolu změn</string>\n  <string name=\"changelog_download_fail\">Nepodařilo se stáhnout protokol změn: %s</string>\n  <string name=\"changelog_description\">Podívejte se na nejnovější změny v této aktualizaci</string>\n  <string name=\"battery_optimization_notification\">Optimalizace baterie musí být vypnuty, aby ReVanced Manager správně fungoval na pozadí. Klikněte zde pro vypnutí optimalizací.</string>\n  <string name=\"installing_manager_update\">Instalování aktualizace…</string>\n  <string name=\"downloading_manager_update\">Stahování aktualizace…</string>\n  <string name=\"download_manager_failed\">Nepodařilo se stáhnout aktualizaci: %s</string>\n  <string name=\"cancel\">Zrušit</string>\n  <string name=\"save\">Uložit</string>\n  <string name=\"save_with_count\">Uložit (%1$s)</string>\n  <string name=\"update\">Aktualizovat</string>\n  <string name=\"empty\">Prázdné</string>\n  <string name=\"installing_message\">Klepněte na <b>Aktualizovat</b>, když budete vyzváni.\\nReVanced Manager se při aktualizaci zavře.</string>\n  <string name=\"no_changelogs_found\">Nebyly nalezeny žádné protokoly změn</string>\n  <string name=\"just_now\">Právě teď</string>\n  <string name=\"minutes_ago\">před %s min</string>\n  <string name=\"hours_ago\">před %s h</string>\n  <string name=\"days_ago\">před %s d</string>\n  <string name=\"invalid_date\">Neplatné datum</string>\n  <string name=\"disable_battery_optimization\">Zakázat optimalizaci baterie</string>\n  <string name=\"input_dialog_value_invalid\">Neplatná hodnota</string>\n  <string name=\"option_required\">Tato možnost je povinná</string>\n  <string name=\"required_options_screen\">Požadované možnosti</string>\n  <string name=\"failed_to_check_updates\">Nepodařilo se zkontrolovat aktualizace: %s</string>\n  <string name=\"no_update_available\">Není dostupná žádná aktualizace</string>\n  <string name=\"no_announcements_found\">Nebyla nalezena žádná oznámení</string>\n  <string name=\"update_check\">Kontrola aktualizací…</string>\n  <string name=\"dismiss_temporary\">Teď ne</string>\n  <string name=\"update_available_dialog_description\">Je dostupná nová verze ReVanced Manager (%s).</string>\n  <string name=\"failed_to_download_update\">Nepodařilo se stáhnout aktualizaci: %s</string>\n  <string name=\"download\">Stáhnout</string>\n  <string name=\"download_confirmation_metered\">Momentálně jste připojeni k síti s omezeným objemem dat a mohou být účtovány poplatky za data od vašeho poskytovatele služeb.\\n\\nChcete přesto pokračovat?</string>\n  <string name=\"download_update_confirmation\">Stáhnout aktualizaci?</string>\n  <string name=\"no_contributors_found\">Nebyli nalezeni žádní přispěvatelé</string>\n  <string name=\"select\">Vybrat</string>\n  <string name=\"select_deselect_all\">Vybrat nebo zrušit výběr všech</string>\n  <string name=\"select_patches_type_dialog_description\">Přidat nové záplaty z URL nebo místních souborů</string>\n  <string name=\"local_patches_description\">Přidat záplaty z místního úložiště.</string>\n  <string name=\"remote_patches_description\">Přidat záplaty z URL. Záplaty se mohou automaticky aktualizovat.</string>\n  <string name=\"recommended\">Doporučeno</string>\n  <string name=\"installation_failed_dialog_title\">Instalace selhala</string>\n  <string name=\"installation_cancelled_dialog_title\">Instalace zrušena</string>\n  <string name=\"installation_blocked_dialog_title\">Instalace blokována</string>\n  <string name=\"installation_conflict_dialog_title\">Konflikt instalace</string>\n  <string name=\"installation_incompatible_dialog_title\">Instalace nekompatibilní</string>\n  <string name=\"installation_invalid_dialog_title\">Instalace neplatná</string>\n  <string name=\"installation_storage_issue_dialog_title\">Nedostatek místa v úložišti</string>\n  <string name=\"installation_timeout_dialog_title\">Časový limit instalace vypršel</string>\n  <string name=\"installation_failed_description\">Instalace selhala z neznámého důvodu. Zkusit znovu?</string>\n  <string name=\"installation_aborted_description\">Instalace byla ručně zrušena. Zkusit znovu?</string>\n  <string name=\"installation_blocked_description\">Instalace byla zablokována. Zkontrolujte nastavení zabezpečení vašeho zařízení a zkuste to znovu.</string>\n  <string name=\"installation_conflict_description\">Instalaci zabránila existující instalace aplikace. Odinstalovat nainstalovanou aplikaci a zkusit to znovu?</string>\n  <string name=\"installation_incompatible_description\">Aplikace je s tímto zařízením nekompatibilní. Použijte APK, který je s tímto zařízením kompatibilní, a zkuste to znovu.</string>\n  <string name=\"installation_invalid_description\">Aplikace je neplatná. Odinstalovat aplikaci a zkusit to znovu?</string>\n  <string name=\"installation_storage_issue_description\">Aplikaci se nepodařilo nainstalovat kvůli nedostatku místa v úložišti. Uvolněte místo a zkuste to znovu.</string>\n  <string name=\"installation_timeout_description\">Instalace trvala příliš dlouho. Zkusit znovu?</string>\n  <string name=\"reinstall\">Přeinstalovat</string>\n  <string name=\"show\">Zobrazit</string>\n  <string name=\"debugging\">Ladění</string>\n  <string name=\"about_device\">O zařízení</string>\n  <string name=\"enter_url\">Zadat URL</string>\n  <string name=\"next\">Další</string>\n  <string name=\"auto_update\">Automatická aktualizace</string>\n  <string name=\"add_patches\">Přidat záplaty</string>\n  <string name=\"auto_update_description\">Automaticky aktualizovat, když je dostupná nová verze</string>\n  <string name=\"patches_prereleases\">Použít předběžné verze</string>\n  <string name=\"patches_prereleases_description\">Použít předběžné verze %s</string>\n  <string name=\"patches_url\">URL záplat</string>\n  <string name=\"incompatible_patches_dialog\">Tyto záplaty nejsou kompatibilní s vybranou verzí aplikace (%1$s).\\n\\nKliknutím na záplaty zobrazíte další podrobnosti.</string>\n  <string name=\"incompatible_patch\">Nekompatibilní záplata</string>\n  <string name=\"any_version\">Libovolný</string>\n  <string name=\"never_show_again\">Už nikdy nezobrazovat</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Zobrazit zprávu o aktualizaci při spuštění</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Zobrazit vyskakovací oznámení, kdykoli je při spuštění dostupná nová aktualizace</string>\n  <string name=\"failed_to_import_keystore\">Nepodařilo se importovat úložiště klíčů</string>\n  <string name=\"export\">Exportovat</string>\n  <string name=\"confirm\">Potvrdit</string>\n  <string name=\"new_announcement\">Nové oznámení:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d záplata</item>\n    <item quantity=\"few\">%d záplaty</item>\n    <item quantity=\"many\">%d záplat</item>\n    <item quantity=\"other\">%d záplat</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Spustit %d záplatu</item>\n    <item quantity=\"few\">Spustit %d záplaty</item>\n    <item quantity=\"many\">Spustit %d záplat</item>\n    <item quantity=\"other\">Spustit %d záplat</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d vybráno</item>\n    <item quantity=\"few\">%d vybrané</item>\n    <item quantity=\"many\">%d vybraných</item>\n    <item quantity=\"other\">%d vybraných</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-da-rDK/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Patcher</string>\n  <string name=\"patches\">Patches</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Manager</string>\n  <string name=\"onboarding_welcome_to\">Velkommen til</string>\n  <string name=\"onboarding_welcome_back\">Hej! Det er den nye</string>\n  <string name=\"onboarding_apps_subtitle\">Du kan vælge en app, der skal patches nu, eller gøre det senere</string>\n  <string name=\"onboarding_apps_network_error\">Kunne ikke indlæse patches, fordi netværket er utilgængeligt eller ustabilt. Opret forbindelse til et stabilt netværk, og prøv igen.</string>\n  <string name=\"onboarding_updates_subtitle\">Konfigurer automatiske opdateringer for at holde ReVanced Manager og patches opdaterede</string>\n  <string name=\"banner_sources_not_downloaded_description\">Patches og downloadere kunne ikke downloades under opsætningen. Tryk på opdater for at downloade dem.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager vil oprette forbindelse til %s for at downloade indledende versioner, hvis din enhed er forbundet til internettet.</string>\n  <string name=\"retry\">Prøv igen</string>\n  <string name=\"onboarding_skip\">Spring over for nu</string>\n  <string name=\"onboarding_recommended_version\">Anbefalet version: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Spring tilladelser over?</string>\n  <string name=\"onboarding_permissions_skip_description\">Uden de nødvendige tilladelser fungerer nogle funktioner muligvis ikke korrekt. Du kan give dem senere i appens indstillinger.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Spring alligevel over</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager har brug for nogle tilladelser for at fungere korrekt</string>\n  <string name=\"permission_install_apps\">Installer ukendte apps</string>\n  <string name=\"permission_install_apps_description\">Påkrævet for at installere patched applikationer</string>\n  <string name=\"permission_notifications\">Notifikationer</string>\n  <string name=\"permission_notifications_description\">Tillader uafbrudt patching i baggrunden</string>\n  <string name=\"permission_battery\">Batterioptimering</string>\n  <string name=\"permission_battery_description\">Forhindrer patching i at blive afbrudt i baggrunden</string>\n  <string name=\"permission_grant\">Giv tilladelse</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager downloader-vært</string>\n  <string name=\"downloader_host_permission_description\">Bruges til at kontrollere adgang til ReVanced Manager-downloadere. Kun ReVanced Manager har dette.</string>\n  <string name=\"toast_copied_to_clipboard\">Kopieret!</string>\n  <string name=\"copy_to_clipboard\">Kopiér til udklipsholder</string>\n  <string name=\"dashboard\">Dashboard</string>\n  <string name=\"settings\">Indstillinger</string>\n  <string name=\"select_app\">Vælg en app</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d valgt</string>\n  <string name=\"fab_patch_app\">Patch en app</string>\n  <string name=\"fab_add_patches\">Tilføj patches</string>\n  <string name=\"new_downloader_notification\">Nye downloader(e) tilgængelige. Klik her for at konfigurere dem.</string>\n  <string name=\"unsupported_architecture_warning\">Patching på denne enhedsarkitektur understøttes ikke og vil sandsynligvis mislykkes.</string>\n  <string name=\"import_\">Importér</string>\n  <string name=\"import_patches\">Importér patches</string>\n  <string name=\"file_field_set\">Valgt</string>\n  <string name=\"file_field_not_set\">Ikke valgt</string>\n  <string name=\"field_not_set\">Ikke indstillet</string>\n  <string name=\"patches_missing\">Mangler</string>\n  <string name=\"patches_error\">Fejl</string>\n  <string name=\"patches_error_description\">Patches kunne ikke indlæses. Klik for at se fejlen</string>\n  <string name=\"patches_not_downloaded\">Patches er ikke blevet downloadet.</string>\n  <string name=\"patches_name_default\">Patches</string>\n  <string name=\"patches_name_fallback\">Unavngivet</string>\n  <string name=\"android_11_bug_dialog_title\">Android 11-fejl</string>\n  <string name=\"android_11_bug_dialog_description\">App-installationstilladelsen skal gives på forhånd for at undgå en fejl i Android 11-systemet, som vil påvirke brugeroplevelsen negativt.</string>\n  <string name=\"no_network_toast\">Ingen internetforbindelse tilgængelig</string>\n  <string name=\"selected_app_meta_any_version\">Enhver tilgængelig version</string>\n  <string name=\"app_source_dialog_title\">Vælg kilde</string>\n  <string name=\"app_source_dialog_option_auto\">Automatisk</string>\n  <string name=\"app_source_dialog_option_auto_description\">Brug installeret app, derefter downloadet APK, derefter tilgængelige downloadere</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Ingen kompatibel app eller downloadere tilgængelige</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Monterede apps kan ikke patches igen uden root-adgang</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Version %s stemmer ikke overens med den foreslåede version</string>\n  <string name=\"patch_item_description\">Start patching af applikationen</string>\n  <string name=\"patch_selector_item\">Vælg patches</string>\n  <string name=\"patch_selector_item_description\">%d patches valgt</string>\n  <string name=\"patch_selection_changed_warning\">Valg af patches er blevet ændret</string>\n  <string name=\"no_patches_selected\">Ingen patches valgt</string>\n  <string name=\"network_unavailable_warning\">Din enhed er ikke forbundet til internettet. Download vil mislykkes senere.</string>\n  <string name=\"network_metered_warning\">Du er i øjeblikket på en forbrugsbaseret forbindelse. Datagebyrer fra din tjenesteudbyder kan forekomme.</string>\n  <string name=\"apk_source_selector_item\">Vælg APK-kilde</string>\n  <string name=\"apk_source_auto\">Automatisk</string>\n  <string name=\"apk_source_auto_installed\">Automatisk · Bruger installeret APK</string>\n  <string name=\"apk_source_auto_downloaded\">Automatisk · Bruger downloadet APK</string>\n  <string name=\"apk_source_auto_downloader\">Automatisk · Bruger tilgængelige downloadere</string>\n  <string name=\"apk_source_auto_storage\">Automatisk · Vælg fra lager</string>\n  <string name=\"apk_source_downloader\">Bruger %s</string>\n  <string name=\"apk_source_installed\">Bruger installeret APK</string>\n  <string name=\"apk_source_local\">Bruger en lokal APK-fil</string>\n  <string name=\"apk_source_downloaded\">Allerede downloadet</string>\n  <string name=\"legacy_import_failed\">Kunne ikke importere ældre indstillinger</string>\n  <string name=\"auto_updates_dialog_title\">Konfigurer opdateringer</string>\n  <string name=\"auto_updates_dialog_description\">Vil du have ReVanced Manager til periodisk at søge efter opdateringer for følgende komponenter?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced-patches</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Downloadere</string>\n  <string name=\"auto_updates_dialog_note\">Disse indstillinger kan ændres senere.\n\n    ReVanced Manager vil oprette forbindelse til %s for at downloade indledende versioner, hvis din enhed er forbundet til internettet.</string>\n  <string name=\"announcements_filter_tag\">Filtrer efter tag</string>\n  <string name=\"announcements_show_archived\">Vis arkiverede</string>\n  <string name=\"general\">Generelt</string>\n  <string name=\"general_description\">Sprog, tema, dynamisk farve</string>\n  <string name=\"updates\">Opdateringer</string>\n  <string name=\"updates_description\">Søg efter opdateringer og se ændringslog</string>\n  <string name=\"downloads\">Downloads</string>\n  <string name=\"downloads_description\">Downloadere og downloadede apps</string>\n  <string name=\"import_export\">Importér &amp; eksportér</string>\n  <string name=\"import_export_description\">Keystore, patch-muligheder og -valg</string>\n  <string name=\"advanced\">Avanceret</string>\n  <string name=\"advanced_description\">API URL, hukommelsesgrænse, fejlfinding</string>\n  <string name=\"safeguards_toggled_warning\">Sikkerhedsforanstaltninger er blevet slået til/fra</string>\n  <string name=\"about\">Om</string>\n  <string name=\"about_app_name\">Om %1$s</string>\n  <string name=\"opensource_licenses\">Open source-licenser</string>\n  <string name=\"opensource_licenses_description\">Se alle de biblioteker, der er brugt til at lave denne applikation</string>\n  <string name=\"contributors\">Bidragsydere</string>\n  <string name=\"contributors_description\">Se bidragsydere til ReVanced</string>\n  <string name=\"dynamic_color\">Dynamisk farve</string>\n  <string name=\"dynamic_color_description\">Tilpas farver til tapetet</string>\n  <string name=\"pure_black_theme\">Rent sort tema</string>\n  <string name=\"pure_black_theme_description\">Brug rent sorte baggrunde til mørkt tema</string>\n  <string name=\"theme\">Tema</string>\n  <string name=\"theme_description\">Vælg mellem lyst eller mørkt tema</string>\n  <string name=\"language\">Sprog</string>\n  <string name=\"language_description\">Vælg appens visningssprog</string>\n  <string name=\"language_system_default\">Systemstandard</string>\n  <string name=\"search_languages\">Søg sprog…</string>\n  <string name=\"safeguards\">Sikkerhedsforanstaltninger</string>\n  <string name=\"patch_compat_check\">Deaktiver kontrol af versionskompatibilitet</string>\n  <string name=\"patch_compat_check_description\">Begræns ikke patches til kompatible app-versioner</string>\n  <string name=\"patch_compat_check_confirmation\">Valg af inkompatible patches kan resultere i en ødelagt app.\n\nVil du fortsætte alligevel?</string>\n  <string name=\"suggested_version_safeguard\">Kræv foreslået app-version</string>\n  <string name=\"suggested_version_safeguard_description\">Håndhæv valg af den foreslåede app-version</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Valg af en app, der ikke er den foreslåede version, kan forårsage uventede problemer.\n\nVil du fortsætte alligevel?</string>\n  <string name=\"patch_selection_safeguard\">Tillad ændring af patch-valg og -muligheder</string>\n  <string name=\"patch_selection_safeguard_description\">Forhindr ikke valg eller fravælgelse af patches og tilpasning af muligheder</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Ændring af valget af patches kan forårsage uventede problemer.\n\nAktiver alligevel?</string>\n  <string name=\"universal_patches_safeguard\">Tillad brug af universelle patches</string>\n  <string name=\"universal_patches_safeguard_description\">Forhindr ikke brug af universelle patches</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Universelle patches er ikke testet lige så godt som dem, der er målrettet specifikke apps.\n\nAktiver alligevel?</string>\n  <string name=\"keystore\">Nøglelager</string>\n  <string name=\"patches_selections\">Patch-valg</string>\n  <string name=\"import_keystore\">Importér keystore</string>\n  <string name=\"import_keystore_description\">Importér en brugerdefineret keystore</string>\n  <string name=\"import_keystore_dialog_title\">Indtast keystore-oplysninger</string>\n  <string name=\"import_keystore_dialog_description\">Du skal indtaste keystorens oplysninger for at importere den.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Brugernavn (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Adgangskode</string>\n  <string name=\"import_keystore_dialog_button\">Importér</string>\n  <string name=\"import_keystore_wrong_credentials\">Forkerte keystore-oplysninger</string>\n  <string name=\"import_keystore_success\">Importeret keystore</string>\n  <string name=\"export_keystore\">Eksportér keystore</string>\n  <string name=\"export_keystore_description\">Eksportér den nuværende keystore</string>\n  <string name=\"export_keystore_unavailable\">Ingen keystore at eksportere</string>\n  <string name=\"export_keystore_success\">Eksporteret keystore</string>\n  <string name=\"regenerate_keystore\">Regenerér keystore</string>\n  <string name=\"regenerate_keystore_description\">Generér en ny keystore</string>\n  <string name=\"regenerate_keystore_dialog_description\">Du er ved at nulstille din keystore, som manageren vil bruge under patchingprocessen.\n\nDu vil ikke kunne opdatere tidligere installerede apps fra denne kilde.</string>\n  <string name=\"regenerate_keystore_success\">Keystore er blevet udskiftet med succes</string>\n  <string name=\"import_patch_selection\">Importér patch-valg</string>\n  <string name=\"import_patch_selection_description\">Importér patch-valg fra en JSON-fil</string>\n  <string name=\"import_patch_selection_fail\">Kunne ikke importere patch-valg: %s</string>\n  <string name=\"import_patch_selection_success\">Importeret patch-valg</string>\n  <string name=\"select_bundle_for_import\">Vælg bundt at importere til</string>\n  <string name=\"export_patch_selection\">Eksportér patch-valg</string>\n  <string name=\"export_patch_selection_description\">Eksportér patch-valg til en JSON-fil</string>\n  <string name=\"export_patch_selection_fail\">Kunne ikke eksportere patch-valg: %s</string>\n  <string name=\"export_patch_selection_success\">Eksporteret patch-valg</string>\n  <string name=\"select_bundle_for_export\">Vælg bundt at eksportere fra</string>\n  <string name=\"patch_selection_packages\">Apps med gemte valg</string>\n  <string name=\"patch_selection_entries\">Samlet antal valgte patches</string>\n  <string name=\"reset_configuration\">Nulstil konfiguration</string>\n  <string name=\"reset_patch_selection\">Patch-valg</string>\n  <string name=\"reset_patch_selection_description\">Nulstil det gemte patch-valg</string>\n  <string name=\"reset_patch_options\">Patch-indstillinger</string>\n  <string name=\"reset_patch_options_description\">Nulstil de gemte patch-muligheder</string>\n  <string name=\"reset_patch_selection_success\">Patch-valg er blevet nulstillet</string>\n  <string name=\"patch_selection_reset_all\">Nulstil patch-valg globalt</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Du er ved at nulstille alle patch-valg. Du skal manuelt vælge hver patch igen.</string>\n  <string name=\"patch_selection_reset_all_description\">Nulstiller alle patch-valg</string>\n  <string name=\"patch_selection_reset_package\">Nulstil patch-valg for app</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Du er ved at nulstille patch-valget for appen \\\"%s\\\". Du skal manuelt vælge hver patch igen.</string>\n  <string name=\"patch_selection_reset_package_description\">Nulstiller patch-valg for en enkelt app</string>\n  <string name=\"patch_selection_reset_patches\">Nulstil patch-valg (enkelt)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Du er ved at nulstille patch-valget for \\\"%s\\\". Du skal manuelt vælge hver patch igen.</string>\n  <string name=\"patch_selection_reset_patches_description\">Nulstiller patch-valget for en specifik samling af patches</string>\n  <string name=\"patch_options_reset_package\">Nulstil patch-indstillinger for app</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Du er ved at nulstille patch-indstillingerne for appen \\\"%s\\\". Du skal anvende hver indstilling igen.</string>\n  <string name=\"patch_options_reset_package_description\">Nulstiller patch-indstillingerne for en enkelt app</string>\n  <string name=\"patch_options_reset_patches\">Nulstil patch-indstillinger (enkelt)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Du er ved at nulstille patch-indstillingerne for \\\"%s\\\". Du skal anvende hver indstilling igen.</string>\n  <string name=\"patch_options_reset_patches_description\">Nulstiller patch-indstillingerne for en specifik samling af patches</string>\n  <string name=\"patch_options_reset_all\">Nulstil patch-indstillinger globalt</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Du er ved at nulstille alle patch-indstillinger. Du skal anvende hver indstilling igen.</string>\n  <string name=\"patch_options_reset_all_description\">Nulstiller alle patch-indstillinger</string>\n  <string name=\"downloaders\">Downloadere</string>\n  <string name=\"downloader_prereleases\">Brug forhåndsversioner</string>\n  <string name=\"downloader_prereleases_description\">Brug forhåndsversioner af den primære downloader</string>\n  <string name=\"downloader_state_loaded\">Indlæst</string>\n  <string name=\"downloader_state_failed\">Kunne ikke indlæses. Klik for flere detaljer</string>\n  <string name=\"downloader_state_missing\">Mangler</string>\n  <string name=\"downloader_delete_apps_title\">Slet valgte apps</string>\n  <string name=\"downloader_delete_apps_description\">Er du sikker på, at du vil slette de valgte apps?</string>\n  <string name=\"downloader_delete_single_description\">Er du sikker på, at du vil slette \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Ingen downloadede apps fundet.</string>\n  <string name=\"downloader_settings_no_apps_description\">Apps downloadet via ReVanced Manager vil blive vist her.</string>\n  <string name=\"downloader_url\">Downloader-URL</string>\n  <string name=\"downloader_add\">Tilføj downloader</string>\n  <string name=\"select_downloader_type_dialog_description\">Tilføj nye downloadere fra URL eller lokale filer</string>\n  <string name=\"local_downloaders_description\">Tilføj downloadere fra lokalt lager.</string>\n  <string name=\"remote_downloaders_description\">Tilføj downloadere fra URL. Kan opdateres automatisk.</string>\n  <string name=\"install_revanced_downloaders\">Installer downloadere for at få apps direkte i ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Installer ReVanced-downloadere</string>\n  <string name=\"cancel_downloader_install_title\">Annuller installation af downloadere?</string>\n  <string name=\"cancel_downloader_install_description\">En installation af downloadere er i gang. Hvis du forlader nu, vil downloadet blive annulleret.</string>\n  <string name=\"downloader_sources_unavailable_title\">Disse downloadere mangler</string>\n  <string name=\"downloader_sources_unavailable_description\">Klik på opdateringsknappen for at rette det.</string>\n  <string name=\"downloader_update_failed\">Kunne ikke opdatere downloader: %s</string>\n  <string name=\"downloader_replace_fail\">Kunne ikke importere downloader: %s</string>\n  <string name=\"search_apps\">Søg apps…</string>\n  <string name=\"loading_body\">Indlæser…</string>\n  <string name=\"downloading_patches\">Downloader patches…</string>\n  <string name=\"options\">Indstillinger</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Ja</string>\n  <string name=\"no\">Nej</string>\n  <string name=\"edit\">Rediger</string>\n  <string name=\"dialog_input_placeholder\">Værdi</string>\n  <string name=\"reset\">Nulstil</string>\n  <string name=\"share\">Del</string>\n  <string name=\"patch\">Patch</string>\n  <string name=\"select_from_storage\">Vælg fra lager</string>\n  <string name=\"select_from_storage_description\">Vælg en APK-fil fra lageret ved hjælp af filvælger.</string>\n  <string name=\"suggested_version_info\">Foreslået version: %s</string>\n  <string name=\"type_anything\">Skriv noget for at fortsætte</string>\n  <string name=\"search\">Søg patches…</string>\n  <string name=\"apply\">Anvend</string>\n  <string name=\"help\">Hjælp</string>\n  <string name=\"back\">Tilbage</string>\n  <string name=\"warning\">Advarsel</string>\n  <string name=\"add\">Tilføj</string>\n  <string name=\"enable\">Aktiver</string>\n  <string name=\"disable\">Deaktivér</string>\n  <string name=\"close\">Luk</string>\n  <string name=\"clear\">Ryd</string>\n  <string name=\"system\">System</string>\n  <string name=\"light\">Lys</string>\n  <string name=\"dark\">Mørk</string>\n  <string name=\"appearance\">Udseende</string>\n  <string name=\"networking\">Netværk</string>\n  <string name=\"allow_metered_networks\">Tillad forbrugsbaserede netværk</string>\n  <string name=\"allow_metered_networks_description\">Tillader automatiske opdateringer på forbrugsbaserede netværk.\\nApplikationen kan stadig advare om forbrugsbaserede netværk ved manuelle handlinger.</string>\n  <string name=\"downloaded_apps\">Downloadede apps</string>\n  <string name=\"process_runtime\">Kør Patcher i en anden proces (eksperimentel)</string>\n  <string name=\"process_runtime_description\">Dette er hurtigere og giver Patcher mulighed for at bruge mere hukommelse</string>\n  <string name=\"process_runtime_memory_limit\">Patcher-proceshukommelsesgrænse</string>\n  <string name=\"process_runtime_memory_limit_description\">Den maksimale mængde hukommelse, som Patcher-processen kan bruge</string>\n  <string name=\"debug_logs_export\">Eksporter fejlfindingslogfiler</string>\n  <string name=\"debug_logs_export_read_failed\">Kunne ikke læse logfiler (afslutningskode %d)</string>\n  <string name=\"debug_logs_export_failed\">Kunne ikke eksportere logfiler</string>\n  <string name=\"debug_logs_export_success\">Eksporterede logfiler</string>\n  <string name=\"api_url\">API URL</string>\n  <string name=\"api_url_description\">API\\'en bruges til at downloade nødvendige filer</string>\n  <string name=\"api_url_dialog_title\">Skift API URL</string>\n  <string name=\"api_url_dialog_description\">Skift API URL for ReVanced Manager. ReVanced Manager bruger API\\'en til at downloade patches og opdateringer.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager opretter forbindelse til API\\'en for at downloade patches og opdateringer. Sørg for, at du stoler på den.</string>\n  <string name=\"api_url_dialog_save\">Indstil</string>\n  <string name=\"api_url_dialog_reset\">Nulstil API URL</string>\n  <string name=\"device\">Enhed</string>\n  <string name=\"device_android_version\">Android-version</string>\n  <string name=\"device_model\">Model</string>\n  <string name=\"device_architectures\">CPU-arkitekturer</string>\n  <string name=\"device_memory_limit\">Hukommelsesgrænser</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normal) - %2$dMB (Stor)</string>\n  <string name=\"patches_force_download\">Tving download af alle patches</string>\n  <string name=\"patches_reset\">Nulstil patches</string>\n  <string name=\"reset_onboarding\">Nulstil onboarding</string>\n  <string name=\"reset_onboarding_description\">Vis onboarding-skærmen ved næste app-start</string>\n  <string name=\"patching\">Patching</string>\n  <string name=\"signing\">Signering</string>\n  <string name=\"storage\">Lager</string>\n  <string name=\"no_patch_found\">Ingen patch fundet. Tjek dine patches</string>\n  <string name=\"tab_apps\">Apps</string>\n  <string name=\"tab_patches\">Patches</string>\n  <string name=\"delete\">Slet</string>\n  <string name=\"refresh\">Opdater</string>\n  <string name=\"continue_anyways\">Fortsæt alligevel</string>\n  <string name=\"download_another_version\">Download en anden version</string>\n  <string name=\"download_app\">Download app</string>\n  <string name=\"download_apk\">Download APK-fil</string>\n  <string name=\"patches_download_fail\">Kunne ikke downloade patches: %s</string>\n  <string name=\"api_not_working_title\">API-tjenesten er nede i øjeblikket</string>\n  <string name=\"api_not_working_description\">Nogle funktioner kan være påvirket. Tjek din forbindelse eller API-URL i indstillingerne.</string>\n  <string name=\"patches_replace_fail\">Kunne ikke importere patches: %s</string>\n  <string name=\"no_patched_apps_found\">Ingen patched apps fundet</string>\n  <string name=\"no_patched_apps_description\">Du har i øjeblikket ingen patched apps, som vi kender til. Lav om på det ved at patche din første app!</string>\n  <string name=\"patched_apps_section_title\">Rettede apps</string>\n  <string name=\"patchable_apps_section_title\">Apps, der kan rettes</string>\n  <string name=\"no_patches_found\">Ingen patches fundet</string>\n  <string name=\"no_patches_description\">Du har ingen patches endnu. Tilføj patches ved at trykke på knappen nedenfor!</string>\n  <string name=\"tap_on_patches\">Tryk på patches for at få mere information om dem</string>\n  <string name=\"patches_selected\">%s valgt</string>\n  <string name=\"incompatible_patches\">Inkompatible patches</string>\n  <string name=\"universal_patches\">Universelle patches</string>\n  <string name=\"patch_selection_reset_toast\">Patch-valg og -indstillinger er blevet nulstillet til anbefalede standarder</string>\n  <string name=\"patch_options_reset_toast\">Patch-indstillinger er blevet nulstillet</string>\n  <string name=\"non_suggested_version_warning_title\">Ikke-foreslået version</string>\n  <string name=\"non_suggested_version_warning_description\">Den valgte app-version stemmer ikke overens med den foreslåede version.\\nBrug venligst den foreslåede version: %s\\n\\nFor at fortsætte alligevel skal du deaktivere \\\"Kræv foreslået app-version\\\" i de avancerede indstillinger.</string>\n  <string name=\"selection_warning_title\">Stop brug af standarder?</string>\n  <string name=\"selection_warning_description\">Det anbefales at bruge standard patch-valg og -indstillinger. Ændring af dem kan resultere i uventede problemer.\\n\\nDu skal aktivere \\\"Tillad ændring af patch-valg og -indstillinger\\\" i de avancerede indstillinger, før du skifter patches.</string>\n  <string name=\"universal_patch_warning_description\">Universelle patches har en mere generaliseret anvendelse og fungerer ikke lige så pålideligt som patches, der er målrettet specifikke apps. Du kan støde på problemer, når du bruger dem.\\n\\nDu skal aktivere \\\"Tillad brug af universelle patches\\\" i de avancerede indstillinger, før du bruger universelle patches.</string>\n  <string name=\"this_version\">Denne version</string>\n  <string name=\"universal\">Enhver app</string>\n  <string name=\"search_patches\">Søg patches</string>\n  <string name=\"app_version_not_compatible\">Denne patch er ikke kompatibel med den valgte app-version (%1$s)\\n\\nDen er kun kompatibel med følgende version(er): %2$s</string>\n  <string name=\"continue_with_version\">Fortsæt med denne version?</string>\n  <string name=\"version_not_compatible\">Ikke alle patches er kompatible med denne version (%s). Vil du fortsætte alligevel?</string>\n  <string name=\"download_application\">Download applikation?</string>\n  <string name=\"app_not_installed\">Den app, du valgte, er ikke installeret. Vil du downloade den?</string>\n  <string name=\"failed_to_load_apk\">Kunne ikke indlæse APK</string>\n  <string name=\"split_apk_not_supported\">Opdelte APK\\'er kan ikke lappes</string>\n  <string name=\"loading\">Indlæser…</string>\n  <string name=\"not_installed\">Ikke installeret</string>\n  <string name=\"installed\">Installeret</string>\n  <string name=\"app_info\">App-info</string>\n  <string name=\"uninstall\">Afinstaller</string>\n  <string name=\"unpatch\">Fjern patch</string>\n  <string name=\"repatch\">Re-patch</string>\n  <string name=\"install_type\">Installationstype</string>\n  <string name=\"package_name\">Pakkenavn</string>\n  <string name=\"original_package_name\">Originalt pakkenavn</string>\n  <string name=\"applied_patches\">Anvendte patches</string>\n  <string name=\"view_applied_patches\">Se anvendte patches</string>\n  <string name=\"default_install\">Standard</string>\n  <string name=\"mount_install\">Monter</string>\n  <string name=\"mounted\">Monteret</string>\n  <string name=\"not_mounted\">Ikke monteret</string>\n  <string name=\"mount\">Monter</string>\n  <string name=\"unmount\">Afmonter</string>\n  <string name=\"failed_to_mount\">Kunne ikke montere: %s</string>\n  <string name=\"failed_to_unmount\">Kunne ikke afmontere: %s</string>\n  <string name=\"unpatch_app\">Fjern patches fra appen?</string>\n  <string name=\"unpatch_description\">Er du sikker på, at du vil fjerne patches fra denne app?</string>\n  <string name=\"downloader_invalid_version\">Downloaderen hentede ikke den korrekte version</string>\n  <string name=\"downloader_app_not_found\">Downloaderen fandt ikke appen</string>\n  <string name=\"downloader_error\">Downloader-fejl: %s</string>\n  <string name=\"no_downloaders_installed\">Ingen app-downloadere er installeret!</string>\n  <string name=\"no_downloaders_trusted\">Ingen app-downloadere er blevet betroet! Kontroller venligst dine indstillinger.</string>\n  <string name=\"already_patched\">Allerede patched</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filter</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Kompatibilitet</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Pakker</string>\n  <string name=\"patch_selector_sheet_actions_title\">Handlinger</string>\n  <string name=\"restore_default_selection\">Gendan standardvalg</string>\n  <string name=\"deselect_all\">Fravælg alle</string>\n  <string name=\"invert_selection\">Inverter valg</string>\n  <string name=\"deselect_all_except\">Fravælg alt undtagen %s</string>\n  <string name=\"scope_dialog_title\">Anvend på</string>\n  <string name=\"scope_all_patches\">Alle patches</string>\n  <string name=\"scope_bundle_patches\">%s alene</string>\n  <string name=\"string_option_menu_description\">Flere muligheder</string>\n  <string name=\"option_preset_custom_value\">Brugerdefineret værdi</string>\n  <string name=\"path_selector\">Vælg fra lager</string>\n  <string name=\"path_selector_parent_dir\">Forrige mappe</string>\n  <string name=\"path_selector_dirs\">Mapper</string>\n  <string name=\"path_selector_files\">Filer</string>\n  <string name=\"show_password_field\">Vis adgangskode</string>\n  <string name=\"hide_password_field\">Skjul adgangskode</string>\n  <string name=\"installer\">Installer</string>\n  <string name=\"install_app\">Installer</string>\n  <string name=\"install_app_success\">App installeret</string>\n  <string name=\"install_app_fail\">Kunne ikke installere app: %s</string>\n  <string name=\"reinstall_app_fail\">Kunne ikke geninstallere app: %s</string>\n  <string name=\"uninstall_app_fail\">Kunne ikke afinstallere app: %s</string>\n  <string name=\"open_app\">Åbn</string>\n  <string name=\"save_apk\">Gem APK</string>\n  <string name=\"save_apk_success\">APK gemt</string>\n  <string name=\"sign_fail\">Kunne ikke signere APK: %s</string>\n  <string name=\"save_logs\">Gem logfiler</string>\n  <string name=\"save_as_file\">Gem til filer</string>\n  <string name=\"export_patcher_logs\">Eksportér patcher-logfiler</string>\n  <string name=\"save_logs_success\">Logfiler gemt</string>\n  <string name=\"downloader_activity_dialog_body\">Brugerinteraktion er påkrævet for at fortsætte med denne downloader.</string>\n  <string name=\"select_install_type\">Vælg installationstype</string>\n  <string name=\"patcher_step_group_preparing\">Forbereder</string>\n  <string name=\"patcher_step_load_patches\">Indlæs patches</string>\n  <string name=\"patcher_step_unpack\">Forbered patcher</string>\n  <string name=\"patcher_step_group_patching\">Patching</string>\n  <string name=\"patcher_step_group_saving\">Gemmer</string>\n  <string name=\"patcher_step_write_patched\">Skriv patched APK-fil</string>\n  <string name=\"patcher_step_sign_apk\">Signer patched APK-fil</string>\n  <string name=\"patcher_notification_title\">Patching i gang…</string>\n  <string name=\"patcher_notification_text\">Tryk for at vende tilbage til patcheren</string>\n  <string name=\"patcher_stop_confirm_title\">Stop patcher</string>\n  <string name=\"patcher_stop_confirm_description\">Er du sikker på, at du vil stoppe patching-processen?</string>\n  <string name=\"patcher_install_in_progress\">Installationen er i gang. Vent venligst</string>\n  <string name=\"execute_patches\">Udfør patches</string>\n  <string name=\"executing_patch\">Udfør %s</string>\n  <string name=\"failed_to_execute_patch\">Kunne ikke udføre %s</string>\n  <string name=\"step_completed\">gennemført</string>\n  <string name=\"step_failed\">mislykkedes</string>\n  <string name=\"step_running\">kører</string>\n  <string name=\"step_waiting\">venter</string>\n  <string name=\"expand_content\">udvid</string>\n  <string name=\"collapse_content\">skjul</string>\n  <string name=\"drag_handle\">omarranger</string>\n  <string name=\"more\">Mere</string>\n  <string name=\"less\">Mindre</string>\n  <string name=\"continue_\">Fortsæt</string>\n  <string name=\"dismiss\">Afvis</string>\n  <string name=\"view_announcement\">Se meddelelse</string>\n  <string name=\"permanent_dismiss\">Vis ikke igen</string>\n  <string name=\"donate\">Donér</string>\n  <string name=\"website\">Hjemmeside</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Kontakt</string>\n  <string name=\"license\">Licens</string>\n  <string name=\"source\">Kilde</string>\n  <string name=\"repository\">Arkiv</string>\n  <string name=\"bundle_information_by_author\">Af %1$s</string>\n  <string name=\"version\">Version</string>\n  <string name=\"version_compatibility_warning\">Den valgte version er muligvis ikke kompatibel med de valgte patches</string>\n  <string name=\"submit_feedback\">Send problem eller feedback</string>\n  <string name=\"submit_feedback_description\">Hjælp os med at forbedre denne applikation</string>\n  <string name=\"developer_options\">Udviklerindstillinger</string>\n  <string name=\"developer_options_description\">Indstillinger til fejlfinding af problemer</string>\n  <string name=\"patches_update_success\">Opdatering gennemført</string>\n  <string name=\"patches_update_unavailable\">Ingen opdatering tilgængelig</string>\n  <string name=\"view_patches\">Se patches</string>\n  <string name=\"patches_view_any_version\">Enhver version</string>\n  <string name=\"patches_view_any_package\">Enhver pakke</string>\n  <string name=\"patches_delete_single_dialog_description\">Er du sikker på, at du vil slette \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Er du sikker på, at du vil slette de valgte patches?</string>\n  <string name=\"announcements\">Meddelelser</string>\n  <string name=\"archive\">Arkiv</string>\n  <string name=\"about_revanced_manager\">Om ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager er en Android-applikation, der bruger ReVanced Patcher til at patche Android-apps. Den giver dig mulighed for at downloade og patche apps med brugerdefinerede patches og administrere patching-processen.</string>\n  <string name=\"developer_options_taps\">%d tryk tilbage</string>\n  <string name=\"developer_options_enabled\">Udviklerindstillinger aktiveret</string>\n  <string name=\"developer_options_already_enabled\">Udviklerindstillinger er allerede aktiveret</string>\n  <string name=\"update_available\">En opdatering er tilgængelig</string>\n  <string name=\"current_version\">Nuværende version: %s</string>\n  <string name=\"new_version\">Ny version: %s</string>\n  <string name=\"ready_to_install_update\">Klar til at installere opdatering</string>\n  <string name=\"update_completed\">Opdatering installeret</string>\n  <string name=\"install_update_manager_failed\">Kunne ikke installere opdatering</string>\n  <string name=\"manual_update_check\">Søg efter opdateringer</string>\n  <string name=\"view_update\">Se opdatering</string>\n  <string name=\"manual_update_check_description\">Søg manuelt efter opdateringer</string>\n  <string name=\"update_checking_manager\">Søg efter opdateringer ved start</string>\n  <string name=\"update_checking_manager_description\">Søg efter nye versioner af ReVanced Manager, når applikationen starter</string>\n  <string name=\"update_checking_downloader\">Søg efter ReVanced-downloadere-opdateringer ved start</string>\n  <string name=\"update_checking_downloader_description\">Søg efter opdateringer til installerede ReVanced-downloadere, når applikationen starter</string>\n  <string name=\"manager_prereleases\">Brug præ-udgivelser</string>\n  <string name=\"manager_prereleases_description\">Brug præ-udgivelsesversioner af ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Præ-udgivelsesversioner kan være ustabile og indeholde fejl. Du kan opleve nedbrud, datatab eller andre uventede problemer. Aktivér kun dette, hvis du er fortrolig med disse risici.</string>\n  <string name=\"changelog\">Se ændringslog</string>\n  <string name=\"changelog_loading\">Indlæser ændringslog</string>\n  <string name=\"changelog_download_fail\">Kunne ikke downloade ændringslog: %s</string>\n  <string name=\"changelog_description\">Se de seneste ændringer i denne opdatering</string>\n  <string name=\"battery_optimization_notification\">Batterioptimeringer skal deaktiveres, for at ReVanced Manager kan fungere korrekt i baggrunden. Klik her for at deaktivere optimeringer.</string>\n  <string name=\"installing_manager_update\">Installerer opdatering…</string>\n  <string name=\"downloading_manager_update\">Downloader opdatering…</string>\n  <string name=\"download_manager_failed\">Kunne ikke downloade opdatering: %s</string>\n  <string name=\"cancel\">Annuller</string>\n  <string name=\"save\">Gem</string>\n  <string name=\"save_with_count\">Gem (%1$s)</string>\n  <string name=\"update\">Opdater</string>\n  <string name=\"empty\">Tom</string>\n  <string name=\"installing_message\">Tryk på <b>Opdater</b>, når du bliver bedt om det.\\nReVanced Manager vil lukke under opdatering.</string>\n  <string name=\"no_changelogs_found\">Ingen ændringslogger fundet</string>\n  <string name=\"just_now\">Lige nu</string>\n  <string name=\"minutes_ago\">for %s min siden</string>\n  <string name=\"hours_ago\">for %s t siden</string>\n  <string name=\"days_ago\">for %s d siden</string>\n  <string name=\"invalid_date\">Ugyldig dato</string>\n  <string name=\"disable_battery_optimization\">Deaktiver batterioptimering</string>\n  <string name=\"input_dialog_value_invalid\">Ugyldig værdi</string>\n  <string name=\"option_required\">Denne mulighed er påkrævet</string>\n  <string name=\"required_options_screen\">Påkrævede indstillinger</string>\n  <string name=\"failed_to_check_updates\">Kunne ikke søge efter opdateringer: %s</string>\n  <string name=\"no_update_available\">Ingen opdatering tilgængelig</string>\n  <string name=\"no_announcements_found\">Ingen meddelelser fundet</string>\n  <string name=\"update_check\">Søger efter opdateringer…</string>\n  <string name=\"dismiss_temporary\">Ikke nu</string>\n  <string name=\"update_available_dialog_description\">En ny version af ReVanced Manager (%s) er tilgængelig.</string>\n  <string name=\"failed_to_download_update\">Kunne ikke downloade opdatering: %s</string>\n  <string name=\"download\">Download</string>\n  <string name=\"download_confirmation_metered\">Du er i øjeblikket på en begrænset forbindelse, og datagebyrer fra din tjenesteudbyder kan gælde.\\n\\nVil du stadig fortsætte?</string>\n  <string name=\"download_update_confirmation\">Download opdatering?</string>\n  <string name=\"no_contributors_found\">Ingen bidragydere fundet</string>\n  <string name=\"select\">Vælg</string>\n  <string name=\"select_deselect_all\">Vælg eller fravælg alle</string>\n  <string name=\"select_patches_type_dialog_description\">Tilføj nye patches fra URL eller lokale filer</string>\n  <string name=\"local_patches_description\">Tilføj patches fra lokalt lager.</string>\n  <string name=\"remote_patches_description\">Tilføj patches fra URL. Patches kan opdateres automatisk.</string>\n  <string name=\"recommended\">Anbefalet</string>\n  <string name=\"installation_failed_dialog_title\">Installation mislykkedes</string>\n  <string name=\"installation_cancelled_dialog_title\">Installation annulleret</string>\n  <string name=\"installation_blocked_dialog_title\">Installation blokeret</string>\n  <string name=\"installation_conflict_dialog_title\">Installationskonflikt</string>\n  <string name=\"installation_incompatible_dialog_title\">Installation inkompatibel</string>\n  <string name=\"installation_invalid_dialog_title\">Installation ugyldig</string>\n  <string name=\"installation_storage_issue_dialog_title\">Ikke nok lagerplads</string>\n  <string name=\"installation_timeout_dialog_title\">Installation udløb</string>\n  <string name=\"installation_failed_description\">Installationen mislykkedes af en ukendt årsag. Vil du prøve igen?</string>\n  <string name=\"installation_aborted_description\">Installationen blev annulleret manuelt. Vil du prøve igen?</string>\n  <string name=\"installation_blocked_description\">Installationen blev blokeret. Gennemgå dine enheds sikkerhedsindstillinger og prøv igen.</string>\n  <string name=\"installation_conflict_description\">Installationen blev forhindret af en eksisterende installation af appen. Afinstaller den installerede app og prøv igen?</string>\n  <string name=\"installation_incompatible_description\">Appen er inkompatibel med denne enhed. Brug en APK, der er kompatibel med denne enhed, og prøv igen.</string>\n  <string name=\"installation_invalid_description\">Appen er ugyldig. Afinstaller appen og prøv igen?</string>\n  <string name=\"installation_storage_issue_description\">Appen kunne ikke installeres på grund af utilstrækkelig lagerplads. Frigør noget plads og prøv igen.</string>\n  <string name=\"installation_timeout_description\">Installationen tog for lang tid. Vil du prøve igen?</string>\n  <string name=\"reinstall\">Geninstaller</string>\n  <string name=\"show\">Vis</string>\n  <string name=\"debugging\">Fejlfinding</string>\n  <string name=\"about_device\">Om enhed</string>\n  <string name=\"enter_url\">Indtast URL</string>\n  <string name=\"next\">Næste</string>\n  <string name=\"auto_update\">Automatisk opdatering</string>\n  <string name=\"add_patches\">Tilføj patches</string>\n  <string name=\"auto_update_description\">Opdater automatisk, når en ny version er tilgængelig</string>\n  <string name=\"patches_prereleases\">Brug præ-udgivelser</string>\n  <string name=\"patches_prereleases_description\">Brug præ-udgivelsesversioner af %s</string>\n  <string name=\"patches_url\">Patches URL</string>\n  <string name=\"incompatible_patches_dialog\">Disse patches er ikke kompatible med den valgte app-version (%1$s).\\n\\nKlik på patches for at se flere detaljer.</string>\n  <string name=\"incompatible_patch\">Inkompatibel patch</string>\n  <string name=\"any_version\">Enhver</string>\n  <string name=\"never_show_again\">Vis aldrig igen</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Vis opdateringsmeddelelse ved start</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Vis en pop-up-meddelelse, når en ny opdatering er tilgængelig ved start</string>\n  <string name=\"failed_to_import_keystore\">Kunne ikke importere nøglelager</string>\n  <string name=\"export\">Eksporter</string>\n  <string name=\"confirm\">Bekræft</string>\n  <string name=\"new_announcement\">Ny meddelelse:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d patch</item>\n    <item quantity=\"other\">%d patches</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Udfør %d patch</item>\n    <item quantity=\"other\">Udfør %d patches</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d valgt</item>\n    <item quantity=\"other\">%d valgt</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-de-rDE/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Patcher</string>\n  <string name=\"patches\">Patches</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Manager</string>\n  <string name=\"onboarding_welcome_to\">Willkommen bei</string>\n  <string name=\"onboarding_welcome_back\">Hallo! Es ist der neue</string>\n  <string name=\"onboarding_apps_subtitle\">Du kannst jetzt eine App zum Patchen auswählen oder es später tun</string>\n  <string name=\"onboarding_apps_network_error\">Patches konnten nicht geladen werden, da das Netzwerk nicht verfügbar oder instabil ist. Verbinden Sie sich mit einem stabilen Netzwerk und versuchen Sie es erneut.</string>\n  <string name=\"onboarding_updates_subtitle\">Konfiguriere automatische Updates, um ReVanced Manager und Patches auf dem neuesten Stand zu halten</string>\n  <string name=\"banner_sources_not_downloaded_description\">Patches und Downloader konnten während der Einrichtung nicht heruntergeladen werden. Tippen Sie auf Aktualisieren, um sie herunterzuladen.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager wird sich mit %s verbinden, um initiale Versionen herunterzuladen, wenn Ihr Gerät mit dem Internet verbunden ist.</string>\n  <string name=\"retry\">Wiederholen</string>\n  <string name=\"onboarding_skip\">Vorläufig überspringen</string>\n  <string name=\"onboarding_recommended_version\">Empfohlene Version: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Berechtigungen überspringen?</string>\n  <string name=\"onboarding_permissions_skip_description\">Ohne die erforderlichen Berechtigungen funktionieren einige Funktionen möglicherweise nicht richtig. Sie können sie später in den App-Einstellungen erteilen.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Trotzdem überspringen</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager benötigt einige Berechtigungen, um richtig zu funktionieren</string>\n  <string name=\"permission_install_apps\">Unbekannte Apps installieren</string>\n  <string name=\"permission_install_apps_description\">Erforderlich, um gepatchte Anwendungen zu installieren</string>\n  <string name=\"permission_notifications\">Benachrichtigungen</string>\n  <string name=\"permission_notifications_description\">Ermöglicht ununterbrochenes Patchen im Hintergrund</string>\n  <string name=\"permission_battery\">Akku-Optimierung</string>\n  <string name=\"permission_battery_description\">Verhindert, dass das Patchen im Hintergrund unterbrochen wird</string>\n  <string name=\"permission_grant\">Erteilen</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager Downloader-Host</string>\n  <string name=\"downloader_host_permission_description\">Wird verwendet, um den Zugriff auf ReVanced Manager Downloader zu steuern. Nur ReVanced Manager verfügt darüber.</string>\n  <string name=\"toast_copied_to_clipboard\">Kopiert!</string>\n  <string name=\"copy_to_clipboard\">In Zwischenablage kopieren</string>\n  <string name=\"dashboard\">Übersicht</string>\n  <string name=\"settings\">Einstellungen</string>\n  <string name=\"select_app\">App auswählen</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d ausgewählt</string>\n  <string name=\"fab_patch_app\">Eine App patchen</string>\n  <string name=\"fab_add_patches\">Patches hinzufügen</string>\n  <string name=\"new_downloader_notification\">Neue(r) Downloader verfügbar. Klicken Sie hier, um sie zu konfigurieren.</string>\n  <string name=\"unsupported_architecture_warning\">Das Patchen auf dieser Gerätearchitektur wird nicht unterstützt und schlägt höchstwahrscheinlich fehl.</string>\n  <string name=\"import_\">Importieren</string>\n  <string name=\"import_patches\">Patches importieren</string>\n  <string name=\"file_field_set\">Ausgewählt</string>\n  <string name=\"file_field_not_set\">Nicht ausgewählt</string>\n  <string name=\"field_not_set\">Nicht festgelegt</string>\n  <string name=\"patches_missing\">Fehlend</string>\n  <string name=\"patches_error\">Fehler</string>\n  <string name=\"patches_error_description\">Patches konnten nicht geladen werden. Klicken Sie hier, um den Fehler anzuzeigen.</string>\n  <string name=\"patches_not_downloaded\">Patches wurden nicht heruntergeladen.</string>\n  <string name=\"patches_name_default\">Patches</string>\n  <string name=\"patches_name_fallback\">Unbenannt</string>\n  <string name=\"android_11_bug_dialog_title\">Android 11 Fehler</string>\n  <string name=\"android_11_bug_dialog_description\">Die Berechtigung zur App-Installation muss im Voraus erteilt werden, um einen Fehler im Android 11-System zu vermeiden, der die Benutzererfahrung negativ beeinflusst.</string>\n  <string name=\"no_network_toast\">Keine Internetverbindung verfügbar</string>\n  <string name=\"selected_app_meta_any_version\">Jede verfügbare Version</string>\n  <string name=\"app_source_dialog_title\">Quelle auswählen</string>\n  <string name=\"app_source_dialog_option_auto\">Automatisch</string>\n  <string name=\"app_source_dialog_option_auto_description\">Installierte App verwenden, dann heruntergeladene APK, dann verfügbare Downloader</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Keine kompatible App oder Downloader verfügbar</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Installierte Apps können ohne Root-Zugriff nicht erneut gepatcht werden</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Version %s stimmt nicht mit der vorgeschlagenen Version überein</string>\n  <string name=\"patch_item_description\">Patching der Anwendung starten</string>\n  <string name=\"patch_selector_item\">Patches auswählen</string>\n  <string name=\"patch_selector_item_description\">%d Patches ausgewählt</string>\n  <string name=\"patch_selection_changed_warning\">Die Auswahl der Patches wurde geändert.</string>\n  <string name=\"no_patches_selected\">Keine Patches ausgewählt</string>\n  <string name=\"network_unavailable_warning\">Ihr Gerät ist nicht mit dem Internet verbunden. Der Download wird später fehlschlagen.</string>\n  <string name=\"network_metered_warning\">Sie nutzen derzeit eine getaktete Verbindung. Es können Datengebühren Ihres Dienstanbieters anfallen.</string>\n  <string name=\"apk_source_selector_item\">APK-Quelle auswählen</string>\n  <string name=\"apk_source_auto\">Automatisch</string>\n  <string name=\"apk_source_auto_installed\">Automatisch · Verwendet installierte APK</string>\n  <string name=\"apk_source_auto_downloaded\">Automatisch · Verwendet heruntergeladene APK</string>\n  <string name=\"apk_source_auto_downloader\">Automatisch · Verwenden verfügbarer Downloader</string>\n  <string name=\"apk_source_auto_storage\">Automatisch · Aus Speicher auswählen</string>\n  <string name=\"apk_source_downloader\">Verwende %s</string>\n  <string name=\"apk_source_installed\">Verwenden der installierten APK</string>\n  <string name=\"apk_source_local\">Verwenden einer lokalen APK-Datei</string>\n  <string name=\"apk_source_downloaded\">Bereits heruntergeladen</string>\n  <string name=\"legacy_import_failed\">Alte Einstellungen konnten nicht importiert werden</string>\n  <string name=\"auto_updates_dialog_title\">Updates konfigurieren</string>\n  <string name=\"auto_updates_dialog_description\">Möchten Sie, dass ReVanced Manager regelmäßig nach Updates für die folgenden Komponenten sucht?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Patches</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Downloader</string>\n  <string name=\"auto_updates_dialog_note\">Diese Einstellungen können später geändert werden.\n\n    ReVanced Manager wird sich mit %s verbinden, um initiale Versionen herunterzuladen, wenn Ihr Gerät mit dem Internet verbunden ist.</string>\n  <string name=\"announcements_filter_tag\">Nach Tag filtern</string>\n  <string name=\"announcements_show_archived\">Archivierte anzeigen</string>\n  <string name=\"general\">Allgemein</string>\n  <string name=\"general_description\">Sprache, Design, dynamische Farbe</string>\n  <string name=\"updates\">Updates</string>\n  <string name=\"updates_description\">Nach Updates suchen und Changelog anzeigen</string>\n  <string name=\"downloads\">Downloads</string>\n  <string name=\"downloads_description\">Downloader und heruntergeladene Apps</string>\n  <string name=\"import_export\">Import &amp; Export</string>\n  <string name=\"import_export_description\">Keystore, Patch-Optionen und -Auswahl</string>\n  <string name=\"advanced\">Erweitert</string>\n  <string name=\"advanced_description\">API-URL, Speicherbegrenzung, Debugging</string>\n  <string name=\"safeguards_toggled_warning\">Schutzmaßnahmen wurden umgeschaltet.</string>\n  <string name=\"about\">Über</string>\n  <string name=\"about_app_name\">Über %1$s</string>\n  <string name=\"opensource_licenses\">Open-Source-Lizenzen</string>\n  <string name=\"opensource_licenses_description\">Alle zur Erstellung dieser Anwendung verwendeten Bibliotheken anzeigen</string>\n  <string name=\"contributors\">Mitwirkende</string>\n  <string name=\"contributors_description\">Die Mitwirkenden von ReVanced anzeigen</string>\n  <string name=\"dynamic_color\">Dynamische Farbe</string>\n  <string name=\"dynamic_color_description\">Farben an das Hintergrundbild anpassen</string>\n  <string name=\"pure_black_theme\">Rein schwarzes Design</string>\n  <string name=\"pure_black_theme_description\">Rein schwarze Hintergründe für das dunkle Design verwenden</string>\n  <string name=\"theme\">Design</string>\n  <string name=\"theme_description\">Zwischen hellem oder dunklem Design wählen</string>\n  <string name=\"language\">Sprache</string>\n  <string name=\"language_description\">Die Anzeigesprache der App auswählen</string>\n  <string name=\"language_system_default\">Systemstandard</string>\n  <string name=\"search_languages\">Sprachen suchen…</string>\n  <string name=\"safeguards\">Schutzmaßnahmen</string>\n  <string name=\"patch_compat_check\">Versionskompatibilitätsprüfung deaktivieren</string>\n  <string name=\"patch_compat_check_description\">Patches nicht auf kompatible App-Versionen beschränken</string>\n  <string name=\"patch_compat_check_confirmation\">Das Auswählen inkompatibler Patches kann zu einer fehlerhaften App führen.\n\nMöchten Sie trotzdem fortfahren?</string>\n  <string name=\"suggested_version_safeguard\">Vorgeschlagene App-Version erforderlich</string>\n  <string name=\"suggested_version_safeguard_description\">Erzwingen der Auswahl der vorgeschlagenen App-Version</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Das Auswählen einer App, die nicht die vorgeschlagene Version ist, kann zu unerwarteten Problemen führen.\n\nMöchten Sie trotzdem fortfahren?</string>\n  <string name=\"patch_selection_safeguard\">Ändern der Patch-Auswahl und -Optionen erlauben</string>\n  <string name=\"patch_selection_safeguard_description\">Das Auswählen oder Abwählen von Patches und die Anpassung von Optionen nicht verhindern</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Das Ändern der Patch-Auswahl kann zu unerwarteten Problemen führen.\n\nTrotzdem aktivieren?</string>\n  <string name=\"universal_patches_safeguard\">Verwendung universeller Patches erlauben</string>\n  <string name=\"universal_patches_safeguard_description\">Die Verwendung universeller Patches nicht verhindern</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Universelle Patches sind nicht so gut getestet wie solche, die auf spezifische Apps abzielen.\n\nTrotzdem aktivieren?</string>\n  <string name=\"keystore\">Keystore</string>\n  <string name=\"patches_selections\">Patch-Auswahlen</string>\n  <string name=\"import_keystore\">Keystore importieren</string>\n  <string name=\"import_keystore_description\">Einen benutzerdefinierten Keystore importieren</string>\n  <string name=\"import_keystore_dialog_title\">Keystore-Anmeldeinformationen eingeben</string>\n  <string name=\"import_keystore_dialog_description\">Sie müssen die Anmeldeinformationen des Keystores eingeben, um ihn zu importieren.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Benutzername (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Passwort</string>\n  <string name=\"import_keystore_dialog_button\">Importieren</string>\n  <string name=\"import_keystore_wrong_credentials\">Falsche Keystore-Anmeldeinformationen</string>\n  <string name=\"import_keystore_success\">Keystore importiert</string>\n  <string name=\"export_keystore\">Keystore exportieren</string>\n  <string name=\"export_keystore_description\">Den aktuellen Keystore exportieren</string>\n  <string name=\"export_keystore_unavailable\">Kein Keystore zum Exportieren</string>\n  <string name=\"export_keystore_success\">Keystore exportiert</string>\n  <string name=\"regenerate_keystore\">Keystore neu generieren</string>\n  <string name=\"regenerate_keystore_description\">Einen neuen Keystore generieren</string>\n  <string name=\"regenerate_keystore_dialog_description\">Sie sind dabei, Ihren Keystore neu zu generieren, den der Manager während des Patching-Prozesses verwenden wird.\n\nSie können die zuvor installierten Apps von dieser Quelle nicht mehr aktualisieren.</string>\n  <string name=\"regenerate_keystore_success\">Der Keystore wurde erfolgreich ersetzt</string>\n  <string name=\"import_patch_selection\">Patch-Auswahl importieren</string>\n  <string name=\"import_patch_selection_description\">Patch-Auswahl aus einer JSON-Datei importieren</string>\n  <string name=\"import_patch_selection_fail\">Patch-Auswahl konnte nicht importiert werden: %s</string>\n  <string name=\"import_patch_selection_success\">Patch-Auswahl importiert</string>\n  <string name=\"select_bundle_for_import\">Bündel zum Importieren auswählen</string>\n  <string name=\"export_patch_selection\">Patch-Auswahl exportieren</string>\n  <string name=\"export_patch_selection_description\">Patch-Auswahl in eine JSON-Datei exportieren</string>\n  <string name=\"export_patch_selection_fail\">Patch-Auswahl konnte nicht exportiert werden: %s</string>\n  <string name=\"export_patch_selection_success\">Patch-Auswahl exportiert</string>\n  <string name=\"select_bundle_for_export\">Bündel zum Exportieren auswählen</string>\n  <string name=\"patch_selection_packages\">Apps mit gespeicherten Auswahlen</string>\n  <string name=\"patch_selection_entries\">Gesamtzahl ausgewählter Patches</string>\n  <string name=\"reset_configuration\">Konfiguration zurücksetzen</string>\n  <string name=\"reset_patch_selection\">Patch-Auswahlen</string>\n  <string name=\"reset_patch_selection_description\">Die gespeicherte Patch-Auswahl zurücksetzen</string>\n  <string name=\"reset_patch_options\">Patch-Optionen</string>\n  <string name=\"reset_patch_options_description\">Die gespeicherten Patch-Optionen zurücksetzen</string>\n  <string name=\"reset_patch_selection_success\">Patch-Auswahl wurde zurückgesetzt</string>\n  <string name=\"patch_selection_reset_all\">Patch-Auswahl global zurücksetzen</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Sie sind dabei, alle Patch-Auswahlen zurückzusetzen. Sie müssen jeden Patch manuell erneut auswählen.</string>\n  <string name=\"patch_selection_reset_all_description\">Setzt alle Patch-Auswahlen zurück</string>\n  <string name=\"patch_selection_reset_package\">Patch-Auswahl für App zurücksetzen</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Sie sind dabei, die Patch-Auswahl für die App „%s“ zurückzusetzen. Sie müssen jeden Patch manuell erneut auswählen.</string>\n  <string name=\"patch_selection_reset_package_description\">Setzt die Patch-Auswahl für eine einzelne App zurück</string>\n  <string name=\"patch_selection_reset_patches\">Patch-Auswahl zurücksetzen (einzeln)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Sie sind dabei, die Patch-Auswahl für „%s“ zurückzusetzen. Sie müssen jeden Patch erneut manuell auswählen.</string>\n  <string name=\"patch_selection_reset_patches_description\">Setzt die Patch-Auswahl für eine bestimmte Sammlung von Patches zurück</string>\n  <string name=\"patch_options_reset_package\">Patch-Optionen für App zurücksetzen</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Sie sind dabei, die Patch-Optionen für die App „%s“ zurückzusetzen. Sie müssen jede Option erneut anwenden.</string>\n  <string name=\"patch_options_reset_package_description\">Setzt die Patch-Optionen für eine einzelne App zurück</string>\n  <string name=\"patch_options_reset_patches\">Patch-Optionen zurücksetzen (einzeln)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Sie sind dabei, die Patch-Optionen für „%s“ zurückzusetzen. Sie müssen jede Option erneut anwenden.</string>\n  <string name=\"patch_options_reset_patches_description\">Setzt die Patch-Optionen für eine bestimmte Sammlung von Patches zurück</string>\n  <string name=\"patch_options_reset_all\">Patch-Optionen global zurücksetzen</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Sie sind dabei, alle Patch-Optionen zurückzusetzen. Sie müssen jede Option erneut anwenden.</string>\n  <string name=\"patch_options_reset_all_description\">Setzt alle Patch-Optionen zurück</string>\n  <string name=\"downloaders\">Downloader</string>\n  <string name=\"downloader_prereleases\">Vorabversionen verwenden</string>\n  <string name=\"downloader_prereleases_description\">Vorabversionen des Haupt-Downloaders verwenden</string>\n  <string name=\"downloader_state_loaded\">Geladen</string>\n  <string name=\"downloader_state_failed\">Laden fehlgeschlagen. Klicken Sie für weitere Details</string>\n  <string name=\"downloader_state_missing\">Fehlend</string>\n  <string name=\"downloader_delete_apps_title\">Ausgewählte Apps löschen</string>\n  <string name=\"downloader_delete_apps_description\">Möchten Sie wirklich die ausgewählten Apps löschen?</string>\n  <string name=\"downloader_delete_single_description\">Sind Sie sicher, dass Sie „%s“ löschen möchten?</string>\n  <string name=\"downloader_settings_no_apps\">Keine heruntergeladenen Apps gefunden.</string>\n  <string name=\"downloader_settings_no_apps_description\">Apps, die über ReVanced Manager heruntergeladen wurden, werden hier angezeigt.</string>\n  <string name=\"downloader_url\">Downloader-URL</string>\n  <string name=\"downloader_add\">Downloader hinzufügen</string>\n  <string name=\"select_downloader_type_dialog_description\">Neue Downloader über URL oder lokale Dateien hinzufügen</string>\n  <string name=\"local_downloaders_description\">Downloader aus dem lokalen Speicher hinzufügen.</string>\n  <string name=\"remote_downloaders_description\">Downloader über URL hinzufügen. Kann automatisch aktualisiert werden.</string>\n  <string name=\"install_revanced_downloaders\">Installieren Sie Downloader, um Apps direkt in ReVanced Manager zu erhalten.</string>\n  <string name=\"install_revanced_downloader\">ReVanced Downloader installieren</string>\n  <string name=\"cancel_downloader_install_title\">Installation von Downloadern abbrechen?</string>\n  <string name=\"cancel_downloader_install_description\">Eine Downloader-Installation läuft. Wenn Sie jetzt verlassen, wird der Download abgebrochen.</string>\n  <string name=\"downloader_sources_unavailable_title\">Diese Downloader fehlen</string>\n  <string name=\"downloader_sources_unavailable_description\">Klicken Sie auf die Schaltfläche „Aktualisieren“, um das Problem zu beheben.</string>\n  <string name=\"downloader_update_failed\">Fehler beim Aktualisieren des Downloaders: %s</string>\n  <string name=\"downloader_replace_fail\">Fehler beim Importieren des Downloaders: %s</string>\n  <string name=\"search_apps\">Apps suchen…</string>\n  <string name=\"loading_body\">Wird geladen…</string>\n  <string name=\"downloading_patches\">Patches werden heruntergeladen…</string>\n  <string name=\"options\">Optionen</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Ja</string>\n  <string name=\"no\">Nein</string>\n  <string name=\"edit\">Bearbeiten</string>\n  <string name=\"dialog_input_placeholder\">Wert</string>\n  <string name=\"reset\">Zurücksetzen</string>\n  <string name=\"share\">Teilen</string>\n  <string name=\"patch\">Patch</string>\n  <string name=\"select_from_storage\">Aus Speicher auswählen</string>\n  <string name=\"select_from_storage_description\">Wählen Sie eine APK-Datei aus dem Speicher über den Dateiwähler aus</string>\n  <string name=\"suggested_version_info\">Empfohlene Version: %s</string>\n  <string name=\"type_anything\">Beliebige Eingabe zum Fortfahren</string>\n  <string name=\"search\">Patches suchen…</string>\n  <string name=\"apply\">Anwenden</string>\n  <string name=\"help\">Hilfe</string>\n  <string name=\"back\">Zurück</string>\n  <string name=\"warning\">Warnung</string>\n  <string name=\"add\">Hinzufügen</string>\n  <string name=\"enable\">Aktivieren</string>\n  <string name=\"disable\">Deaktivieren</string>\n  <string name=\"close\">Schließen</string>\n  <string name=\"clear\">Löschen</string>\n  <string name=\"system\">System</string>\n  <string name=\"light\">Hell</string>\n  <string name=\"dark\">Dunkel</string>\n  <string name=\"appearance\">Erscheinungsbild</string>\n  <string name=\"networking\">Netzwerk</string>\n  <string name=\"allow_metered_networks\">Getaktete Netzwerke zulassen</string>\n  <string name=\"allow_metered_networks_description\">Erlaubt automatische Updates über getaktete Netzwerke.\\n    Die Anwendung könnte dennoch vor getakteten Netzwerken bei manuellen Vorgängen warnen.</string>\n  <string name=\"downloaded_apps\">Heruntergeladene Apps</string>\n  <string name=\"process_runtime\">Patcher in einem anderen Prozess ausführen (experimentell)</string>\n  <string name=\"process_runtime_description\">Dies ist schneller und ermöglicht dem Patcher, mehr Arbeitsspeicher zu verwenden</string>\n  <string name=\"process_runtime_memory_limit\">Speicherlimit des Patcher-Prozesses</string>\n  <string name=\"process_runtime_memory_limit_description\">Die maximale Speichermenge, die der Patcher-Prozess verwenden kann</string>\n  <string name=\"debug_logs_export\">Debug-Protokolle exportieren</string>\n  <string name=\"debug_logs_export_read_failed\">Fehler beim Lesen der Protokolle (Exit-Code %d)</string>\n  <string name=\"debug_logs_export_failed\">Fehler beim Exportieren der Protokolle</string>\n  <string name=\"debug_logs_export_success\">Protokolle exportiert</string>\n  <string name=\"api_url\">API-URL</string>\n  <string name=\"api_url_description\">Die API, die zum Herunterladen notwendiger Dateien verwendet wird</string>\n  <string name=\"api_url_dialog_title\">API-URL ändern</string>\n  <string name=\"api_url_dialog_description\">Ändern Sie die API-URL von ReVanced Manager. ReVanced Manager verwendet die API, um Patches und Updates herunterzuladen.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager verbindet sich mit der API, um Patches und Updates herunterzuladen. Stellen Sie sicher, dass Sie ihr vertrauen.</string>\n  <string name=\"api_url_dialog_save\">Festlegen</string>\n  <string name=\"api_url_dialog_reset\">API-URL zurücksetzen</string>\n  <string name=\"device\">Gerät</string>\n  <string name=\"device_android_version\">Android-Version</string>\n  <string name=\"device_model\">Modell</string>\n  <string name=\"device_architectures\">CPU-Architekturen</string>\n  <string name=\"device_memory_limit\">Speicherbegrenzungen</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normal) - %2$dMB (Groß)</string>\n  <string name=\"patches_force_download\">Alle Patches erzwingen</string>\n  <string name=\"patches_reset\">Patches zurücksetzen</string>\n  <string name=\"reset_onboarding\">Onboarding zurücksetzen</string>\n  <string name=\"reset_onboarding_description\">Onboarding-Bildschirm beim nächsten App-Start anzeigen</string>\n  <string name=\"patching\">Patchen</string>\n  <string name=\"signing\">Signieren</string>\n  <string name=\"storage\">Speicher</string>\n  <string name=\"no_patch_found\">Kein Patch gefunden. Überprüfen Sie Ihre Patches</string>\n  <string name=\"tab_apps\">Apps</string>\n  <string name=\"tab_patches\">Patches</string>\n  <string name=\"delete\">Löschen</string>\n  <string name=\"refresh\">Aktualisieren</string>\n  <string name=\"continue_anyways\">Trotzdem fortfahren</string>\n  <string name=\"download_another_version\">Andere Version herunterladen</string>\n  <string name=\"download_app\">App herunterladen</string>\n  <string name=\"download_apk\">APK-Datei herunterladen</string>\n  <string name=\"patches_download_fail\">Fehler beim Herunterladen der Patches: %s</string>\n  <string name=\"api_not_working_title\">API-Dienst ist derzeit nicht verfügbar</string>\n  <string name=\"api_not_working_description\">Einige Funktionen könnten beeinträchtigt sein. Überprüfen Sie Ihre Verbindung oder die API-URL in den Einstellungen.</string>\n  <string name=\"patches_replace_fail\">Fehler beim Importieren der Patches: %s</string>\n  <string name=\"no_patched_apps_found\">Keine gepatchten Apps gefunden</string>\n  <string name=\"no_patched_apps_description\">Sie haben derzeit keine uns bekannten gepatchten Apps. Ändern Sie das, indem Sie Ihre erste App patchen!</string>\n  <string name=\"patched_apps_section_title\">Gepatchte Apps</string>\n  <string name=\"patchable_apps_section_title\">Patchbare Apps</string>\n  <string name=\"no_patches_found\">Keine Patches gefunden</string>\n  <string name=\"no_patches_description\">Sie haben noch keine Patches. Fügen Sie Patches hinzu, indem Sie auf die Schaltfläche unten tippen!</string>\n  <string name=\"tap_on_patches\">Tippen Sie auf die Patches, um weitere Informationen zu erhalten</string>\n  <string name=\"patches_selected\">%s ausgewählt</string>\n  <string name=\"incompatible_patches\">Inkompatible Patches</string>\n  <string name=\"universal_patches\">Universelle Patches</string>\n  <string name=\"patch_selection_reset_toast\">Patch-Auswahl und Optionen wurden auf die empfohlenen Standardwerte zurückgesetzt</string>\n  <string name=\"patch_options_reset_toast\">Patch-Optionen wurden zurückgesetzt</string>\n  <string name=\"non_suggested_version_warning_title\">Nicht empfohlene Version</string>\n  <string name=\"non_suggested_version_warning_description\">Die ausgewählte App-Version stimmt nicht mit der empfohlenen Version überein.\\nBitte verwenden Sie die empfohlene Version: %s\\n\\nUm trotzdem fortzufahren, deaktivieren Sie „Empfohlene App-Version erforderlich“ in den erweiterten Einstellungen.</string>\n  <string name=\"selection_warning_title\">Standardeinstellungen nicht mehr verwenden?</string>\n  <string name=\"selection_warning_description\">Es wird empfohlen, die Standard-Patch-Auswahl und -Optionen zu verwenden. Das Ändern dieser kann zu unerwarteten Problemen führen.\\n\\nSie müssen „Änderung der Patch-Auswahl und Optionen zulassen“ in den erweiterten Einstellungen aktivieren, bevor Sie Patches umschalten.</string>\n  <string name=\"universal_patch_warning_description\">Universelle Patches haben einen allgemeineren Anwendungsbereich und funktionieren nicht so zuverlässig wie Patches, die auf bestimmte Apps abzielen. Bei der Verwendung können Probleme auftreten.\\n\\nSie müssen „Verwendung universeller Patches zulassen“ in den erweiterten Einstellungen aktivieren, bevor Sie universelle Patches verwenden.</string>\n  <string name=\"this_version\">Diese Version</string>\n  <string name=\"universal\">Beliebige App</string>\n  <string name=\"search_patches\">Patches suchen</string>\n  <string name=\"app_version_not_compatible\">Dieser Patch ist nicht mit der ausgewählten App-Version (%1$s) kompatibel.\\n\\nEr ist nur mit den folgenden Version(en) kompatibel: %2$s</string>\n  <string name=\"continue_with_version\">Mit dieser Version fortfahren?</string>\n  <string name=\"version_not_compatible\">Nicht alle Patches sind mit dieser Version (%s) kompatibel. Möchten Sie trotzdem fortfahren?</string>\n  <string name=\"download_application\">Anwendung herunterladen?</string>\n  <string name=\"app_not_installed\">Die ausgewählte App ist nicht installiert. Möchten Sie sie herunterladen?</string>\n  <string name=\"failed_to_load_apk\">Fehler beim Laden der APK</string>\n  <string name=\"split_apk_not_supported\">Geteilte APKs können nicht gepatcht werden</string>\n  <string name=\"loading\">Wird geladen…</string>\n  <string name=\"not_installed\">Nicht installiert</string>\n  <string name=\"installed\">Installiert</string>\n  <string name=\"app_info\">App-Info</string>\n  <string name=\"uninstall\">Deinstallieren</string>\n  <string name=\"unpatch\">Patch entfernen</string>\n  <string name=\"repatch\">Neu patchen</string>\n  <string name=\"install_type\">Installationstyp</string>\n  <string name=\"package_name\">Paketname</string>\n  <string name=\"original_package_name\">Originaler Paketname</string>\n  <string name=\"applied_patches\">Angewendete Patches</string>\n  <string name=\"view_applied_patches\">Angewendete Patches anzeigen</string>\n  <string name=\"default_install\">Standard</string>\n  <string name=\"mount_install\">Bereitstellen</string>\n  <string name=\"mounted\">Bereitgestellt</string>\n  <string name=\"not_mounted\">Nicht bereitgestellt</string>\n  <string name=\"mount\">Bereitstellen</string>\n  <string name=\"unmount\">Aushängen</string>\n  <string name=\"failed_to_mount\">Fehler beim Bereitstellen: %s</string>\n  <string name=\"failed_to_unmount\">Fehler beim Aushängen: %s</string>\n  <string name=\"unpatch_app\">App unpatchen?</string>\n  <string name=\"unpatch_description\">Möchten Sie diese App wirklich unpatchen?</string>\n  <string name=\"downloader_invalid_version\">Der Downloader hat nicht die richtige Version abgerufen</string>\n  <string name=\"downloader_app_not_found\">Der Downloader hat die App nicht gefunden</string>\n  <string name=\"downloader_error\">Downloader-Fehler: %s</string>\n  <string name=\"no_downloaders_installed\">Keine App-Downloader installiert!</string>\n  <string name=\"no_downloaders_trusted\">Keine App-Downloader wurden vertraut! Bitte überprüfen Sie Ihre Einstellungen.</string>\n  <string name=\"already_patched\">Bereits gepatcht</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filter</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Kompatibilität</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Pakete</string>\n  <string name=\"patch_selector_sheet_actions_title\">Aktionen</string>\n  <string name=\"restore_default_selection\">Standardauswahl wiederherstellen</string>\n  <string name=\"deselect_all\">Alle abwählen</string>\n  <string name=\"invert_selection\">Auswahl umkehren</string>\n  <string name=\"deselect_all_except\">Auswahl aufheben für alle außer %s</string>\n  <string name=\"scope_dialog_title\">Anwenden auf</string>\n  <string name=\"scope_all_patches\">Alle Patches</string>\n  <string name=\"scope_bundle_patches\">Nur %s</string>\n  <string name=\"string_option_menu_description\">Weitere Optionen</string>\n  <string name=\"option_preset_custom_value\">Benutzerdefinierter Wert</string>\n  <string name=\"path_selector\">Aus Speicher auswählen</string>\n  <string name=\"path_selector_parent_dir\">Vorheriges Verzeichnis</string>\n  <string name=\"path_selector_dirs\">Verzeichnisse</string>\n  <string name=\"path_selector_files\">Dateien</string>\n  <string name=\"show_password_field\">Passwort anzeigen</string>\n  <string name=\"hide_password_field\">Passwort ausblenden</string>\n  <string name=\"installer\">Installationsprogramm</string>\n  <string name=\"install_app\">Installieren</string>\n  <string name=\"install_app_success\">App installiert</string>\n  <string name=\"install_app_fail\">Fehler bei der App-Installation: %s</string>\n  <string name=\"reinstall_app_fail\">Fehler bei der Neuinstallation der App: %s</string>\n  <string name=\"uninstall_app_fail\">Fehler bei der Deinstallation der App: %s</string>\n  <string name=\"open_app\">Öffnen</string>\n  <string name=\"save_apk\">APK speichern</string>\n  <string name=\"save_apk_success\">APK gespeichert</string>\n  <string name=\"sign_fail\">Fehler beim Signieren der APK: %s</string>\n  <string name=\"save_logs\">Logs speichern</string>\n  <string name=\"save_as_file\">In Dateien speichern</string>\n  <string name=\"export_patcher_logs\">Patcher-Protokolle exportieren</string>\n  <string name=\"save_logs_success\">Protokolle gespeichert</string>\n  <string name=\"downloader_activity_dialog_body\">Benutzerinteraktion ist erforderlich, um mit diesem Downloader fortzufahren.</string>\n  <string name=\"select_install_type\">Installationstyp auswählen</string>\n  <string name=\"patcher_step_group_preparing\">Vorbereiten</string>\n  <string name=\"patcher_step_load_patches\">Patches laden</string>\n  <string name=\"patcher_step_unpack\">Patcher vorbereiten</string>\n  <string name=\"patcher_step_group_patching\">Patchen</string>\n  <string name=\"patcher_step_group_saving\">Speichern</string>\n  <string name=\"patcher_step_write_patched\">Gepatchte APK-Datei schreiben</string>\n  <string name=\"patcher_step_sign_apk\">Gepatchte APK-Datei signieren</string>\n  <string name=\"patcher_notification_title\">Patchen läuft…</string>\n  <string name=\"patcher_notification_text\">Tippen, um zum Patcher zurückzukehren</string>\n  <string name=\"patcher_stop_confirm_title\">Patcher stoppen</string>\n  <string name=\"patcher_stop_confirm_description\">Möchten Sie den Patching-Prozess wirklich stoppen?</string>\n  <string name=\"patcher_install_in_progress\">Installation läuft. Bitte warten</string>\n  <string name=\"execute_patches\">Patches ausführen</string>\n  <string name=\"executing_patch\">%s ausführen</string>\n  <string name=\"failed_to_execute_patch\">Fehler beim Ausführen von %s</string>\n  <string name=\"step_completed\">abgeschlossen</string>\n  <string name=\"step_failed\">fehlgeschlagen</string>\n  <string name=\"step_running\">läuft</string>\n  <string name=\"step_waiting\">wartet</string>\n  <string name=\"expand_content\">erweitern</string>\n  <string name=\"collapse_content\">einklappen</string>\n  <string name=\"drag_handle\">neu anordnen</string>\n  <string name=\"more\">Mehr</string>\n  <string name=\"less\">Weniger</string>\n  <string name=\"continue_\">Weiter</string>\n  <string name=\"dismiss\">Verwerfen</string>\n  <string name=\"view_announcement\">Ankündigung ansehen</string>\n  <string name=\"permanent_dismiss\">Nicht erneut anzeigen</string>\n  <string name=\"donate\">Spenden</string>\n  <string name=\"website\">Webseite</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Kontakt</string>\n  <string name=\"license\">Lizenz</string>\n  <string name=\"source\">Quelle</string>\n  <string name=\"repository\">Repository</string>\n  <string name=\"bundle_information_by_author\">Von %1$s</string>\n  <string name=\"version\">Version</string>\n  <string name=\"version_compatibility_warning\">Die ausgewählte Version ist möglicherweise inkompatibel mit den ausgewählten Patches.</string>\n  <string name=\"submit_feedback\">Problem oder Feedback senden</string>\n  <string name=\"submit_feedback_description\">Helfen Sie uns, diese Anwendung zu verbessern</string>\n  <string name=\"developer_options\">Entwickleroptionen</string>\n  <string name=\"developer_options_description\">Optionen zur Fehlerbehebung</string>\n  <string name=\"patches_update_success\">Update erfolgreich</string>\n  <string name=\"patches_update_unavailable\">Kein Update verfügbar</string>\n  <string name=\"view_patches\">Patches anzeigen</string>\n  <string name=\"patches_view_any_version\">Jede Version</string>\n  <string name=\"patches_view_any_package\">Jedes Paket</string>\n  <string name=\"patches_delete_single_dialog_description\">Möchten Sie \\\"%s\\\" wirklich löschen?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Möchten Sie die ausgewählten Patches wirklich löschen?</string>\n  <string name=\"announcements\">Ankündigungen</string>\n  <string name=\"archive\">Archiv</string>\n  <string name=\"about_revanced_manager\">Über ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager ist eine Android-Anwendung, die ReVanced Patcher verwendet, um Android-Apps zu patchen. Sie ermöglicht das Herunterladen und Patchen von Apps mit benutzerdefinierten Patches sowie die Verwaltung des Patching-Prozesses.</string>\n  <string name=\"developer_options_taps\">%d Tippen verbleibend</string>\n  <string name=\"developer_options_enabled\">Entwickleroptionen aktiviert</string>\n  <string name=\"developer_options_already_enabled\">Entwickleroptionen sind bereits aktiviert</string>\n  <string name=\"update_available\">Ein Update ist verfügbar</string>\n  <string name=\"current_version\">Aktuelle Version: %s</string>\n  <string name=\"new_version\">Neue Version: %s</string>\n  <string name=\"ready_to_install_update\">Bereit zur Installation des Updates</string>\n  <string name=\"update_completed\">Update installiert</string>\n  <string name=\"install_update_manager_failed\">Fehler bei der Installation des Updates</string>\n  <string name=\"manual_update_check\">Nach Updates suchen</string>\n  <string name=\"view_update\">Update anzeigen</string>\n  <string name=\"manual_update_check_description\">Manuell nach Updates suchen</string>\n  <string name=\"update_checking_manager\">Beim Start nach Updates suchen</string>\n  <string name=\"update_checking_manager_description\">Beim Start der Anwendung nach neuen Versionen von ReVanced Manager suchen</string>\n  <string name=\"update_checking_downloader\">Beim Start nach ReVanced Downloader-Updates suchen</string>\n  <string name=\"update_checking_downloader_description\">Beim Start der Anwendung nach Updates für installierte ReVanced Downloader suchen</string>\n  <string name=\"manager_prereleases\">Vorabversionen verwenden</string>\n  <string name=\"manager_prereleases_description\">Vorabversionen von ReVanced Manager verwenden</string>\n  <string name=\"prereleases_warning\">Vorabversionen können instabil sein und Fehler enthalten. Es können Abstürze, Datenverlust oder andere unerwartete Probleme auftreten. Aktivieren Sie dies nur, wenn Sie mit diesen Risiken vertraut sind.</string>\n  <string name=\"changelog\">Changelog anzeigen</string>\n  <string name=\"changelog_loading\">Änderungsprotokoll wird geladen</string>\n  <string name=\"changelog_download_fail\">Fehler beim Herunterladen des Änderungsprotokolls: %s</string>\n  <string name=\"changelog_description\">Sehen Sie sich die neuesten Änderungen in diesem Update an</string>\n  <string name=\"battery_optimization_notification\">Akkulaufzeit-Optimierungen müssen deaktiviert werden, damit ReVanced Manager im Hintergrund korrekt funktioniert. Klicken Sie hier, um Optimierungen zu deaktivieren.</string>\n  <string name=\"installing_manager_update\">Update wird installiert…</string>\n  <string name=\"downloading_manager_update\">Update wird heruntergeladen…</string>\n  <string name=\"download_manager_failed\">Fehler beim Herunterladen des Updates: %s</string>\n  <string name=\"cancel\">Abbrechen</string>\n  <string name=\"save\">Speichern</string>\n  <string name=\"save_with_count\">Speichern (%1$s)</string>\n  <string name=\"update\">Aktualisieren</string>\n  <string name=\"empty\">Leer</string>\n  <string name=\"installing_message\">Tippen Sie auf <b>Aktualisieren</b>, wenn Sie dazu aufgefordert werden.\nReVanced Manager wird beim Aktualisieren geschlossen.</string>\n  <string name=\"no_changelogs_found\">Keine Änderungsprotokolle gefunden</string>\n  <string name=\"just_now\">Gerade eben</string>\n  <string name=\"minutes_ago\">vor %s Min.</string>\n  <string name=\"hours_ago\">vor %s Std.</string>\n  <string name=\"days_ago\">vor %s Tg.</string>\n  <string name=\"invalid_date\">Ungültiges Datum</string>\n  <string name=\"disable_battery_optimization\">Akkuoptimierung deaktivieren</string>\n  <string name=\"input_dialog_value_invalid\">Ungültiger Wert</string>\n  <string name=\"option_required\">Diese Option ist erforderlich</string>\n  <string name=\"required_options_screen\">Erforderliche Optionen</string>\n  <string name=\"failed_to_check_updates\">Fehler beim Suchen nach Updates: %s</string>\n  <string name=\"no_update_available\">Kein Update verfügbar</string>\n  <string name=\"no_announcements_found\">Keine Ankündigungen gefunden</string>\n  <string name=\"update_check\">Suche nach Updates…</string>\n  <string name=\"dismiss_temporary\">Nicht jetzt</string>\n  <string name=\"update_available_dialog_description\">Eine neue Version von ReVanced Manager (%s) ist verfügbar.</string>\n  <string name=\"failed_to_download_update\">Fehler beim Herunterladen des Updates: %s</string>\n  <string name=\"download\">Herunterladen</string>\n  <string name=\"download_confirmation_metered\">Sie nutzen derzeit eine getaktete Verbindung, und es können Datengebühren von Ihrem Dienstanbieter anfallen.\n\nMöchten Sie trotzdem fortfahren?</string>\n  <string name=\"download_update_confirmation\">Update herunterladen?</string>\n  <string name=\"no_contributors_found\">Keine Mitwirkenden gefunden</string>\n  <string name=\"select\">Auswählen</string>\n  <string name=\"select_deselect_all\">Alle auswählen oder abwählen</string>\n  <string name=\"select_patches_type_dialog_description\">Neue Patches von URL oder lokalen Dateien hinzufügen</string>\n  <string name=\"local_patches_description\">Patches aus dem lokalen Speicher hinzufügen.</string>\n  <string name=\"remote_patches_description\">Patches von URL hinzufügen. Patches können automatisch aktualisiert werden.</string>\n  <string name=\"recommended\">Empfohlen</string>\n  <string name=\"installation_failed_dialog_title\">Installation fehlgeschlagen</string>\n  <string name=\"installation_cancelled_dialog_title\">Installation abgebrochen</string>\n  <string name=\"installation_blocked_dialog_title\">Installation blockiert</string>\n  <string name=\"installation_conflict_dialog_title\">Installationskonflikt</string>\n  <string name=\"installation_incompatible_dialog_title\">Installation inkompatibel</string>\n  <string name=\"installation_invalid_dialog_title\">Installation ungültig</string>\n  <string name=\"installation_storage_issue_dialog_title\">Nicht genügend Speicherplatz</string>\n  <string name=\"installation_timeout_dialog_title\">Installation Zeitüberschreitung</string>\n  <string name=\"installation_failed_description\">Die Installation ist aus unbekanntem Grund fehlgeschlagen. Erneut versuchen?</string>\n  <string name=\"installation_aborted_description\">Die Installation wurde manuell abgebrochen. Erneut versuchen?</string>\n  <string name=\"installation_blocked_description\">Die Installation wurde blockiert. Überprüfen Sie Ihre Gerätesicherheitseinstellungen und versuchen Sie es erneut.</string>\n  <string name=\"installation_conflict_description\">Die Installation wurde durch eine vorhandene Installation der App verhindert. Deinstallieren Sie die installierte App und versuchen Sie es erneut?</string>\n  <string name=\"installation_incompatible_description\">Die App ist mit diesem Gerät inkompatibel. Verwenden Sie eine APK, die mit diesem Gerät kompatibel ist, und versuchen Sie es erneut.</string>\n  <string name=\"installation_invalid_description\">Die App ist ungültig. Deinstallieren Sie die App und versuchen Sie es erneut?</string>\n  <string name=\"installation_storage_issue_description\">Die App konnte aufgrund unzureichenden Speicherplatzes nicht installiert werden. Geben Sie etwas Speicherplatz frei und versuchen Sie es erneut.</string>\n  <string name=\"installation_timeout_description\">Die Installation dauerte zu lange. Erneut versuchen?</string>\n  <string name=\"reinstall\">Neu installieren</string>\n  <string name=\"show\">Anzeigen</string>\n  <string name=\"debugging\">Debugging</string>\n  <string name=\"about_device\">Über das Gerät</string>\n  <string name=\"enter_url\">URL eingeben</string>\n  <string name=\"next\">Weiter</string>\n  <string name=\"auto_update\">Auto-Update</string>\n  <string name=\"add_patches\">Patches hinzufügen</string>\n  <string name=\"auto_update_description\">Automatisch aktualisieren, wenn eine neue Version verfügbar ist</string>\n  <string name=\"patches_prereleases\">Vorabversionen verwenden</string>\n  <string name=\"patches_prereleases_description\">Vorabversionen von %s verwenden</string>\n  <string name=\"patches_url\">Patches-URL</string>\n  <string name=\"incompatible_patches_dialog\">Diese Patches sind nicht mit der ausgewählten App-Version (%1$s) kompatibel.\n\nKlicken Sie auf die Patches, um weitere Details anzuzeigen.</string>\n  <string name=\"incompatible_patch\">Inkompatibler Patch</string>\n  <string name=\"any_version\">Beliebig</string>\n  <string name=\"never_show_again\">Nie wieder anzeigen</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Update-Meldung beim Start anzeigen</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Eine Popup-Benachrichtigung anzeigen, wenn beim Start ein neues Update verfügbar ist</string>\n  <string name=\"failed_to_import_keystore\">Fehler beim Importieren des Keystores</string>\n  <string name=\"export\">Exportieren</string>\n  <string name=\"confirm\">Bestätigen</string>\n  <string name=\"new_announcement\">Neue Ankündigung:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d Patch</item>\n    <item quantity=\"other\">%d Patches</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Führe %d Patch aus</item>\n    <item quantity=\"other\">Führe %d Patches aus</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d ausgewählt</item>\n    <item quantity=\"other\">%d ausgewählt</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-el-rGR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Τροποποιητής</string>\n  <string name=\"patches\">Τροποποιήσεις</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Manager</string>\n  <string name=\"onboarding_welcome_to\">Καλώς ήρθατε στο</string>\n  <string name=\"onboarding_welcome_back\">Γεια! Είναι το νέο</string>\n  <string name=\"onboarding_apps_subtitle\">Μπορείτε να επιλέξετε εφαρμογή για τροποποίηση τώρα ή να το κάνετε αργότερα</string>\n  <string name=\"onboarding_apps_network_error\">Δεν ήταν δυνατή η φόρτωση των ενημερώσεων κώδικα επειδή το δίκτυο είναι μη διαθέσιμο ή ασταθές. Συνδεθείτε σε ένα σταθερό δίκτυο και δοκιμάστε ξανά.</string>\n  <string name=\"onboarding_updates_subtitle\">Ρυθμίστε τις αυτόματες ενημερώσεις για να διατηρείτε τον ReVanced Manager και τις τροποποιήσεις ενημερωμένα</string>\n  <string name=\"banner_sources_not_downloaded_description\">Οι ενημερώσεις κώδικα και οι λήψεις δεν ήταν δυνατό να ληφθούν κατά τη διάρκεια της ρύθμισης. Πατήστε ενημέρωση για να τις κατεβάσετε.</string>\n  <string name=\"onboarding_updates_note\">Ο ReVanced Manager θα συνδεθεί στο %s για να κατεβάσει τις αρχικές εκδόσεις εάν η συσκευή σας είναι συνδεδεμένη στο διαδίκτυο.</string>\n  <string name=\"retry\">Επανάληψη</string>\n  <string name=\"onboarding_skip\">Παράλειψη προς το παρόν</string>\n  <string name=\"onboarding_recommended_version\">Προτεινόμενη έκδοση: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Παράλειψη δικαιωμάτων;</string>\n  <string name=\"onboarding_permissions_skip_description\">Χωρίς τα απαιτούμενα δικαιώματα, ορισμένες λειτουργίες ενδέχεται να μην λειτουργούν σωστά. Μπορείτε να τα παραχωρήσετε αργότερα στις ρυθμίσεις της εφαρμογής.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Παράλειψη ούτως ή άλλως</string>\n  <string name=\"onboarding_permissions_subtitle\">Ο ReVanced Manager χρειάζεται ορισμένα δικαιώματα για να λειτουργήσει σωστά</string>\n  <string name=\"permission_install_apps\">Εγκατάσταση άγνωστων εφαρμογών</string>\n  <string name=\"permission_install_apps_description\">Απαιτείται για την εγκατάσταση τροποποιημένων εφαρμογών</string>\n  <string name=\"permission_notifications\">Ειδοποιήσεις</string>\n  <string name=\"permission_notifications_description\">Επιτρέπει την αδιάλειπτη τροποποίηση στο παρασκήνιο</string>\n  <string name=\"permission_battery\">Βελτιστοποίηση μπαταρίας</string>\n  <string name=\"permission_battery_description\">Αποτρέπει τη διακοπή της τροποποίησης στο παρασκήνιο</string>\n  <string name=\"permission_grant\">Παραχώρηση</string>\n  <string name=\"downloader_host_permission_label\">Εξυπηρετητής προγράμματος λήψης ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Χρησιμοποιείται για τον έλεγχο της πρόσβασης στα προγράμματα λήψης του ReVanced Manager. Μόνο ο ReVanced Manager το διαθέτει αυτό.</string>\n  <string name=\"toast_copied_to_clipboard\">Αντιγράφηκε!</string>\n  <string name=\"copy_to_clipboard\">Αντιγραφή στο πρόχειρο</string>\n  <string name=\"dashboard\">Πίνακας ελέγχου</string>\n  <string name=\"settings\">Ρυθμίσεις</string>\n  <string name=\"select_app\">Επιλέξτε μια εφαρμογή</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d επιλεγμένα</string>\n  <string name=\"fab_patch_app\">Τροποποίηση εφαρμογής</string>\n  <string name=\"fab_add_patches\">Προσθήκη τροποποιήσεων</string>\n  <string name=\"new_downloader_notification\">Νέα διαθέσιμα προγράμματα λήψης. Πατήστε εδώ για να τα ρυθμίσετε.</string>\n  <string name=\"unsupported_architecture_warning\">Η τροποποίηση σε αυτήν την αρχιτεκτονική συσκευής δεν υποστηρίζεται και πιθανότατα θα αποτύχει.</string>\n  <string name=\"import_\">Εισαγωγή</string>\n  <string name=\"import_patches\">Εισαγωγή τροποποιήσεων</string>\n  <string name=\"file_field_set\">Επιλεγμένο</string>\n  <string name=\"file_field_not_set\">Μη επιλεγμένο</string>\n  <string name=\"field_not_set\">Μη ορισμένο</string>\n  <string name=\"patches_missing\">Λείπει</string>\n  <string name=\"patches_error\">Σφάλμα</string>\n  <string name=\"patches_error_description\">Δεν ήταν δυνατή η φόρτωση των τροποποιήσεων. Πατήστε για να δείτε το σφάλμα</string>\n  <string name=\"patches_not_downloaded\">Οι ενημερώσεις δεν έχουν ληφθεί.</string>\n  <string name=\"patches_name_default\">Τροποποιήσεις</string>\n  <string name=\"patches_name_fallback\">Χωρίς Όνομα</string>\n  <string name=\"android_11_bug_dialog_title\">Σφάλμα Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">Η άδεια εγκατάστασης εφαρμογών πρέπει να χορηγηθεί εκ των προτέρων για να αποφευχθεί ένα σφάλμα του συστήματος Android 11 που θα επηρεάσει αρνητικά την εμπειρία του χρήστη.</string>\n  <string name=\"no_network_toast\">Δεν υπάρχει διαθέσιμη σύνδεση στο διαδίκτυο</string>\n  <string name=\"selected_app_meta_any_version\">Οποιαδήποτε διαθέσιμη έκδοση</string>\n  <string name=\"app_source_dialog_title\">Επιλέξτε πηγή</string>\n  <string name=\"app_source_dialog_option_auto\">Αυτόματη</string>\n  <string name=\"app_source_dialog_option_auto_description\">Χρήση εγκατεστημένης εφαρμογής, μετά κατεβασμένο APK, μετά διαθέσιμα προγράμματα λήψης</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Δεν βρέθηκε συμβατή εφαρμογή ή διαθέσιμα προγράμματα λήψης</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Οι εγκατεστημένες εφαρμογές δεν μπορούν να τροποποιηθούν ξανά χωρίς πρόσβαση root</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Η έκδοση %s δεν ταιριάζει με την προτεινόμενη έκδοση</string>\n  <string name=\"patch_item_description\">Έναρξη τροποποίησης της εφαρμογής</string>\n  <string name=\"patch_selector_item\">Επιλέξτε τροποποιήσεις</string>\n  <string name=\"patch_selector_item_description\">%d τροποποιήσεις επιλέχθηκαν</string>\n  <string name=\"patch_selection_changed_warning\">Η επιλογή ενημερώσεων έχει αλλάξει</string>\n  <string name=\"no_patches_selected\">Δεν έχουν επιλεχθεί τροποποιήσεις</string>\n  <string name=\"network_unavailable_warning\">Η συσκευή σας δεν είναι συνδεδεμένη στο διαδίκτυο. Η λήψη θα αποτύχει αργότερα.</string>\n  <string name=\"network_metered_warning\">Είστε αυτήν τη στιγμή σε σύνδεση με περιορισμένα δεδομένα. Ενδέχεται να ισχύουν χρεώσεις δεδομένων από τον πάροχο υπηρεσιών σας.</string>\n  <string name=\"apk_source_selector_item\">Επιλέξτε πηγή APK</string>\n  <string name=\"apk_source_auto\">Αυτόματη</string>\n  <string name=\"apk_source_auto_installed\">Αυτόματη · Χρήση εγκατεστημένου APK</string>\n  <string name=\"apk_source_auto_downloaded\">Αυτόματη · Χρήση κατεβασμένου APK</string>\n  <string name=\"apk_source_auto_downloader\">Αυτόματη · Χρήση διαθέσιμων προγραμμάτων λήψης</string>\n  <string name=\"apk_source_auto_storage\">Αυτόματη · Επιλογή από τον αποθηκευτικό χώρο</string>\n  <string name=\"apk_source_downloader\">Χρήση %s</string>\n  <string name=\"apk_source_installed\">Χρήση εγκατεστημένου APK</string>\n  <string name=\"apk_source_local\">Χρήση τοπικού αρχείου APK</string>\n  <string name=\"apk_source_downloaded\">Ήδη κατεβασμένο</string>\n  <string name=\"legacy_import_failed\">Δεν ήταν δυνατή η εισαγωγή παλιών ρυθμίσεων</string>\n  <string name=\"auto_updates_dialog_title\">Ρύθμιση ενημερώσεων</string>\n  <string name=\"auto_updates_dialog_description\">Θέλετε ο ReVanced Manager να ελέγχει περιοδικά για ενημερώσεις για τα ακόλουθα στοιχεία;</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Τροποποιήσεις ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Προγράμματα λήψης</string>\n  <string name=\"auto_updates_dialog_note\">Αυτές οι ρυθμίσεις μπορούν να αλλάξουν αργότερα.\n\n    Ο ReVanced Manager θα συνδεθεί στο %s για να κατεβάσει τις αρχικές εκδόσεις εάν η συσκευή σας είναι συνδεδεμένη στο διαδίκτυο.</string>\n  <string name=\"announcements_filter_tag\">Φιλτράρισμα ανά ετικέτα</string>\n  <string name=\"announcements_show_archived\">Εμφάνιση αρχειοθετημένων</string>\n  <string name=\"general\">Γενικά</string>\n  <string name=\"general_description\">Γλώσσα, θέμα, δυναμικό χρώμα</string>\n  <string name=\"updates\">Ενημερώσεις</string>\n  <string name=\"updates_description\">Έλεγχος για ενημερώσεις και προβολή ιστορικού αλλαγών</string>\n  <string name=\"downloads\">Λήψεις</string>\n  <string name=\"downloads_description\">Προγράμματα λήψης και κατεβασμένες εφαρμογές</string>\n  <string name=\"import_export\">Εισαγωγή &amp; εξαγωγή</string>\n  <string name=\"import_export_description\">Keystore, επιλογή και παράμετροι τροποιήσεων</string>\n  <string name=\"advanced\">Για προχωρημένους</string>\n  <string name=\"advanced_description\">Διεύθυνση URL API, όριο μνήμης, εντοπισμός σφαλμάτων</string>\n  <string name=\"safeguards_toggled_warning\">Οι ρυθμίσεις ασφαλείας έχουν αλλαχτεί</string>\n  <string name=\"about\">Σχετικά με</string>\n  <string name=\"about_app_name\">Σχετικά με %1$s</string>\n  <string name=\"opensource_licenses\">Άδειες ανοιχτού κώδικα</string>\n  <string name=\"opensource_licenses_description\">Προβολή όλων των βιβλιοθηκών που χρησιμοποιήθηκαν για τη δημιουργία αυτής της εφαρμογής</string>\n  <string name=\"contributors\">Συνεισφέροντες</string>\n  <string name=\"contributors_description\">Προβολή των συνεισφερόντων του ReVanced</string>\n  <string name=\"dynamic_color\">Δυναμικό χρώμα</string>\n  <string name=\"dynamic_color_description\">Προσαρμογή χρωμάτων στην ταπετσαρία</string>\n  <string name=\"pure_black_theme\">Σκέτο μαύρο θέμα</string>\n  <string name=\"pure_black_theme_description\">Χρήση σκέτων μαύρων φόντων για το σκούρο θέμα</string>\n  <string name=\"theme\">Θέμα</string>\n  <string name=\"theme_description\">Επιλέξτε μεταξύ ανοιχτού ή σκούρου θέματος</string>\n  <string name=\"language\">Γλώσσα</string>\n  <string name=\"language_description\">Επιλέξτε τη γλώσσα εμφάνισης της εφαρμογής</string>\n  <string name=\"language_system_default\">Προεπιλογή συστήματος</string>\n  <string name=\"search_languages\">Αναζήτηση γλωσσών…</string>\n  <string name=\"safeguards\">Διασφαλίσεις</string>\n  <string name=\"patch_compat_check\">Απενεργοποίηση ελέγχου συμβατότητας έκδοσης</string>\n  <string name=\"patch_compat_check_description\">Να μην περιορίζονται οι τροποποιήσεις σε συμβατές εκδόσεις εφαρμογών</string>\n  <string name=\"patch_compat_check_confirmation\">Η επιλογή μη συμβατών τροποποιήσεων μπορεί να προκαλέσει προβλήματα στη λειτουργία της εφαρμογής.\n\nΘέλετε να συνεχίσετε ούτως ή άλλως;</string>\n  <string name=\"suggested_version_safeguard\">Να απαιτείται η προτεινόμενη έκδοση εφαρμογής</string>\n  <string name=\"suggested_version_safeguard_description\">Επιβολή επιλογής της προτεινόμενης έκδοσης εφαρμογής</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Η επιλογή μιας εφαρμογής που δεν είναι η προτεινόμενη έκδοση ενδέχεται να προκαλέσει απρόβλεπτα προβλήματα.\n\nΘέλετε να συνεχίσετε ούτως ή άλλως;</string>\n  <string name=\"patch_selection_safeguard\">Να επιτρέπεται η αλλαγή επιλογής και παραμέτρων τροποποιήσεων</string>\n  <string name=\"patch_selection_safeguard_description\">Να επιτρέπεται η επιλογή και η αποεπιλογή των τροποποιήσεων, καθώς και η προσαρμογή των παραμέτρων τους</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Η αλλαγή της επιλογής τροποποιήσεων μπορεί να προκαλέσει απρόβλεπτα προβλήματα.\n\nΕνεργοποίηση ούτως ή άλλως;</string>\n  <string name=\"universal_patches_safeguard\">Να επιτρέπεται η χρήση καθολικών τροποποιήσεων</string>\n  <string name=\"universal_patches_safeguard_description\">Να μην αποτρέπεται η χρήση καθολικών τροποποιήσεων</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Οι καθολικές τροποποιήσεις δεν έχουν δοκιμαστεί τόσο καλά όσο εκείνες που στοχεύουν σε συγκεκριμένες εφαρμογές.\n\nΕνεργοποίηση ούτως ή άλλως;</string>\n  <string name=\"keystore\">Keystore</string>\n  <string name=\"patches_selections\">Επιλογές τροποποιήσεων</string>\n  <string name=\"import_keystore\">Εισαγωγή keystore</string>\n  <string name=\"import_keystore_description\">Εισαγωγή προσαρμοσμένου keystore</string>\n  <string name=\"import_keystore_dialog_title\">Εισαγάγετε τα διαπιστευτήρια του keystore</string>\n  <string name=\"import_keystore_dialog_description\">Θα χρειαστεί να εισαγάγετε τα διαπιστευτήρια του keystore για να το εισαγάγετε.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Όνομα χρήστη (Ψευδώνυμο)</string>\n  <string name=\"import_keystore_dialog_password_field\">Κωδικός πρόσβασης</string>\n  <string name=\"import_keystore_dialog_button\">Εισαγωγή</string>\n  <string name=\"import_keystore_wrong_credentials\">Λανθασμένα διαπιστευτήρια keystore</string>\n  <string name=\"import_keystore_success\">Το keystore εισήχθη επιτυχώς</string>\n  <string name=\"export_keystore\">Εξαγωγή keystore</string>\n  <string name=\"export_keystore_description\">Εξαγωγή του τρέχοντος keystore</string>\n  <string name=\"export_keystore_unavailable\">Δεν υπάρχει keystore για εξαγωγή</string>\n  <string name=\"export_keystore_success\">Το keystore εξήχθη επιτυχώς</string>\n  <string name=\"regenerate_keystore\">Επαναδημιουργία keystore</string>\n  <string name=\"regenerate_keystore_description\">Δημιουργία νέου keystore</string>\n  <string name=\"regenerate_keystore_dialog_description\">Πρόκειται να επαναδημιουργήσετε το keystore που θα χρησιμοποιήσει ο manager κατά τη διαδικασία τροποποίησης.\n\nΔεν θα μπορείτε να ενημερώσετε τις προηγουμένως εγκατεστημένες εφαρμογές από αυτήν την πηγή.</string>\n  <string name=\"regenerate_keystore_success\">Το keystore αντικαταστάθηκε επιτυχώς</string>\n  <string name=\"import_patch_selection\">Εισαγωγή επιλογής τροποποιήσεων</string>\n  <string name=\"import_patch_selection_description\">Εισαγωγή επιλεγμένων τροποποιήσεων από αρχείο JSON</string>\n  <string name=\"import_patch_selection_fail\">Δεν ήταν δυνατή η εισαγωγή επιλογής τροποποιήσεων: %s</string>\n  <string name=\"import_patch_selection_success\">Η επιλογή τροποποιήσεων εισήχθη επιτυχώς</string>\n  <string name=\"select_bundle_for_import\">Επιλέξτε πακέτο για εισαγωγή</string>\n  <string name=\"export_patch_selection\">Εξαγωγή επιλογής τροποποιήσεων</string>\n  <string name=\"export_patch_selection_description\">Εξαγωγή επιλεγμένων τροποποιήσεων σε αρχείο JSON</string>\n  <string name=\"export_patch_selection_fail\">Δεν ήταν δυνατή η εξαγωγή επιλογής τροποποιήσεων: %s</string>\n  <string name=\"export_patch_selection_success\">Η επιλογή τροποποιήσεων εξήχθη επιτυχώς</string>\n  <string name=\"select_bundle_for_export\">Επιλέξτε πακέτο για εξαγωγή</string>\n  <string name=\"patch_selection_packages\">Εφαρμογές με αποθηκευμένες επιλογές</string>\n  <string name=\"patch_selection_entries\">Σύνολο επιλεγμένων τροποποιήσεων</string>\n  <string name=\"reset_configuration\">Επαναφορά διαμόρφωσης</string>\n  <string name=\"reset_patch_selection\">Επιλογές τροποποιήσεων</string>\n  <string name=\"reset_patch_selection_description\">Επαναφορά των αποθηκευμένων επιλεγμένων τροποποιήσεων</string>\n  <string name=\"reset_patch_options\">Παράμετροι τροποποιήσεων</string>\n  <string name=\"reset_patch_options_description\">Επαναφορά των αποθηκευμένων παραμέτρων τροποποιήσεων</string>\n  <string name=\"reset_patch_selection_success\">Η επιλογή τροποποιήσεων επαναφέρθηκε επιτυχώς</string>\n  <string name=\"patch_selection_reset_all\">Επαναφορά επιλογής τροποποιήσεων καθολικά</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Πρόκειται να επαναφέρετε όλες τις επιλογές τροποποιήσεων. Θα χρειαστεί να επιλέξετε χειροκίνητα κάθε τροποποίηση ξανά.</string>\n  <string name=\"patch_selection_reset_all_description\">Επαναφέρει όλες τις επιλογές τροποποιήσεων</string>\n  <string name=\"patch_selection_reset_package\">Επαναφορά επιλογής τροποποιήσεων για εφαρμογή</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Πρόκειται να επαναφέρετε την επιλογή τροποποιήσεων για την εφαρμογή \\\"%s\\\". Θα χρειαστεί να επιλέξετε χειροκίνητα κάθε τροποποίηση ξανά.</string>\n  <string name=\"patch_selection_reset_package_description\">Επαναφέρει την επιλογή τροποποιήσεων για μία μόνο εφαρμογή</string>\n  <string name=\"patch_selection_reset_patches\">Επαναφορά επιλογής τροποποιήσεων (μεμονωμένο)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Πρόκειται να επαναφέρετε την επιλογή τροποποιήσεων για το \\\"%s\\\". Θα πρέπει να επιλέξετε χειροκίνητα κάθε τροποποίηση ξανά.</string>\n  <string name=\"patch_selection_reset_patches_description\">Επαναφέρει την επιλογή τροποποιήσεων για μια συγκεκριμένη συλλογή τροποποιήσεων</string>\n  <string name=\"patch_options_reset_package\">Επαναφορά παραμέτρων τροποποιήσεων για εφαρμογή</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Πρόκειται να επαναφέρετε τις παραμέτρους τροποποιήσεων για την εφαρμογή \\\"%s\\\". Θα πρέπει να εφαρμόσετε κάθε παράμετρο ξανά.</string>\n  <string name=\"patch_options_reset_package_description\">Επαναφέρει τις παραμέτρους τροποποιήσεων για μία μόνο εφαρμογή</string>\n  <string name=\"patch_options_reset_patches\">Επαναφορά παραμέτρων τροποποιήσεων (μεμονωμένο)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Πρόκειται να επαναφέρετε τις παραμέτρους τροποποιήσεων για το \\\"%s\\\". Θα πρέπει να εφαρμόσετε κάθε παράμετρο ξανά.</string>\n  <string name=\"patch_options_reset_patches_description\">Επαναφέρει τις παραμέτρους τροποποιήσεων για μια συγκεκριμένη συλλογή τροποποιήσεων</string>\n  <string name=\"patch_options_reset_all\">Επαναφορά παραμέτρων τροποποιήσεων καθολικά</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Πρόκειται να επαναφέρετε όλες τις παραμέτρους τροποποιήσεων. Θα πρέπει να εφαρμόσετε κάθε παράμετρο ξανά.</string>\n  <string name=\"patch_options_reset_all_description\">Επαναφέρει όλες τις παραμέτρους τροποποιήσεων</string>\n  <string name=\"downloaders\">Προγράμματα λήψης</string>\n  <string name=\"downloader_prereleases\">Χρήση πρώιμων εκδόσεων</string>\n  <string name=\"downloader_prereleases_description\">Χρήση πρώιμων εκδόσεων του κυρίου προγράμματος λήψης</string>\n  <string name=\"downloader_state_loaded\">Φορτωμένο</string>\n  <string name=\"downloader_state_failed\">Η φόρτωση απέτυχε. Πατήστε για περισσότερες λεπτομέρειες</string>\n  <string name=\"downloader_state_missing\">Λείπει</string>\n  <string name=\"downloader_delete_apps_title\">Διαγραφή επιλεγμένων εφαρμογών</string>\n  <string name=\"downloader_delete_apps_description\">Είστε βέβαιοι ότι θέλετε να διαγράψετε τις επιλεγμένες εφαρμογές;</string>\n  <string name=\"downloader_delete_single_description\">Είστε βέβαιοι ότι θέλετε να διαγράψετε το \\\"%s\\\";</string>\n  <string name=\"downloader_settings_no_apps\">Δεν βρέθηκαν κατεβασμένες εφαρμογές.</string>\n  <string name=\"downloader_settings_no_apps_description\">Οι εφαρμογές που κατεβάστηκαν μέσω του ReVanced Manager θα εμφανιστούν εδώ.</string>\n  <string name=\"downloader_url\">Εφαρμογή λήψης URL</string>\n  <string name=\"downloader_add\">Προσθήκη εφαρμογής λήψης</string>\n  <string name=\"select_downloader_type_dialog_description\">Προσθήκη νέων προγραμμάτων λήψης από URL ή τοπικά αρχεία</string>\n  <string name=\"local_downloaders_description\">Προσθήκη προγραμμάτων λήψης από τον τοπικό αποθηκευτικό χώρο.</string>\n  <string name=\"remote_downloaders_description\">Προσθήκη προγραμμάτων λήψης από σύνδεσμο URL. Μπορούν να ενημερώνονται αυτόματα.</string>\n  <string name=\"install_revanced_downloaders\">Εγκαταστήστε προγράμματα λήψης για να κατεβάζετε εφαρμογές απευθείας εντός του ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Εγκατάσταση προγραμμάτων λήψης ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Ακύρωση εγκατάστασης προγραμμάτων λήψης;</string>\n  <string name=\"cancel_downloader_install_description\">Μια εγκατάσταση προγραμμάτων λήψης βρίσκεται σε εξέλιξη. Εάν φύγετε τώρα, η λήψη θα ακυρωθεί.</string>\n  <string name=\"downloader_sources_unavailable_title\">Αυτά τα προγράμματα λήψης λείπουν</string>\n  <string name=\"downloader_sources_unavailable_description\">Πατήστε στο κουμπί ενημέρωσης για να το διορθώσετε.</string>\n  <string name=\"downloader_update_failed\">Η ενημέρωση του προγράμματος λήψης απέτυχε: %s</string>\n  <string name=\"downloader_replace_fail\">Η εισαγωγή του προγράμματος λήψης απέτυχε: %s</string>\n  <string name=\"search_apps\">Αναζήτηση εφαρμογών…</string>\n  <string name=\"loading_body\">Φόρτωση…</string>\n  <string name=\"downloading_patches\">Λήψη τροποποιήσεων…</string>\n  <string name=\"options\">Ρυθμίσεις</string>\n  <string name=\"ok\">Εντάξει</string>\n  <string name=\"yes\">Ναι</string>\n  <string name=\"no\">Όχι</string>\n  <string name=\"edit\">Επεξεργασία</string>\n  <string name=\"dialog_input_placeholder\">Τιμή</string>\n  <string name=\"reset\">Επαναφορά</string>\n  <string name=\"share\">Κοινοποίηση</string>\n  <string name=\"patch\">Τροποποίηση</string>\n  <string name=\"select_from_storage\">Επιλογή από τον αποθηκευτικό χώρο</string>\n  <string name=\"select_from_storage_description\">Επιλέξτε ένα αρχείο APK από τον αποθηκευτικό χώρο χρησιμοποιώντας την επιλογή αρχείων</string>\n  <string name=\"suggested_version_info\">Προτεινόμενη έκδοση: %s</string>\n  <string name=\"type_anything\">Πληκτρολογήστε οτιδήποτε για να συνεχίσετε</string>\n  <string name=\"search\">Αναζήτηση τροποποιήσεων…</string>\n  <string name=\"apply\">Εφαρμογή</string>\n  <string name=\"help\">Βοήθεια</string>\n  <string name=\"back\">Πίσω</string>\n  <string name=\"warning\">Προειδοποίηση</string>\n  <string name=\"add\">Προσθήκη</string>\n  <string name=\"enable\">Ενεργοποίηση</string>\n  <string name=\"disable\">Απενεργοποίηση</string>\n  <string name=\"close\">Κλείσιμο</string>\n  <string name=\"clear\">Εκκαθάριση</string>\n  <string name=\"system\">Συστήματος</string>\n  <string name=\"light\">Ανοιχτό</string>\n  <string name=\"dark\">Σκούρο</string>\n  <string name=\"appearance\">Εμφάνιση</string>\n  <string name=\"networking\">Δίκτυο</string>\n  <string name=\"allow_metered_networks\">Να επιτρέπονται δίκτυα με χρέωση</string>\n  <string name=\"allow_metered_networks_description\">Επιτρέπει τις αυτόματες ενημερώσεις σε δίκτυα με χρέωση.\n    Η εφαρμογή ενδέχεται να εξακολουθεί να προειδοποιεί για μετρημένα δίκτυα για χειροκίνητες λειτουργίες.</string>\n  <string name=\"downloaded_apps\">Κατεβασμένες εφαρμογές</string>\n  <string name=\"process_runtime\">Εκτέλεση του τροποποιητή σε άλλη διεργασία (πειραματικό)</string>\n  <string name=\"process_runtime_description\">Αυτό είναι ταχύτερο και επιτρέπει στο πρόγραμμα τροποποίησης να χρησιμοποιεί περισσότερη μνήμη</string>\n  <string name=\"process_runtime_memory_limit\">Όριο μνήμης διεργασίας τροποποιητή</string>\n  <string name=\"process_runtime_memory_limit_description\">Η μέγιστη ποσότητα μνήμης που μπορεί να χρησιμοποιήσει η διεργασία του προγράμματος τροποποίησης</string>\n  <string name=\"debug_logs_export\">Εξαγωγή αρχείων καταγραφής εντοπισμού σφαλμάτων</string>\n  <string name=\"debug_logs_export_read_failed\">Η ανάγνωση αρχείων απέτυχε (κωδικός εξόδου %d)</string>\n  <string name=\"debug_logs_export_failed\">Η εξαγωγή αρχείων καταγραφής απέτυχε</string>\n  <string name=\"debug_logs_export_success\">Τα αρχεία καταγραφής εξήχθησαν επιτυχώς</string>\n  <string name=\"api_url\">URL του API</string>\n  <string name=\"api_url_description\">Το API που χρησιμοποιείται για τη λήψη απαραίτητων αρχείων</string>\n  <string name=\"api_url_dialog_title\">Αλλαγή διεύθυνσης API</string>\n  <string name=\"api_url_dialog_description\">Αλλαγή URL του API του ReVanced Manager. Το ReVanced Manager χρησιμοποιεί το API για τη λήψη τροποποιήσεων και ενημερώσεων.</string>\n  <string name=\"api_url_dialog_warning\">Το ReVanced Manager συνδέεται με το API για τη λήψη τροποποιήσεων και ενημερώσεων. Βεβαιωθείτε ότι το εμπιστεύεστε.</string>\n  <string name=\"api_url_dialog_save\">Ορισμός</string>\n  <string name=\"api_url_dialog_reset\">Επαναφορά URL του API</string>\n  <string name=\"device\">Συσκευή</string>\n  <string name=\"device_android_version\">Έκδοση Android</string>\n  <string name=\"device_model\">Μοντέλο</string>\n  <string name=\"device_architectures\">Αρχιτεκτονικές CPU</string>\n  <string name=\"device_memory_limit\">Όρια μνήμης</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Κανονικό) - %2$dMB (Μεγάλο)</string>\n  <string name=\"patches_force_download\">Αναγκαστική λήψη όλων των τροποποιήσεων</string>\n  <string name=\"patches_reset\">Επαναφορά τροποποιήσεων</string>\n  <string name=\"reset_onboarding\">Επαναφορά εισαγωγικής οθόνης</string>\n  <string name=\"reset_onboarding_description\">Εμφάνιση της εισαγωγικής οθόνης στην επόμενη εκκίνηση της εφαρμογής</string>\n  <string name=\"patching\">Τροποποίηση</string>\n  <string name=\"signing\">Υπογραφή</string>\n  <string name=\"storage\">Αποθηκευτικός χώρος</string>\n  <string name=\"no_patch_found\">Δεν βρέθηκε καμία τροποποίηση. Ελέγξτε τις τροποποιήσεις σας</string>\n  <string name=\"tab_apps\">Εφαρμογές</string>\n  <string name=\"tab_patches\">Τροποποιήσεις</string>\n  <string name=\"delete\">Διαγραφή</string>\n  <string name=\"refresh\">Ανανέωση</string>\n  <string name=\"continue_anyways\">Συνέχεια ούτως ή άλλως</string>\n  <string name=\"download_another_version\">Λήψη άλλης έκδοσης</string>\n  <string name=\"download_app\">Λήψη εφαρμογής</string>\n  <string name=\"download_apk\">Λήψη αρχείου APK</string>\n  <string name=\"patches_download_fail\">Η λήψη τροποποιήσεων απέτυχε: %s</string>\n  <string name=\"api_not_working_title\">Η υπηρεσία API είναι προσωρινά εκτός λειτουργίας</string>\n  <string name=\"api_not_working_description\">Ορισμένες λειτουργίες ενδέχεται να επηρεαστούν. Ελέγξτε τη σύνδεσή σας ή το URL του API στις ρυθμίσεις.</string>\n  <string name=\"patches_replace_fail\">Η εισαγωγή τροποποιήσεων απέτυχε: %s</string>\n  <string name=\"no_patched_apps_found\">Δεν βρέθηκαν τροποποιημένες εφαρμογές</string>\n  <string name=\"no_patched_apps_description\">Προς το παρόν δεν έχετε καμία τροποποιημένη εφαρμογή που να γνωρίζουμε. Αλλάξτε το αυτό τροποποιώντας την πρώτη σας εφαρμογή!</string>\n  <string name=\"patched_apps_section_title\">Τροποποιημένες εφαρμογές</string>\n  <string name=\"patchable_apps_section_title\">Εφαρμογές που μπορούν να τροποποιηθούν</string>\n  <string name=\"no_patches_found\">Δεν βρέθηκαν τροποποιήσεις</string>\n  <string name=\"no_patches_description\">Δεν έχετε τροποποιήσεις ακόμη. Προσθέστε τροποποιήσεις πατώντας το παρακάτω κουμπί!</string>\n  <string name=\"tap_on_patches\">Πατήστε στις τροποποιήσεις για περισσότερες πληροφορίες σχετικά με αυτές</string>\n  <string name=\"patches_selected\">%s επιλεγμένες</string>\n  <string name=\"incompatible_patches\">Μη συμβατές τροποποιήσεις</string>\n  <string name=\"universal_patches\">Καθολικές τροποποιήσεις</string>\n  <string name=\"patch_selection_reset_toast\">Η επιλογή και οι παράμετροι τροποποιήσεων επαναφέρθηκαν στις προτεινόμενες προεπιλογές</string>\n  <string name=\"patch_options_reset_toast\">Οι παράμετροι τροποποιήσεων επαναφέρθηκαν</string>\n  <string name=\"non_suggested_version_warning_title\">Μη προτεινόμενη έκδοση</string>\n  <string name=\"non_suggested_version_warning_description\">Η έκδοση της εφαρμογής που επιλέξατε δεν ταιριάζει με την προτεινόμενη έκδοση.\nΠαρακαλούμε χρησιμοποιήστε την προτεινόμενη έκδοση: %s\n\nΓια να συνεχίσετε ούτως ή άλλως, απενεργοποιήστε την επιλογή «Να απαιτείται η προτεινόμενη έκδοση εφαρμογής» στις ρυθμίσεις για προχωρημένους.</string>\n  <string name=\"selection_warning_title\">Να σταματήσει η χρήση των προεπιλογών;</string>\n  <string name=\"selection_warning_description\">Συνιστάται η χρήση της προεπιλεγμένης επιλογής τροποποιήσεων και των παραμέτρων τους. Η αλλαγή τους μπορεί να προκαλέσει απρόβλεπτα προβλήματα.\n\nΠρέπει να ενεργοποιήσετε την επιλογή «Να επιτρέπεται η αλλαγή επιλογής και παραμέτρων τροποποιήσεων» στις ρυθμίσεις για προχωρημένους πριν την αλλαγή των τροποποιήσεων.</string>\n  <string name=\"universal_patch_warning_description\">Οι καθολικές τροποποιήσεις έχουν πιο γενικευμένη χρήση και δεν λειτουργούν τόσο αξιόπιστα όσο οι τροποποιήσεις που στοχεύουν σε συγκεκριμένες εφαρμογές. Μπορεί να αντιμετωπίσετε προβλήματα κατά τη χρήση τους.\n\nΠρέπει να ενεργοποιήσετε την επιλογή «Να επιτρέπεται η χρήση καθολικών τροποποιήσεων» στις ρυθμίσεις για προχωρημένους πριν τη χρήση καθολικών τροποποιήσεων.</string>\n  <string name=\"this_version\">Αυτή η έκδοση</string>\n  <string name=\"universal\">Οποιαδήποτε εφαρμογή</string>\n  <string name=\"search_patches\">Αναζήτηση τροποποιήσεων</string>\n  <string name=\"app_version_not_compatible\">Αυτή η τροποποίηση δεν είναι συμβατή με την επιλεγμένη έκδοση εφαρμογής (%1$s)\n\nΕίναι συμβατή μόνο με τις ακόλουθες εκδόσεις: %2$s</string>\n  <string name=\"continue_with_version\">Συνέχεια με αυτή την έκδοση;</string>\n  <string name=\"version_not_compatible\">Δεν είναι όλες οι τροποποιήσεις συμβατές με αυτήν την έκδοση (%s). Θέλετε να συνεχίσετε ούτως ή άλλως;</string>\n  <string name=\"download_application\">Λήψη εφαρμογής;</string>\n  <string name=\"app_not_installed\">Η εφαρμογή που επιλέξατε δεν είναι εγκατεστημένη. Θέλετε να την κατεβάσετε;</string>\n  <string name=\"failed_to_load_apk\">Η φόρτωση APK απέτυχε</string>\n  <string name=\"split_apk_not_supported\">Τα split APK δεν μπορούν να τροποποιηθούν</string>\n  <string name=\"loading\">Φόρτωση…</string>\n  <string name=\"not_installed\">Μη εγκατεστημένη</string>\n  <string name=\"installed\">Εγκατεστημένη</string>\n  <string name=\"app_info\">Πληροφορίες εφαρμογής</string>\n  <string name=\"uninstall\">Απεγκατάσταση</string>\n  <string name=\"unpatch\">Αναίρεση τροποποιήσεων</string>\n  <string name=\"repatch\">Επανεφαρμογή τροποποιήσεων</string>\n  <string name=\"install_type\">Τύπος εγκατάστασης</string>\n  <string name=\"package_name\">Όνομα πακέτου</string>\n  <string name=\"original_package_name\">Αρχικό όνομα πακέτου</string>\n  <string name=\"applied_patches\">Εφαρμοσμένες τροποποιήσεις</string>\n  <string name=\"view_applied_patches\">Προβολή εφαρμοσμένων τροποποιήσεων</string>\n  <string name=\"default_install\">Προεπιλογή</string>\n  <string name=\"mount_install\">Mount</string>\n  <string name=\"mounted\">Mounted (Ενεργό)</string>\n  <string name=\"not_mounted\">Δεν είναι mounted</string>\n  <string name=\"mount\">Mount</string>\n  <string name=\"unmount\">Κατάργηση Mount</string>\n  <string name=\"failed_to_mount\">Η εγκατάσταση Mount απέτυχε: %s</string>\n  <string name=\"failed_to_unmount\">Η κατάργηση Mount απέτυχε: %s</string>\n  <string name=\"unpatch_app\">Αναίρεση τροποποίησης εφαρμογής;</string>\n  <string name=\"unpatch_description\">Είστε βέβαιοι ότι θέλετε να αναιρέσετε την τροποποίηση αυτής της εφαρμογής;</string>\n  <string name=\"downloader_invalid_version\">Το πρόγραμμα λήψης δεν κατέβασε τη σωστή έκδοση</string>\n  <string name=\"downloader_app_not_found\">Το πρόγραμμα λήψης δεν βρήκε την εφαρμογή</string>\n  <string name=\"downloader_error\">Σφάλμα προγράμματος λήψης: %s</string>\n  <string name=\"no_downloaders_installed\">Δεν έχουν εγκατασταθεί προγράμματα λήψης!</string>\n  <string name=\"no_downloaders_trusted\">Κανένα πρόγραμμα λήψης δεν έχει εμπιστευτεί! Παρακαλώ ελέγξτε τις ρυθμίσεις σας.</string>\n  <string name=\"already_patched\">Τροποποιήθηκε ήδη</string>\n  <string name=\"patch_selector_sheet_filter_title\">Φίλτρο</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Συμβατότητα</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Πακέτα</string>\n  <string name=\"patch_selector_sheet_actions_title\">Ενέργειες</string>\n  <string name=\"restore_default_selection\">Επαναφορά προεπιλεγμένης επιλογής</string>\n  <string name=\"deselect_all\">Αποεπιλογή όλων</string>\n  <string name=\"invert_selection\">Αντιστροφή επιλογής</string>\n  <string name=\"deselect_all_except\">Αποεπιλογή όλων εκτός από %s</string>\n  <string name=\"scope_dialog_title\">Εφαρμογή σε</string>\n  <string name=\"scope_all_patches\">Όλες τις τροποποιήσεις</string>\n  <string name=\"scope_bundle_patches\">Μόνο %s</string>\n  <string name=\"string_option_menu_description\">Περισσότερες ρυθμίσεις</string>\n  <string name=\"option_preset_custom_value\">Προσαρμοσμένη τιμή</string>\n  <string name=\"path_selector\">Επιλογή από τον αποθηκευτικό χώρο</string>\n  <string name=\"path_selector_parent_dir\">Προηγούμενος φάκελος</string>\n  <string name=\"path_selector_dirs\">Φάκελοι</string>\n  <string name=\"path_selector_files\">Αρχεία</string>\n  <string name=\"show_password_field\">Εμφάνιση κωδικού πρόσβασης</string>\n  <string name=\"hide_password_field\">Απόκρυψη κωδικού πρόσβασης</string>\n  <string name=\"installer\">Πρόγραμμα εγκατάστασης</string>\n  <string name=\"install_app\">Εγκατάσταση</string>\n  <string name=\"install_app_success\">Η εφαρμογή εγκαταστάθηκε επιτυχώς</string>\n  <string name=\"install_app_fail\">Η εγκατάσταση εφαρμογής απέτυχε: %s</string>\n  <string name=\"reinstall_app_fail\">Η επανεγκατάσταση εφαρμογής απέτυχε: %s</string>\n  <string name=\"uninstall_app_fail\">Η απεγκατάσταση εφαρμογής απέτυχε: %s</string>\n  <string name=\"open_app\">Άνοιγμα</string>\n  <string name=\"save_apk\">Αποθήκευση APK</string>\n  <string name=\"save_apk_success\">Το APK αποθηκεύτηκε</string>\n  <string name=\"sign_fail\">Η υπογραφή APK απέτυχε: %s</string>\n  <string name=\"save_logs\">Αποθήκευση αρχείων καταγραφής</string>\n  <string name=\"save_as_file\">Αποθήκευση σε αρχεία</string>\n  <string name=\"export_patcher_logs\">Εξαγωγή αρχείων καταγραφής τροποποίησης</string>\n  <string name=\"save_logs_success\">Τα αρχεία καταγραφής αποθηκεύτηκαν</string>\n  <string name=\"downloader_activity_dialog_body\">Απαιτείται αλληλεπίδραση χρήστη για να προχωρήσετε με αυτό το πρόγραμμα λήψης.</string>\n  <string name=\"select_install_type\">Επιλέξτε τύπο εγκατάστασης</string>\n  <string name=\"patcher_step_group_preparing\">Προετοιμασία</string>\n  <string name=\"patcher_step_load_patches\">Φόρτωση τροποποιήσεων</string>\n  <string name=\"patcher_step_unpack\">Προετοιμασία τροποποιητή</string>\n  <string name=\"patcher_step_group_patching\">Τροποποίηση</string>\n  <string name=\"patcher_step_group_saving\">Αποθήκευση</string>\n  <string name=\"patcher_step_write_patched\">Εγγραφή τροποποιημένου αρχείου APK</string>\n  <string name=\"patcher_step_sign_apk\">Υπογραφή τροποποιημένου αρχείου APK</string>\n  <string name=\"patcher_notification_title\">Η τροποποίηση βρίσκεται σε εξέλιξη…</string>\n  <string name=\"patcher_notification_text\">Πατήστε για επιστροφή στο πρόγραμμα τροποποίησης</string>\n  <string name=\"patcher_stop_confirm_title\">Διακοπή τροποποιητή</string>\n  <string name=\"patcher_stop_confirm_description\">Είστε βέβαιοι ότι θέλετε να διακόψετε τη διαδικασία τροποποίησης;</string>\n  <string name=\"patcher_install_in_progress\">Η εγκατάσταση βρίσκεται σε εξέλιξη. Παρακαλούμε περιμένετε</string>\n  <string name=\"execute_patches\">Εκτέλεση τροποποιήσεων</string>\n  <string name=\"executing_patch\">Εκτέλεση %s</string>\n  <string name=\"failed_to_execute_patch\">Αποτυχία εκτέλεσης %s</string>\n  <string name=\"step_completed\">ολοκληρώθηκε</string>\n  <string name=\"step_failed\">απέτυχε</string>\n  <string name=\"step_running\">εκτελείται</string>\n  <string name=\"step_waiting\">σε αναμονή</string>\n  <string name=\"expand_content\">ανάπτυξη</string>\n  <string name=\"collapse_content\">σύμπτυξη</string>\n  <string name=\"drag_handle\">αναδιάταξη</string>\n  <string name=\"more\">Περισσότερα</string>\n  <string name=\"less\">Λιγότερα</string>\n  <string name=\"continue_\">Συνέχεια</string>\n  <string name=\"dismiss\">Παράβλεψη</string>\n  <string name=\"view_announcement\">Προβολή ανακοίνωσης</string>\n  <string name=\"permanent_dismiss\">Να μην εμφανιστεί ξανά</string>\n  <string name=\"donate\">Δωρεά</string>\n  <string name=\"website\">Ιστοσελίδα</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Επικοινωνία</string>\n  <string name=\"license\">Άδεια</string>\n  <string name=\"source\">Πηγή</string>\n  <string name=\"repository\">Αποθετήριο</string>\n  <string name=\"bundle_information_by_author\">Από %1$s</string>\n  <string name=\"version\">Έκδοση</string>\n  <string name=\"version_compatibility_warning\">Η επιλεγμένη έκδοση ενδέχεται να είναι ασύμβατη με τις επιλεγμένες ενημερώσεις κώδικα.</string>\n  <string name=\"submit_feedback\">Υποβολή προβλήματος ή σχολίων</string>\n  <string name=\"submit_feedback_description\">Βοηθήστε μας να βελτιώσουμε την εφαρμογή</string>\n  <string name=\"developer_options\">Επιλογές για προγραμματιστές</string>\n  <string name=\"developer_options_description\">Επιλογές για τον εντοπισμό σφαλμάτων</string>\n  <string name=\"patches_update_success\">Η ενημέρωση ολοκληρώθηκε επιτυχώς</string>\n  <string name=\"patches_update_unavailable\">Δεν υπάρχουν διαθέσιμες ενημερώσεις</string>\n  <string name=\"view_patches\">Προβολή τροποποιήσεων</string>\n  <string name=\"patches_view_any_version\">Οποιαδήποτε έκδοση</string>\n  <string name=\"patches_view_any_package\">Οποιοδήποτε πακέτο</string>\n  <string name=\"patches_delete_single_dialog_description\">Είστε βέβαιοι ότι θέλετε να διαγράψετε το \\\"%s\\\";</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Είστε βέβαιοι ότι θέλετε να διαγράψετε τις επιλεγμένες τροποποιήσεις;</string>\n  <string name=\"announcements\">Ανακοινώσεις</string>\n  <string name=\"archive\">Αρχείο</string>\n  <string name=\"about_revanced_manager\">Σχετικά με τον ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">Ο ReVanced Manager είναι μια εφαρμογή Android που χρησιμοποιεί τον τροποποιητή ReVanced για την τροποποίηση εφαρμογών Android. Σας επιτρέπει να κατεβάζετε και να τροποποιείτε εφαρμογές με προσαρμοσμένες τροποποιήσεις, και να διαχειρίζεστε τη διαδικασία τροποποίησης.</string>\n  <string name=\"developer_options_taps\">%d πατήματα απομένουν</string>\n  <string name=\"developer_options_enabled\">Οι επιλογές για προγραμματιστές ενεργοποιήθηκαν</string>\n  <string name=\"developer_options_already_enabled\">Οι επιλογές για προγραμματιστές είναι ήδη ενεργοποιημένες</string>\n  <string name=\"update_available\">Υπάρχει διαθέσιμη ενημέρωση</string>\n  <string name=\"current_version\">Τρέχουσα έκδοση: %s</string>\n  <string name=\"new_version\">Νέα έκδοση: %s</string>\n  <string name=\"ready_to_install_update\">Έτοιμο για εγκατάσταση ενημέρωσης</string>\n  <string name=\"update_completed\">Η ενημέρωση εγκαταστάθηκε</string>\n  <string name=\"install_update_manager_failed\">Η εγκατάσταση ενημέρωσης απέτυχε</string>\n  <string name=\"manual_update_check\">Έλεγχος για ενημερώσεις</string>\n  <string name=\"view_update\">Προβολή ενημέρωσης</string>\n  <string name=\"manual_update_check_description\">Μη αυτόματος έλεγχος για ενημερώσεις</string>\n  <string name=\"update_checking_manager\">Έλεγχος για ενημερώσεις κατά την εκκίνηση</string>\n  <string name=\"update_checking_manager_description\">Έλεγχος για νέες εκδόσεις του ReVanced Manager όταν ξεκινά η εφαρμογή</string>\n  <string name=\"update_checking_downloader\">Έλεγχος για ενημερώσεις προγραμμάτων λήψης ReVanced κατά την εκκίνηση</string>\n  <string name=\"update_checking_downloader_description\">Έλεγχος για ενημερώσεις εγκατεστημένων προγραμμάτων λήψεων ReVanced κατά την εκκίνηση της εφαρμογής</string>\n  <string name=\"manager_prereleases\">Χρήση πρώιμων εκδόσεων</string>\n  <string name=\"manager_prereleases_description\">Χρήση πρώιμων εκδόσεων του ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Οι πρώιμες εκδόσεις ενδέχεται να είναι ασταθείς και να περιέχουν σφάλματα. Ενδέχεται να αντιμετωπίσετε διακοπές λειτουργίας, απώλεια δεδομένων ή άλλα απροσδόκητα ζητήματα. Ενεργοποιήστε το μόνο αν είστε εξοικειωμένοι με αυτούς τους κινδύνους.</string>\n  <string name=\"changelog\">Προβολή ιστορικού αλλαγών</string>\n  <string name=\"changelog_loading\">Φόρτωση ιστορικού αλλαγών</string>\n  <string name=\"changelog_download_fail\">Η λήψη ιστορικού αλλαγών απέτυχε: %s</string>\n  <string name=\"changelog_description\">Δείτε τις τελευταίες αλλαγές σε αυτήν την ενημέρωση</string>\n  <string name=\"battery_optimization_notification\">Οι βελτιστοποιήσεις μπαταρίας πρέπει να απενεργοποιηθούν ώστε ο ReVanced Manager να λειτουργεί σωστά στο παρασκήνιο. Πατήστε εδώ για να απενεργοποιήσετε τις βελτιστοποιήσεις.</string>\n  <string name=\"installing_manager_update\">Εγκατάσταση ενημέρωσης…</string>\n  <string name=\"downloading_manager_update\">Λήψη ενημέρωσης…</string>\n  <string name=\"download_manager_failed\">Η λήψη ενημέρωσης απέτυχε: %s</string>\n  <string name=\"cancel\">Ακύρωση</string>\n  <string name=\"save\">Αποθήκευση</string>\n  <string name=\"save_with_count\">Αποθήκευση (%1$s)</string>\n  <string name=\"update\">Ενημέρωση</string>\n  <string name=\"empty\">Κενό</string>\n  <string name=\"installing_message\">Πατήστε <b>Ενημέρωση</b> όταν σας ζητηθεί.\nΟ ReVanced Manager θα κλείσει κατά την ενημέρωση.</string>\n  <string name=\"no_changelogs_found\">Δεν βρέθηκε ιστορικό αλλαγών</string>\n  <string name=\"just_now\">Μόλις τώρα</string>\n  <string name=\"minutes_ago\">Πριν από %sλ</string>\n  <string name=\"hours_ago\">Πριν από %sώ</string>\n  <string name=\"days_ago\">Πριν από %sη</string>\n  <string name=\"invalid_date\">Μη έγκυρη ημερομηνία</string>\n  <string name=\"disable_battery_optimization\">Απενεργοποίηση βελτιστοποίησης μπαταρίας</string>\n  <string name=\"input_dialog_value_invalid\">Μη έγκυρη τιμή</string>\n  <string name=\"option_required\">Αυτή η παράμετρος είναι υποχρεωτική</string>\n  <string name=\"required_options_screen\">Υποχρεωτικές παράμετροι</string>\n  <string name=\"failed_to_check_updates\">Ο έλεγχος για ενημερώσεις απέτυχε: %s</string>\n  <string name=\"no_update_available\">Δεν υπάρχει διαθέσιμη ενημέρωση</string>\n  <string name=\"no_announcements_found\">Δεν βρέθηκαν ανακοινώσεις</string>\n  <string name=\"update_check\">Έλεγχος για ενημερώσεις…</string>\n  <string name=\"dismiss_temporary\">Όχι τώρα</string>\n  <string name=\"update_available_dialog_description\">Μια νέα έκδοση του ReVanced Manager (%s) είναι διαθέσιμη.</string>\n  <string name=\"failed_to_download_update\">Η λήψη ενημέρωσης απέτυχε: %s</string>\n  <string name=\"download\">Λήψη</string>\n  <string name=\"download_confirmation_metered\">Είστε συνδεδεμένοι σε σύνδεση με περιορισμένα δεδομένα και ενδέχεται να ισχύουν χρεώσεις δεδομένων από τον πάροχο υπηρεσιών σας.\n\nΘέλετε να συνεχίσετε;</string>\n  <string name=\"download_update_confirmation\">Λήψη ενημέρωσης;</string>\n  <string name=\"no_contributors_found\">Δεν βρέθηκαν συνεισφέροντες</string>\n  <string name=\"select\">Επιλογή</string>\n  <string name=\"select_deselect_all\">Επιλογή ή αποεπιλογή όλων</string>\n  <string name=\"select_patches_type_dialog_description\">Προσθήκη νέων τροποποιήσεων από URL ή τοπικά αρχεία</string>\n  <string name=\"local_patches_description\">Προσθήκη τροποποιήσεων από τον τοπικό αποθηκευτικό χώρο.</string>\n  <string name=\"remote_patches_description\">Προσθήκη τροποποιήσεων από διεύθυνση URL. Οι τροποποιήσεις μπορούν να ενημερώνονται αυτόματα.</string>\n  <string name=\"recommended\">Συνιστάται</string>\n  <string name=\"installation_failed_dialog_title\">Η εγκατάσταση απέτυχε</string>\n  <string name=\"installation_cancelled_dialog_title\">Η εγκατάσταση ακυρώθηκε</string>\n  <string name=\"installation_blocked_dialog_title\">Η εγκατάσταση αποκλείστηκε</string>\n  <string name=\"installation_conflict_dialog_title\">Σύγκρουση εγκατάστασης</string>\n  <string name=\"installation_incompatible_dialog_title\">Η εγκατάσταση δεν είναι συμβατή</string>\n  <string name=\"installation_invalid_dialog_title\">Η εγκατάσταση δεν είναι έγκυρη</string>\n  <string name=\"installation_storage_issue_dialog_title\">Ανεπαρκής χώρος αποθήκευσης</string>\n  <string name=\"installation_timeout_dialog_title\">Η εγκατάσταση έληξε</string>\n  <string name=\"installation_failed_description\">Η εγκατάσταση απέτυχε για άγνωστο λόγο. Θέλετε να δοκιμάσετε ξανά;</string>\n  <string name=\"installation_aborted_description\">Η εγκατάσταση ακυρώθηκε χειροκίνητα. Θέλετε να δοκιμάσετε ξανά;</string>\n  <string name=\"installation_blocked_description\">Η εγκατάσταση αποκλείστηκε. Ελέγξτε τις ρυθμίσεις ασφαλείας της συσκευής σας και δοκιμάστε ξανά.</string>\n  <string name=\"installation_conflict_description\">Η εγκατάσταση αποτράπηκε από μια υπάρχουσα εγκατάσταση της εφαρμογής. Θέλετε να απεγκαταστήσετε την εγκατεστημένη εφαρμογή και να δοκιμάσετε ξανά;</string>\n  <string name=\"installation_incompatible_description\">Η εφαρμογή δεν είναι συμβατή με αυτήν τη συσκευή. Χρησιμοποιήστε ένα αρχείο APK που είναι συμβατό με αυτήν τη συσκευή και δοκιμάστε ξανά.</string>\n  <string name=\"installation_invalid_description\">Η εφαρμογή δεν είναι έγκυρη. Θέλετε να απεγκαταστήσετε την εφαρμογή και να δοκιμάσετε ξανά;</string>\n  <string name=\"installation_storage_issue_description\">Η εφαρμογή δεν μπόρεσε να εγκατασταθεί λόγω ανεπαρκούς χώρου αποθήκευσης. Απελευθερώστε χώρο και δοκιμάστε ξανά.</string>\n  <string name=\"installation_timeout_description\">Η εγκατάσταση πήρε πολύ χρόνο. Θέλετε να δοκιμάσετε ξανά;</string>\n  <string name=\"reinstall\">Επανεγκατάσταση</string>\n  <string name=\"show\">Εμφάνιση</string>\n  <string name=\"debugging\">Εντοπισμός σφαλμάτων</string>\n  <string name=\"about_device\">Σχετικά με τη συσκευή</string>\n  <string name=\"enter_url\">Εισαγωγή URL</string>\n  <string name=\"next\">Επόμενο</string>\n  <string name=\"auto_update\">Αυτόματη ενημέρωση</string>\n  <string name=\"add_patches\">Προσθήκη τροποποιήσεων</string>\n  <string name=\"auto_update_description\">Αυτόματη ενημέρωση όταν είναι διαθέσιμη μια νέα έκδοση</string>\n  <string name=\"patches_prereleases\">Χρήση πρώιμων εκδόσεων</string>\n  <string name=\"patches_prereleases_description\">Χρήση πρώιμων εκδόσεων των %s</string>\n  <string name=\"patches_url\">Διεύθυνση URL τροποποιήσεων</string>\n  <string name=\"incompatible_patches_dialog\">Αυτές οι τροποποιήσεις δεν είναι συμβατές με την επιλεγμένη έκδοση εφαρμογής (%1$s).\n\nΠατήστε στις τροποποιήσεις για να δείτε περισσότερες λεπτομέρειες.</string>\n  <string name=\"incompatible_patch\">Μη συμβατή τροποποίηση</string>\n  <string name=\"any_version\">Οποιαδήποτε</string>\n  <string name=\"never_show_again\">Να μην εμφανιστεί ποτέ ξανά</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Εμφάνιση μηνύματος ενημέρωσης κατά την εκκίνηση</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Εμφάνιση αναδυόμενης ειδοποίησης κάθε φορά που είναι διαθέσιμη μια νέα ενημέρωση κατά την εκκίνηση</string>\n  <string name=\"failed_to_import_keystore\">Η εισαγωγή keystore απέτυχε</string>\n  <string name=\"export\">Εξαγωγή</string>\n  <string name=\"confirm\">Επιβεβαίωση</string>\n  <string name=\"new_announcement\">Νέα ανακοίνωση:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d τροποποίηση</item>\n    <item quantity=\"other\">%d τροποποιήσεις</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Εκτέλεση %d τροποποίησης</item>\n    <item quantity=\"other\">Εκτέλεση %d τροποποιήσεων</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d επιλεγμένη</item>\n    <item quantity=\"other\">%d επιλεγμένες</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-es-rES/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Parcheador</string>\n  <string name=\"patches\">Parches</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Administrador</string>\n  <string name=\"onboarding_welcome_to\">Bienvenido a</string>\n  <string name=\"onboarding_welcome_back\">¡Hola! Es el nuevo</string>\n  <string name=\"onboarding_apps_subtitle\">Puedes seleccionar una aplicación para parchear ahora o hacerlo más tarde</string>\n  <string name=\"onboarding_apps_network_error\">No se pudieron cargar los parches porque la red no está disponible o es inestable. Conéctese a una red estable y vuelva a intentarlo.</string>\n  <string name=\"onboarding_updates_subtitle\">Configura las actualizaciones automáticas para mantener ReVanced Manager y los parches al día</string>\n  <string name=\"banner_sources_not_downloaded_description\">Los parches y los descargadores no se pudieron descargar durante la configuración. Toque actualizar para descargarlos.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager se conectará a %s para descargar las versiones iniciales si tu dispositivo está conectado a internet.</string>\n  <string name=\"retry\">Reintentar</string>\n  <string name=\"onboarding_skip\">Omitir por ahora</string>\n  <string name=\"onboarding_recommended_version\">Versión recomendada: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">¿Omitir permisos?</string>\n  <string name=\"onboarding_permissions_skip_description\">Sin los permisos necesarios, algunas funciones podrían no funcionar correctamente. Puedes otorgarlos más tarde en la configuración de la aplicación.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Omitir de todos modos</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager necesita algunos permisos para funcionar correctamente</string>\n  <string name=\"permission_install_apps\">Instalar aplicaciones desconocidas</string>\n  <string name=\"permission_install_apps_description\">Necesario para instalar aplicaciones parcheadas</string>\n  <string name=\"permission_notifications\">Notificaciones</string>\n  <string name=\"permission_notifications_description\">Permite la aplicación ininterrumpida de parches en segundo plano</string>\n  <string name=\"permission_battery\">Optimización de batería</string>\n  <string name=\"permission_battery_description\">Evita que el parcheo se interrumpa en segundo plano</string>\n  <string name=\"permission_grant\">Conceder</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager host de descarga</string>\n  <string name=\"downloader_host_permission_description\">Se usa para controlar el acceso a los descargadores de ReVanced Manager. Solo ReVanced Manager tiene esto.</string>\n  <string name=\"toast_copied_to_clipboard\">¡Copiado!</string>\n  <string name=\"copy_to_clipboard\">Copiar al portapapeles</string>\n  <string name=\"dashboard\">Panel de control</string>\n  <string name=\"settings\">Ajustes</string>\n  <string name=\"select_app\">Seleccionar una aplicación</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d seleccionados</string>\n  <string name=\"fab_patch_app\">Parchear una aplicación</string>\n  <string name=\"fab_add_patches\">Añadir parches</string>\n  <string name=\"new_downloader_notification\">Nuevo(s) descargador(es) disponible(s). Haz clic aquí para configurarlos.</string>\n  <string name=\"unsupported_architecture_warning\">La aplicación de parches en la arquitectura de este dispositivo no es compatible y lo más probable es que falle.</string>\n  <string name=\"import_\">Importar</string>\n  <string name=\"import_patches\">Importar parches</string>\n  <string name=\"file_field_set\">Seleccionado</string>\n  <string name=\"file_field_not_set\">No seleccionado</string>\n  <string name=\"field_not_set\">No establecido</string>\n  <string name=\"patches_missing\">Ausente</string>\n  <string name=\"patches_error\">Error</string>\n  <string name=\"patches_error_description\">No se pudieron cargar los parches. Haz clic para ver el error</string>\n  <string name=\"patches_not_downloaded\">Los parches no se han descargado.</string>\n  <string name=\"patches_name_default\">Parches</string>\n  <string name=\"patches_name_fallback\">Sin nombre</string>\n  <string name=\"android_11_bug_dialog_title\">Error de Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">El permiso de instalación de la aplicación debe concederse con antelación para evitar un error en el sistema Android 11 que afectará negativamente a la experiencia del usuario.</string>\n  <string name=\"no_network_toast\">No hay conexión a internet disponible</string>\n  <string name=\"selected_app_meta_any_version\">Cualquier versión disponible</string>\n  <string name=\"app_source_dialog_title\">Seleccionar origen</string>\n  <string name=\"app_source_dialog_option_auto\">Automático</string>\n  <string name=\"app_source_dialog_option_auto_description\">Usar la aplicación instalada, luego el APK descargado, luego los descargadores disponibles</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">No se encontraron aplicaciones o descargadores compatibles disponibles</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Las aplicaciones montadas no se pueden parchear de nuevo sin acceso root</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">La versión %s no coincide con la versión sugerida</string>\n  <string name=\"patch_item_description\">Comenzar a parchear la aplicación</string>\n  <string name=\"patch_selector_item\">Seleccionar parches</string>\n  <string name=\"patch_selector_item_description\">%d parches seleccionados</string>\n  <string name=\"patch_selection_changed_warning\">La selección de parches ha cambiado</string>\n  <string name=\"no_patches_selected\">Ningún parche seleccionado</string>\n  <string name=\"network_unavailable_warning\">Tu dispositivo no está conectado a internet. La descarga fallará más tarde.</string>\n  <string name=\"network_metered_warning\">Actualmente estás en una conexión de uso medido. Pueden aplicarse cargos por datos de tu proveedor de servicios.</string>\n  <string name=\"apk_source_selector_item\">Seleccionar fuente APK</string>\n  <string name=\"apk_source_auto\">Automático</string>\n  <string name=\"apk_source_auto_installed\">Automático · Usando el APK instalado</string>\n  <string name=\"apk_source_auto_downloaded\">Automático · Usando el APK descargado</string>\n  <string name=\"apk_source_auto_downloader\">Automático · Usando descargadores disponibles</string>\n  <string name=\"apk_source_auto_storage\">Automático · Seleccionar desde el almacenamiento</string>\n  <string name=\"apk_source_downloader\">Usando %s</string>\n  <string name=\"apk_source_installed\">Usando APK instalada</string>\n  <string name=\"apk_source_local\">Usando un archivo APK local</string>\n  <string name=\"apk_source_downloaded\">Ya descargado</string>\n  <string name=\"legacy_import_failed\">No se pudieron importar los ajustes heredados</string>\n  <string name=\"auto_updates_dialog_title\">Configurar actualizaciones</string>\n  <string name=\"auto_updates_dialog_description\">¿Quieres que ReVanced Manager busque periódicamente actualizaciones para los siguientes componentes?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Parches de ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Descargadores</string>\n  <string name=\"auto_updates_dialog_note\">Estos ajustes se pueden cambiar más tarde.\n\n    ReVanced Manager se conectará a %s para descargar las versiones iniciales si tu dispositivo está conectado a internet.</string>\n  <string name=\"announcements_filter_tag\">Filtrar por etiqueta</string>\n  <string name=\"announcements_show_archived\">Mostrar archivados</string>\n  <string name=\"general\">General</string>\n  <string name=\"general_description\">Idioma, tema, color dinámico</string>\n  <string name=\"updates\">Actualizaciones</string>\n  <string name=\"updates_description\">Buscar actualizaciones y ver el registro de cambios</string>\n  <string name=\"downloads\">Descargas</string>\n  <string name=\"downloads_description\">Descargadores y aplicaciones descargadas</string>\n  <string name=\"import_export\">Importar &amp; exportar</string>\n  <string name=\"import_export_description\">Almacén de claves, opciones de parche y selección</string>\n  <string name=\"advanced\">Avanzado</string>\n  <string name=\"advanced_description\">URL de API, límite de memoria, depuración</string>\n  <string name=\"safeguards_toggled_warning\">Se han alternado las salvaguardias</string>\n  <string name=\"about\">Acerca de</string>\n  <string name=\"about_app_name\">Acerca de %1$s</string>\n  <string name=\"opensource_licenses\">Licencias de código abierto</string>\n  <string name=\"opensource_licenses_description\">Ver todas las bibliotecas utilizadas para crear esta aplicación</string>\n  <string name=\"contributors\">Colaboradores</string>\n  <string name=\"contributors_description\">Ver los colaboradores de ReVanced</string>\n  <string name=\"dynamic_color\">Color dinámico</string>\n  <string name=\"dynamic_color_description\">Adaptar colores al fondo de pantalla</string>\n  <string name=\"pure_black_theme\">Tema negro puro</string>\n  <string name=\"pure_black_theme_description\">Usar fondos negros puros para el tema oscuro</string>\n  <string name=\"theme\">Tema</string>\n  <string name=\"theme_description\">Elegir entre tema claro u oscuro</string>\n  <string name=\"language\">Idioma</string>\n  <string name=\"language_description\">Elegir el idioma de visualización de la aplicación</string>\n  <string name=\"language_system_default\">Predeterminado del sistema</string>\n  <string name=\"search_languages\">Buscar idiomas…</string>\n  <string name=\"safeguards\">Salvaguardas</string>\n  <string name=\"patch_compat_check\">Desactivar la comprobación de compatibilidad de versiones</string>\n  <string name=\"patch_compat_check_description\">No restringir los parches a versiones de aplicaciones compatibles</string>\n  <string name=\"patch_compat_check_confirmation\">Seleccionar parches incompatibles puede resultar en una aplicación rota.\n\n¿Deseas continuar de todos modos?</string>\n  <string name=\"suggested_version_safeguard\">Requerir la versión sugerida de la aplicación</string>\n  <string name=\"suggested_version_safeguard_description\">Aplicar la selección de la versión sugerida de la aplicación</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Seleccionar una aplicación que no sea la versión sugerida puede causar problemas inesperados.\n\n¿Deseas continuar de todos modos?</string>\n  <string name=\"patch_selection_safeguard\">Permitir cambiar la selección y opciones de parches</string>\n  <string name=\"patch_selection_safeguard_description\">No evitar seleccionar o deseleccionar parches y la personalización de opciones</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Cambiar la selección de parches puede causar problemas inesperados.\n\n¿Habilitar de todos modos?</string>\n  <string name=\"universal_patches_safeguard\">Permitir usar parches universales</string>\n  <string name=\"universal_patches_safeguard_description\">No evitar el uso de parches universales</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Los parches universales no están tan bien probados como aquellos que se dirigen a aplicaciones específicas.\n\n¿Habilitar de todos modos?</string>\n  <string name=\"keystore\">Almacén de claves</string>\n  <string name=\"patches_selections\">Selecciones de parches</string>\n  <string name=\"import_keystore\">Importar almacén de claves</string>\n  <string name=\"import_keystore_description\">Importar un almacén de claves personalizado</string>\n  <string name=\"import_keystore_dialog_title\">Introducir credenciales del almacén de claves</string>\n  <string name=\"import_keystore_dialog_description\">Deberás introducir las credenciales del almacén de claves para importarlo.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Nombre de usuario (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Contraseña</string>\n  <string name=\"import_keystore_dialog_button\">Importar</string>\n  <string name=\"import_keystore_wrong_credentials\">Credenciales del almacén de claves incorrectas</string>\n  <string name=\"import_keystore_success\">Almacén de claves importado</string>\n  <string name=\"export_keystore\">Exportar almacén de claves</string>\n  <string name=\"export_keystore_description\">Exportar el almacén de claves actual</string>\n  <string name=\"export_keystore_unavailable\">No hay almacén de claves para exportar</string>\n  <string name=\"export_keystore_success\">Almacén de claves exportado</string>\n  <string name=\"regenerate_keystore\">Regenerar almacén de claves</string>\n  <string name=\"regenerate_keystore_description\">Generar un nuevo almacén de claves</string>\n  <string name=\"regenerate_keystore_dialog_description\">Estás a punto de regenerar tu almacén de claves que el administrador usará durante el proceso de aplicación de parches.\n\nNo podrás actualizar las aplicaciones instaladas previamente desde este origen.</string>\n  <string name=\"regenerate_keystore_success\">El almacén de claves ha sido reemplazado con éxito</string>\n  <string name=\"import_patch_selection\">Importar selección de parches</string>\n  <string name=\"import_patch_selection_description\">Importar selección de parches desde un archivo JSON</string>\n  <string name=\"import_patch_selection_fail\">No se pudo importar la selección de parches: %s</string>\n  <string name=\"import_patch_selection_success\">Selección de parches importada</string>\n  <string name=\"select_bundle_for_import\">Seleccionar paquete para importar</string>\n  <string name=\"export_patch_selection\">Exportar selección de parches</string>\n  <string name=\"export_patch_selection_description\">Exportar selección de parches a un archivo JSON</string>\n  <string name=\"export_patch_selection_fail\">No se pudo exportar la selección de parches: %s</string>\n  <string name=\"export_patch_selection_success\">Selección de parches exportada</string>\n  <string name=\"select_bundle_for_export\">Seleccionar paquete para exportar</string>\n  <string name=\"patch_selection_packages\">Aplicaciones con selecciones guardadas</string>\n  <string name=\"patch_selection_entries\">Total de parches seleccionados</string>\n  <string name=\"reset_configuration\">Restablecer configuración</string>\n  <string name=\"reset_patch_selection\">Selecciones de parches</string>\n  <string name=\"reset_patch_selection_description\">Restablecer la selección de parches almacenada</string>\n  <string name=\"reset_patch_options\">Opciones de parche</string>\n  <string name=\"reset_patch_options_description\">Restablecer las opciones de parches almacenadas</string>\n  <string name=\"reset_patch_selection_success\">La selección de parches ha sido restablecida</string>\n  <string name=\"patch_selection_reset_all\">Restablecer selección de parches globalmente</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Estás a punto de restablecer todas las selecciones de parches. Deberás seleccionar manualmente cada parche de nuevo.</string>\n  <string name=\"patch_selection_reset_all_description\">Restablece todas las selecciones de parches</string>\n  <string name=\"patch_selection_reset_package\">Restablecer selección de parches para la aplicación</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Estás a punto de restablecer la selección de parches para la aplicación \\\"%s\\\". Tendrás que seleccionar manualmente cada parche de nuevo.</string>\n  <string name=\"patch_selection_reset_package_description\">Restablece la selección de parches para una sola aplicación</string>\n  <string name=\"patch_selection_reset_patches\">Restablecer selección de parches (individual)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Estás a punto de restablecer la selección de parches para \\\"%s\\\". Tendrás que seleccionar manualmente cada parche de nuevo.</string>\n  <string name=\"patch_selection_reset_patches_description\">Restablece la selección de parches para una colección específica de parches</string>\n  <string name=\"patch_options_reset_package\">Restablecer opciones de parche para la aplicación</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Estás a punto de restablecer las opciones de parche para la aplicación \\\"%s\\\". Tendrás que volver a aplicar cada opción.</string>\n  <string name=\"patch_options_reset_package_description\">Restablece las opciones de parche para una sola aplicación</string>\n  <string name=\"patch_options_reset_patches\">Restablecer opciones de parche (individual)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Estás a punto de restablecer las opciones de parche para \\\"%s\\\". Tendrás que volver a aplicar cada opción.</string>\n  <string name=\"patch_options_reset_patches_description\">Restablece las opciones de parche para una colección específica de parches</string>\n  <string name=\"patch_options_reset_all\">Restablecer opciones de parche globalmente</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Estás a punto de restablecer todas las opciones de parche. Tendrás que volver a aplicar cada opción.</string>\n  <string name=\"patch_options_reset_all_description\">Restablece todas las opciones de parche</string>\n  <string name=\"downloaders\">Descargadores</string>\n  <string name=\"downloader_prereleases\">Usar versiones de pre-lanzamiento</string>\n  <string name=\"downloader_prereleases_description\">Usar versiones de pre-lanzamiento del descargador principal</string>\n  <string name=\"downloader_state_loaded\">Cargado</string>\n  <string name=\"downloader_state_failed\">Error al cargar. Haga clic para más detalles</string>\n  <string name=\"downloader_state_missing\">Faltante</string>\n  <string name=\"downloader_delete_apps_title\">Eliminar aplicaciones seleccionadas</string>\n  <string name=\"downloader_delete_apps_description\">¿Estás seguro de que deseas eliminar las aplicaciones seleccionadas?</string>\n  <string name=\"downloader_delete_single_description\">¿Estás seguro de que deseas eliminar \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">No se encontraron aplicaciones descargadas.</string>\n  <string name=\"downloader_settings_no_apps_description\">Las aplicaciones descargadas a través de ReVanced Manager aparecerán aquí.</string>\n  <string name=\"downloader_url\">URL del descargador</string>\n  <string name=\"downloader_add\">Añadir descargador</string>\n  <string name=\"select_downloader_type_dialog_description\">Añada nuevos descargadores desde URL o archivos locales</string>\n  <string name=\"local_downloaders_description\">Añada descargadores desde el almacenamiento local.</string>\n  <string name=\"remote_downloaders_description\">Añada descargadores desde URL. Pueden actualizarse automáticamente.</string>\n  <string name=\"install_revanced_downloaders\">Instala descargadores para obtener aplicaciones directamente dentro de ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Instalar descargadores de ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">¿Cancelar instalación de descargadores?</string>\n  <string name=\"cancel_downloader_install_description\">Una instalación de descargadores está en curso. Si sales ahora, la descarga se cancelará.</string>\n  <string name=\"downloader_sources_unavailable_title\">Estos descargadores faltan</string>\n  <string name=\"downloader_sources_unavailable_description\">Haga clic en el botón de actualización para solucionarlo.</string>\n  <string name=\"downloader_update_failed\">Error al actualizar el descargador: %s</string>\n  <string name=\"downloader_replace_fail\">Error al importar el descargador: %s</string>\n  <string name=\"search_apps\">Buscar aplicaciones…</string>\n  <string name=\"loading_body\">Cargando…</string>\n  <string name=\"downloading_patches\">Descargando parches…</string>\n  <string name=\"options\">Opciones</string>\n  <string name=\"ok\">Aceptar</string>\n  <string name=\"yes\">Sí</string>\n  <string name=\"no\">No</string>\n  <string name=\"edit\">Editar</string>\n  <string name=\"dialog_input_placeholder\">Valor</string>\n  <string name=\"reset\">Restablecer</string>\n  <string name=\"share\">Compartir</string>\n  <string name=\"patch\">Parche</string>\n  <string name=\"select_from_storage\">Seleccionar del almacenamiento</string>\n  <string name=\"select_from_storage_description\">Seleccionar un archivo APK del almacenamiento usando el selector de archivos</string>\n  <string name=\"suggested_version_info\">Versión sugerida: %s</string>\n  <string name=\"type_anything\">Escribe algo para continuar</string>\n  <string name=\"search\">Buscar parches…</string>\n  <string name=\"apply\">Aplicar</string>\n  <string name=\"help\">Ayuda</string>\n  <string name=\"back\">Atrás</string>\n  <string name=\"warning\">Advertencia</string>\n  <string name=\"add\">Añadir</string>\n  <string name=\"enable\">Habilitar</string>\n  <string name=\"disable\">Deshabilitar</string>\n  <string name=\"close\">Cerrar</string>\n  <string name=\"clear\">Borrar</string>\n  <string name=\"system\">Sistema</string>\n  <string name=\"light\">Claro</string>\n  <string name=\"dark\">Oscuro</string>\n  <string name=\"appearance\">Apariencia</string>\n  <string name=\"networking\">Redes</string>\n  <string name=\"allow_metered_networks\">Permitir redes de uso medido</string>\n  <string name=\"allow_metered_networks_description\">Permite actualizaciones automáticas en redes de uso medido.\\n    La aplicación podría seguir advirtiendo sobre redes de uso medido para operaciones manuales.</string>\n  <string name=\"downloaded_apps\">Aplicaciones descargadas</string>\n  <string name=\"process_runtime\">Ejecutar Patcher en otro proceso (experimental)</string>\n  <string name=\"process_runtime_description\">Esto es más rápido y permite que Patcher use más memoria</string>\n  <string name=\"process_runtime_memory_limit\">Límite de memoria del proceso de Patcher</string>\n  <string name=\"process_runtime_memory_limit_description\">La cantidad máxima de memoria que puede usar el proceso del Parcheador</string>\n  <string name=\"debug_logs_export\">Exportar registros de depuración</string>\n  <string name=\"debug_logs_export_read_failed\">Error al leer registros (código de salida %d)</string>\n  <string name=\"debug_logs_export_failed\">Error al exportar registros</string>\n  <string name=\"debug_logs_export_success\">Registros exportados</string>\n  <string name=\"api_url\">URL de la API</string>\n  <string name=\"api_url_description\">La API utilizada para descargar archivos necesarios</string>\n  <string name=\"api_url_dialog_title\">Cambiar URL de la API</string>\n  <string name=\"api_url_dialog_description\">Cambia la URL de la API de ReVanced Manager. ReVanced Manager usa la API para descargar parches y actualizaciones.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager se conecta a la API para descargar parches y actualizaciones. Asegúrate de que confías en ella.</string>\n  <string name=\"api_url_dialog_save\">Establecer</string>\n  <string name=\"api_url_dialog_reset\">Restablecer URL de la API</string>\n  <string name=\"device\">Dispositivo</string>\n  <string name=\"device_android_version\">Versión de Android</string>\n  <string name=\"device_model\">Modelo</string>\n  <string name=\"device_architectures\">Arquitecturas de CPU</string>\n  <string name=\"device_memory_limit\">Límites de memoria</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normal) - %2$dMB (Grande)</string>\n  <string name=\"patches_force_download\">Forzar descarga de todos los parches</string>\n  <string name=\"patches_reset\">Restablecer parches</string>\n  <string name=\"reset_onboarding\">Restablecer la introducción</string>\n  <string name=\"reset_onboarding_description\">Mostrar la pantalla de introducción en el próximo inicio de la aplicación</string>\n  <string name=\"patching\">Parcheando</string>\n  <string name=\"signing\">Firmando</string>\n  <string name=\"storage\">Almacenamiento</string>\n  <string name=\"no_patch_found\">No se puede encontrar ningún parche. Comprueba tus parches</string>\n  <string name=\"tab_apps\">Aplicaciones</string>\n  <string name=\"tab_patches\">Parches</string>\n  <string name=\"delete\">Eliminar</string>\n  <string name=\"refresh\">Actualizar</string>\n  <string name=\"continue_anyways\">Continuar de todas formas</string>\n  <string name=\"download_another_version\">Descargar otra versión</string>\n  <string name=\"download_app\">Descargar aplicación</string>\n  <string name=\"download_apk\">Descargar archivo APK</string>\n  <string name=\"patches_download_fail\">Error al descargar parches: %s</string>\n  <string name=\"api_not_working_title\">El servicio de la API no está disponible actualmente</string>\n  <string name=\"api_not_working_description\">Algunas funciones podrían verse afectadas. Comprueba tu conexión o la URL de la API en la configuración.</string>\n  <string name=\"patches_replace_fail\">Error al importar parches: %s</string>\n  <string name=\"no_patched_apps_found\">No se encontraron aplicaciones parcheadas</string>\n  <string name=\"no_patched_apps_description\">Actualmente no tienes ninguna aplicación parcheada de la que tengamos conocimiento. ¡Cambia eso parcheando tu primera aplicación!</string>\n  <string name=\"patched_apps_section_title\">Aplicaciones parcheadas</string>\n  <string name=\"patchable_apps_section_title\">Aplicaciones que se pueden parchear</string>\n  <string name=\"no_patches_found\">No se encontraron parches</string>\n  <string name=\"no_patches_description\">Todavía no tienes ningún parche. ¡Añade parches tocando el botón de abajo!</string>\n  <string name=\"tap_on_patches\">Toca los parches para obtener más información sobre ellos</string>\n  <string name=\"patches_selected\">%s seleccionados</string>\n  <string name=\"incompatible_patches\">Parches incompatibles</string>\n  <string name=\"universal_patches\">Parches universales</string>\n  <string name=\"patch_selection_reset_toast\">La selección y las opciones de parches se han restablecido a los valores predeterminados recomendados</string>\n  <string name=\"patch_options_reset_toast\">Las opciones de parche se han restablecido</string>\n  <string name=\"non_suggested_version_warning_title\">Versión no sugerida</string>\n  <string name=\"non_suggested_version_warning_description\">La versión de la aplicación que has seleccionado no coincide con la versión sugerida.\\nUtiliza la versión sugerida: %s\\n\\nPara continuar de todas formas, desactiva \\\"Requerir versión de aplicación sugerida\\\" en la configuración avanzada.</string>\n  <string name=\"selection_warning_title\">¿Dejar de usar los valores predeterminados?</string>\n  <string name=\"selection_warning_description\">Se recomienda usar la selección y opciones de parches predeterminadas. Cambiarlas puede resultar en problemas inesperados.\\n\\nDebes activar \\\"Permitir cambiar la selección y opciones de parches\\\" en la configuración avanzada antes de activar o desactivar parches.</string>\n  <string name=\"universal_patch_warning_description\">Los parches universales tienen un uso más generalizado y no funcionan de manera tan fiable como los parches dirigidos a aplicaciones específicas. Puedes encontrar problemas al usarlos.\\n\\nDebes activar \\\"Permitir usar parches universales\\\" en la configuración avanzada antes de usarlos.</string>\n  <string name=\"this_version\">Esta versión</string>\n  <string name=\"universal\">Cualquier aplicación</string>\n  <string name=\"search_patches\">Buscar parches</string>\n  <string name=\"app_version_not_compatible\">Este parche no es compatible con la versión de aplicación seleccionada (%1$s)\\n\\nSolo es compatible con la(s) siguiente(s) versión(es): %2$s</string>\n  <string name=\"continue_with_version\">¿Continuar con esta versión?</string>\n  <string name=\"version_not_compatible\">No todos los parches son compatibles con esta versión (%s). ¿Quieres continuar de todas formas?</string>\n  <string name=\"download_application\">¿Descargar aplicación?</string>\n  <string name=\"app_not_installed\">La aplicación que seleccionaste no está instalada. ¿Quieres descargarla?</string>\n  <string name=\"failed_to_load_apk\">Error al cargar el APK</string>\n  <string name=\"split_apk_not_supported\">Los APKs divididos no se pueden parchear</string>\n  <string name=\"loading\">Cargando…</string>\n  <string name=\"not_installed\">No instalada</string>\n  <string name=\"installed\">Instalada</string>\n  <string name=\"app_info\">Información de la aplicación</string>\n  <string name=\"uninstall\">Desinstalar</string>\n  <string name=\"unpatch\">Desparchear</string>\n  <string name=\"repatch\">Volver a parchear</string>\n  <string name=\"install_type\">Tipo de instalación</string>\n  <string name=\"package_name\">Nombre del paquete</string>\n  <string name=\"original_package_name\">Nombre original del paquete</string>\n  <string name=\"applied_patches\">Parches aplicados</string>\n  <string name=\"view_applied_patches\">Ver parches aplicados</string>\n  <string name=\"default_install\">Predeterminado</string>\n  <string name=\"mount_install\">Montar</string>\n  <string name=\"mounted\">Montado</string>\n  <string name=\"not_mounted\">No montado</string>\n  <string name=\"mount\">Montar</string>\n  <string name=\"unmount\">Desmontar</string>\n  <string name=\"failed_to_mount\">Error al montar: %s</string>\n  <string name=\"failed_to_unmount\">Error al desmontar: %s</string>\n  <string name=\"unpatch_app\">¿Desaplicar parches de la aplicación?</string>\n  <string name=\"unpatch_description\">¿Estás seguro de que deseas desaplicar los parches de esta aplicación?</string>\n  <string name=\"downloader_invalid_version\">El descargador no obtuvo la versión correcta</string>\n  <string name=\"downloader_app_not_found\">El descargador no encontró la aplicación</string>\n  <string name=\"downloader_error\">Error del descargador: %s</string>\n  <string name=\"no_downloaders_installed\">¡No hay descargadores de aplicaciones instalados!</string>\n  <string name=\"no_downloaders_trusted\">¡No se ha confiado en ningún descargador de aplicaciones! Por favor, revisa tu configuración.</string>\n  <string name=\"already_patched\">Ya parchado</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filtrar</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Compatibilidad</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paquetes</string>\n  <string name=\"patch_selector_sheet_actions_title\">Acciones</string>\n  <string name=\"restore_default_selection\">Restaurar selección predeterminada</string>\n  <string name=\"deselect_all\">Deseleccionar todo</string>\n  <string name=\"invert_selection\">Invertir selección</string>\n  <string name=\"deselect_all_except\">Desmarcar todo excepto %s</string>\n  <string name=\"scope_dialog_title\">Aplicar a</string>\n  <string name=\"scope_all_patches\">Todos los parches</string>\n  <string name=\"scope_bundle_patches\">Solo %s</string>\n  <string name=\"string_option_menu_description\">Más opciones</string>\n  <string name=\"option_preset_custom_value\">Valor personalizado</string>\n  <string name=\"path_selector\">Seleccionar del almacenamiento</string>\n  <string name=\"path_selector_parent_dir\">Directorio anterior</string>\n  <string name=\"path_selector_dirs\">Directorios</string>\n  <string name=\"path_selector_files\">Archivos</string>\n  <string name=\"show_password_field\">Mostrar contraseña</string>\n  <string name=\"hide_password_field\">Ocultar contraseña</string>\n  <string name=\"installer\">Instalador</string>\n  <string name=\"install_app\">Instalar</string>\n  <string name=\"install_app_success\">Aplicación instalada</string>\n  <string name=\"install_app_fail\">Error al instalar la aplicación: %s</string>\n  <string name=\"reinstall_app_fail\">Error al reinstalar la aplicación: %s</string>\n  <string name=\"uninstall_app_fail\">Error al desinstalar la aplicación: %s</string>\n  <string name=\"open_app\">Abrir</string>\n  <string name=\"save_apk\">Guardar APK</string>\n  <string name=\"save_apk_success\">APK guardado</string>\n  <string name=\"sign_fail\">Error al firmar APK: %s</string>\n  <string name=\"save_logs\">Guardar registros</string>\n  <string name=\"save_as_file\">Guardar en archivos</string>\n  <string name=\"export_patcher_logs\">Exportar registros del parcheador</string>\n  <string name=\"save_logs_success\">Registros guardados</string>\n  <string name=\"downloader_activity_dialog_body\">Se requiere interacción del usuario para proceder con este descargador.</string>\n  <string name=\"select_install_type\">Seleccionar tipo de instalación</string>\n  <string name=\"patcher_step_group_preparing\">Preparando</string>\n  <string name=\"patcher_step_load_patches\">Cargar parches</string>\n  <string name=\"patcher_step_unpack\">Preparar parcheador</string>\n  <string name=\"patcher_step_group_patching\">Parcheando</string>\n  <string name=\"patcher_step_group_saving\">Guardando</string>\n  <string name=\"patcher_step_write_patched\">Escribir archivo APK parchado</string>\n  <string name=\"patcher_step_sign_apk\">Firmar archivo APK parchado</string>\n  <string name=\"patcher_notification_title\">Parcheando…</string>\n  <string name=\"patcher_notification_text\">Toca para volver al parcheador</string>\n  <string name=\"patcher_stop_confirm_title\">Detener parcheador</string>\n  <string name=\"patcher_stop_confirm_description\">¿Estás seguro de que deseas detener el proceso de parcheo?</string>\n  <string name=\"patcher_install_in_progress\">La instalación está en curso. Por favor, espera.</string>\n  <string name=\"execute_patches\">Ejecutar parches</string>\n  <string name=\"executing_patch\">Ejecutar %s</string>\n  <string name=\"failed_to_execute_patch\">Error al ejecutar %s</string>\n  <string name=\"step_completed\">completado</string>\n  <string name=\"step_failed\">falló</string>\n  <string name=\"step_running\">ejecutando</string>\n  <string name=\"step_waiting\">esperando</string>\n  <string name=\"expand_content\">expandir</string>\n  <string name=\"collapse_content\">contraer</string>\n  <string name=\"drag_handle\">reordenar</string>\n  <string name=\"more\">Más</string>\n  <string name=\"less\">Menos</string>\n  <string name=\"continue_\">Continuar</string>\n  <string name=\"dismiss\">Descartar</string>\n  <string name=\"view_announcement\">Ver anuncio</string>\n  <string name=\"permanent_dismiss\">No volver a mostrar esto</string>\n  <string name=\"donate\">Donar</string>\n  <string name=\"website\">Sitio web</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Contacto</string>\n  <string name=\"license\">Licencia</string>\n  <string name=\"source\">Fuente</string>\n  <string name=\"repository\">Repositorio</string>\n  <string name=\"bundle_information_by_author\">Por %1$s</string>\n  <string name=\"version\">Versión</string>\n  <string name=\"version_compatibility_warning\">La versión seleccionada puede ser incompatible con los parches seleccionados</string>\n  <string name=\"submit_feedback\">Enviar incidencia o comentarios</string>\n  <string name=\"submit_feedback_description\">Ayúdanos a mejorar esta aplicación</string>\n  <string name=\"developer_options\">Opciones de desarrollador</string>\n  <string name=\"developer_options_description\">Opciones para depurar problemas</string>\n  <string name=\"patches_update_success\">Actualización exitosa</string>\n  <string name=\"patches_update_unavailable\">No hay actualización disponible</string>\n  <string name=\"view_patches\">Ver parches</string>\n  <string name=\"patches_view_any_version\">Cualquier versión</string>\n  <string name=\"patches_view_any_package\">Cualquier paquete</string>\n  <string name=\"patches_delete_single_dialog_description\">¿Estás seguro de que deseas eliminar \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">¿Estás seguro de que deseas eliminar los parches seleccionados?</string>\n  <string name=\"announcements\">Anuncios</string>\n  <string name=\"archive\">Archivo</string>\n  <string name=\"about_revanced_manager\">Acerca de ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager es una aplicación de Android que utiliza ReVanced Patcher para aplicar parches a aplicaciones de Android. Te permite descargar y aplicar parches a aplicaciones con parches personalizados, y gestionar el proceso de parcheo.</string>\n  <string name=\"developer_options_taps\">%d toques restantes</string>\n  <string name=\"developer_options_enabled\">Opciones de desarrollador activadas</string>\n  <string name=\"developer_options_already_enabled\">Las opciones de desarrollador ya están activadas</string>\n  <string name=\"update_available\">Hay una actualización disponible</string>\n  <string name=\"current_version\">Versión actual: %s</string>\n  <string name=\"new_version\">Nueva versión: %s</string>\n  <string name=\"ready_to_install_update\">Listo para instalar la actualización</string>\n  <string name=\"update_completed\">Actualización instalada</string>\n  <string name=\"install_update_manager_failed\">Error al instalar la actualización</string>\n  <string name=\"manual_update_check\">Buscar actualizaciones</string>\n  <string name=\"view_update\">Ver actualización</string>\n  <string name=\"manual_update_check_description\">Buscar actualizaciones manualmente</string>\n  <string name=\"update_checking_manager\">Buscar actualizaciones al inicio</string>\n  <string name=\"update_checking_manager_description\">Buscar nuevas versiones de ReVanced Manager cuando la aplicación se inicie</string>\n  <string name=\"update_checking_downloader\">Buscar actualizaciones de los Descargadores de ReVanced al iniciar</string>\n  <string name=\"update_checking_downloader_description\">Buscar actualizaciones de los Descargadores de ReVanced instalados cuando se inicia la aplicación</string>\n  <string name=\"manager_prereleases\">Usar versiones de pre-lanzamiento</string>\n  <string name=\"manager_prereleases_description\">Usar versiones de pre-lanzamiento de ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Las versiones preliminares pueden ser inestables y contener errores. Podrías experimentar cierres inesperados, pérdida de datos u otros problemas imprevistos. Solo habilita esto si te sientes cómodo con estos riesgos.</string>\n  <string name=\"changelog\">Ver registro de cambios</string>\n  <string name=\"changelog_loading\">Cargando registro de cambios</string>\n  <string name=\"changelog_download_fail\">Error al descargar el registro de cambios: %s</string>\n  <string name=\"changelog_description\">Consulta los últimos cambios en esta actualización</string>\n  <string name=\"battery_optimization_notification\">Las optimizaciones de batería deben estar desactivadas para que ReVanced Manager funcione correctamente en segundo plano. Haz clic aquí para desactivar las optimizaciones.</string>\n  <string name=\"installing_manager_update\">Instalando actualización…</string>\n  <string name=\"downloading_manager_update\">Descargando actualización…</string>\n  <string name=\"download_manager_failed\">Error al descargar la actualización: %s</string>\n  <string name=\"cancel\">Cancelar</string>\n  <string name=\"save\">Guardar</string>\n  <string name=\"save_with_count\">Guardar (%1$s)</string>\n  <string name=\"update\">Actualizar</string>\n  <string name=\"empty\">Vacío</string>\n  <string name=\"installing_message\">Toca en <b>Actualizar</b> cuando se te solicite.\nReVanced Manager se cerrará al actualizar.</string>\n  <string name=\"no_changelogs_found\">No se encontraron registros de cambios</string>\n  <string name=\"just_now\">Justo ahora</string>\n  <string name=\"minutes_ago\">hace %s min</string>\n  <string name=\"hours_ago\">hace %s h</string>\n  <string name=\"days_ago\">hace %s d</string>\n  <string name=\"invalid_date\">Fecha no válida</string>\n  <string name=\"disable_battery_optimization\">Desactivar optimización de batería</string>\n  <string name=\"input_dialog_value_invalid\">Valor no válido</string>\n  <string name=\"option_required\">Esta opción es obligatoria</string>\n  <string name=\"required_options_screen\">Opciones obligatorias</string>\n  <string name=\"failed_to_check_updates\">Error al buscar actualizaciones: %s</string>\n  <string name=\"no_update_available\">No hay actualización disponible</string>\n  <string name=\"no_announcements_found\">No se encontraron anuncios</string>\n  <string name=\"update_check\">Buscando actualizaciones…</string>\n  <string name=\"dismiss_temporary\">Ahora no</string>\n  <string name=\"update_available_dialog_description\">Hay una nueva versión de ReVanced Manager (%s) disponible.</string>\n  <string name=\"failed_to_download_update\">Error al descargar la actualización: %s</string>\n  <string name=\"download\">Descargar</string>\n  <string name=\"download_confirmation_metered\">Actualmente estás en una conexión de uso medido, y se pueden aplicar cargos por datos de tu proveedor de servicios.\n\n¿Deseas continuar de todos modos?</string>\n  <string name=\"download_update_confirmation\">¿Descargar actualización?</string>\n  <string name=\"no_contributors_found\">No se encontraron colaboradores</string>\n  <string name=\"select\">Seleccionar</string>\n  <string name=\"select_deselect_all\">Seleccionar o deseleccionar todo</string>\n  <string name=\"select_patches_type_dialog_description\">Añadir nuevos parches desde URL o archivos locales</string>\n  <string name=\"local_patches_description\">Añadir parches desde el almacenamiento local.</string>\n  <string name=\"remote_patches_description\">Añadir parches desde URL. Los parches pueden actualizarse automáticamente.</string>\n  <string name=\"recommended\">Recomendado</string>\n  <string name=\"installation_failed_dialog_title\">Instalación fallida</string>\n  <string name=\"installation_cancelled_dialog_title\">Instalación cancelada</string>\n  <string name=\"installation_blocked_dialog_title\">Instalación bloqueada</string>\n  <string name=\"installation_conflict_dialog_title\">Conflicto de instalación</string>\n  <string name=\"installation_incompatible_dialog_title\">Instalación incompatible</string>\n  <string name=\"installation_invalid_dialog_title\">Instalación no válida</string>\n  <string name=\"installation_storage_issue_dialog_title\">No hay suficiente almacenamiento</string>\n  <string name=\"installation_timeout_dialog_title\">Tiempo de instalación agotado</string>\n  <string name=\"installation_failed_description\">La instalación falló debido a una razón desconocida. ¿Intentar de nuevo?</string>\n  <string name=\"installation_aborted_description\">La instalación fue cancelada manualmente. ¿Intentar de nuevo?</string>\n  <string name=\"installation_blocked_description\">La instalación fue bloqueada. Revisa la configuración de seguridad de tu dispositivo e intenta de nuevo.</string>\n  <string name=\"installation_conflict_description\">La instalación fue impedida por una instalación existente de la aplicación. ¿Desinstalar la aplicación instalada e intentar de nuevo?</string>\n  <string name=\"installation_incompatible_description\">La aplicación es incompatible con este dispositivo. Utiliza un APK que sea compatible con este dispositivo e intenta de nuevo.</string>\n  <string name=\"installation_invalid_description\">La aplicación no es válida. ¿Desinstalar la aplicación e intentar de nuevo?</string>\n  <string name=\"installation_storage_issue_description\">La aplicación no pudo instalarse debido a espacio de almacenamiento insuficiente. Libera algo de espacio e intenta de nuevo.</string>\n  <string name=\"installation_timeout_description\">La instalación tardó demasiado. ¿Intentar de nuevo?</string>\n  <string name=\"reinstall\">Reinstalar</string>\n  <string name=\"show\">Mostrar</string>\n  <string name=\"debugging\">Depuración</string>\n  <string name=\"about_device\">Acerca del dispositivo</string>\n  <string name=\"enter_url\">Introducir URL</string>\n  <string name=\"next\">Siguiente</string>\n  <string name=\"auto_update\">Actualización automática</string>\n  <string name=\"add_patches\">Añadir parches</string>\n  <string name=\"auto_update_description\">Actualizar automáticamente cuando haya una nueva versión disponible</string>\n  <string name=\"patches_prereleases\">Usar versiones de pre-lanzamiento</string>\n  <string name=\"patches_prereleases_description\">Usar versiones de pre-lanzamiento de %s</string>\n  <string name=\"patches_url\">URL de parches</string>\n  <string name=\"incompatible_patches_dialog\">Estos parches no son compatibles con la versión de la aplicación seleccionada (%1$s).\n\nHaz clic en los parches para ver más detalles.</string>\n  <string name=\"incompatible_patch\">Parche incompatible</string>\n  <string name=\"any_version\">Cualquiera</string>\n  <string name=\"never_show_again\">No volver a mostrar</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Mostrar mensaje de actualización al inicio</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Mostrar una notificación emergente cuando haya una nueva actualización disponible al inicio</string>\n  <string name=\"failed_to_import_keystore\">Error al importar el almacén de claves</string>\n  <string name=\"export\">Exportar</string>\n  <string name=\"confirm\">Confirmar</string>\n  <string name=\"new_announcement\">Nuevo anuncio:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d parche</item>\n    <item quantity=\"other\">%d parches</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Ejecutar %d parche</item>\n    <item quantity=\"other\">Ejecutar %d parches</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d seleccionado</item>\n    <item quantity=\"other\">%d seleccionados</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-et-rEE/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Paikaja</string>\n  <string name=\"patches\">Paigad</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Haldur</string>\n  <string name=\"onboarding_welcome_to\">Tere tulemast</string>\n  <string name=\"onboarding_welcome_back\">Tere! See on uus</string>\n  <string name=\"onboarding_apps_subtitle\">Saate valida rakenduse, mida kohe paigata või teha seda hiljem</string>\n  <string name=\"onboarding_updates_subtitle\">Konfigureerige automaatsed värskendused, et hoida ReVanced Manager ja paigad ajakohasena</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager loob ühenduse %s-ga, et laadida alla esialgsed versioonid, kui teie seade on internetiga ühendatud.</string>\n  <string name=\"retry\">Proovi uuesti</string>\n  <string name=\"onboarding_skip\">Jäta praegu vahele</string>\n  <string name=\"onboarding_recommended_version\">Soovitatav versioon: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Jäta load vahele?</string>\n  <string name=\"onboarding_permissions_skip_description\">Ilma nõutavate lubadeta ei pruugi mõned funktsioonid õigesti töötada. Saate need hiljem rakenduse seadetes anda.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Jäta ikkagi vahele</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager vajab nõuetekohaseks toimimiseks paari luba</string>\n  <string name=\"permission_install_apps\">Installi tundmatud rakendused</string>\n  <string name=\"permission_install_apps_description\">Vajalik paigatud rakenduste installimiseks</string>\n  <string name=\"permission_notifications\">Teatised</string>\n  <string name=\"permission_battery\">Aku optimeerimine</string>\n  <string name=\"permission_battery_description\">Takistab paigamise katkemist taustal</string>\n  <string name=\"permission_grant\">Anna luba</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manageri allalaadija host</string>\n  <string name=\"downloader_host_permission_description\">Kasutatakse ReVanced Manageri allalaadijatele juurdepääsu kontrollimiseks. Ainult ReVanced Manageril on see.</string>\n  <string name=\"toast_copied_to_clipboard\">Kopeeritud!</string>\n  <string name=\"copy_to_clipboard\">Kopeeri lõikepuhvrisse</string>\n  <string name=\"dashboard\">Armatuurlaud</string>\n  <string name=\"settings\">Seaded</string>\n  <string name=\"select_app\">Vali rakendus</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d valitud</string>\n  <string name=\"fab_patch_app\">Paiga rakendus</string>\n  <string name=\"fab_add_patches\">Lisa paikasid</string>\n  <string name=\"new_downloader_notification\">Uued allalaadijad on saadaval. Klõpsake siia nende konfigureerimiseks.</string>\n  <string name=\"unsupported_architecture_warning\">Paigaldamine sellel seadme arhitektuuril pole toetatud ja tõenäoliselt ebaõnnestub.</string>\n  <string name=\"import_\">Impordi</string>\n  <string name=\"import_patches\">Impordi paigad</string>\n  <string name=\"file_field_set\">Valitud</string>\n  <string name=\"file_field_not_set\">Valimata</string>\n  <string name=\"field_not_set\">Määramata</string>\n  <string name=\"patches_missing\">Puudub</string>\n  <string name=\"patches_error\">Viga</string>\n  <string name=\"patches_error_description\">Paikasid ei saanud laadida. Vea vaatamiseks klõpsake.</string>\n  <string name=\"patches_not_downloaded\">Paigad pole alla laaditud.</string>\n  <string name=\"patches_name_default\">Paigad</string>\n  <string name=\"patches_name_fallback\">Nimetu</string>\n  <string name=\"android_11_bug_dialog_title\">Android 11 viga</string>\n  <string name=\"android_11_bug_dialog_description\">Rakenduse installimise luba tuleb eelnevalt anda, et vältida Android 11 süsteemi viga, mis mõjutab negatiivselt kasutajakogemust.</string>\n  <string name=\"no_network_toast\">Internetiühendus puudub</string>\n  <string name=\"selected_app_meta_any_version\">Mis tahes saadaolev versioon</string>\n  <string name=\"app_source_dialog_title\">Vali allikas</string>\n  <string name=\"app_source_dialog_option_auto\">Automaatne</string>\n  <string name=\"app_source_dialog_option_auto_description\">Kasuta installitud rakendust, seejärel allalaaditud APK-d, seejärel saadaolevaid allalaadijaid</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Ühtegi ühilduvat rakendust ega allalaadijat ei leitud</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Paigaldatud rakendusi ei saa ilma juurjuurdepääsuta uuesti parandada</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Versioon %s ei vasta soovitatud versioonile</string>\n  <string name=\"patch_item_description\">Alusta rakenduse paigaldamist</string>\n  <string name=\"patch_selector_item\">Vali paigad</string>\n  <string name=\"patch_selector_item_description\">%d paika valitud</string>\n  <string name=\"patch_selection_changed_warning\">Paikade valik on muutunud.</string>\n  <string name=\"no_patches_selected\">Paikasid pole valitud</string>\n  <string name=\"network_unavailable_warning\">Teie seade pole internetiga ühendatud. Allalaadimine ebaõnnestub hiljem.</string>\n  <string name=\"network_metered_warning\">Olete praegu piiratud andmemahuga ühendusel. Teenusepakkuja võib kohaldada andmeside tasusid.</string>\n  <string name=\"apk_source_selector_item\">Vali APK allikas</string>\n  <string name=\"apk_source_auto\">Automaatne</string>\n  <string name=\"apk_source_auto_installed\">Automaatne · Kasutades installitud APK-d</string>\n  <string name=\"apk_source_auto_downloaded\">Automaatne · Kasutades allalaaditud APK-d</string>\n  <string name=\"apk_source_auto_downloader\">Automaatne · Kasutades saadaolevaid allalaadijaid</string>\n  <string name=\"apk_source_auto_storage\">Automaatne · Vali salvestusruumist</string>\n  <string name=\"apk_source_downloader\">Kasutatakse %s</string>\n  <string name=\"apk_source_installed\">Kasutatakse installitud APK-d</string>\n  <string name=\"apk_source_local\">Kasutatakse kohalikku APK-faili</string>\n  <string name=\"apk_source_downloaded\">Juba alla laaditud</string>\n  <string name=\"legacy_import_failed\">Pärandseadeid ei saanud importida</string>\n  <string name=\"auto_updates_dialog_title\">Konfigureeri uuendused</string>\n  <string name=\"auto_updates_dialog_description\">Kas soovite, et ReVanced Manager kontrolliks perioodiliselt uuendusi järgmiste komponentide jaoks?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVancedi paigad</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Allalaadijad</string>\n  <string name=\"auto_updates_dialog_note\">Neid sätteid saab hiljem muuta.\n\n    ReVanced Manager loob ühenduse %s-ga, et laadida alla esialgsed versioonid, kui teie seade on internetiga ühendatud.</string>\n  <string name=\"announcements_filter_tag\">Filtreeri sildi järgi</string>\n  <string name=\"announcements_show_archived\">Näita arhiveeritud</string>\n  <string name=\"general\">Üldine</string>\n  <string name=\"general_description\">Keel, teema, dünaamiline värv</string>\n  <string name=\"updates\">Uuendused</string>\n  <string name=\"updates_description\">Kontrolli uuendusi ja vaata muudatuste logi</string>\n  <string name=\"downloads\">Allalaadimised</string>\n  <string name=\"downloads_description\">Allalaadijad ja allalaaditud rakendused</string>\n  <string name=\"import_export\">Import &amp; eksport</string>\n  <string name=\"import_export_description\">Võtmehoidla, paiga valikud ja valik</string>\n  <string name=\"advanced\">Täpsemad</string>\n  <string name=\"advanced_description\">API URL, mälupiirang, silumine</string>\n  <string name=\"safeguards_toggled_warning\">Kaitsemeetmed on sisse/välja lülitatud.</string>\n  <string name=\"about\">Teave</string>\n  <string name=\"about_app_name\">Teave %1$s kohta</string>\n  <string name=\"opensource_licenses\">Avatud lähtekoodiga litsentsid</string>\n  <string name=\"opensource_licenses_description\">Vaata kõiki teeke, mida kasutati selle rakenduse loomiseks</string>\n  <string name=\"contributors\">Kaastöötajad</string>\n  <string name=\"contributors_description\">Vaata ReVancedi kaastöötajaid</string>\n  <string name=\"dynamic_color\">Dünaamiline värv</string>\n  <string name=\"dynamic_color_description\">Kohanda värve taustapildiga</string>\n  <string name=\"pure_black_theme\">Puhas must teema</string>\n  <string name=\"pure_black_theme_description\">Kasuta puhtalt musti taustasid tumedate teemade jaoks</string>\n  <string name=\"theme\">Teema</string>\n  <string name=\"theme_description\">Vali heleda või tumeda teema vahel</string>\n  <string name=\"language\">Keel</string>\n  <string name=\"language_description\">Vali rakenduse kuvakeel</string>\n  <string name=\"language_system_default\">Süsteemi vaikeväärtus</string>\n  <string name=\"search_languages\">Otsi keeli…</string>\n  <string name=\"safeguards\">Kaitsemeetmed</string>\n  <string name=\"patch_compat_check\">Keela versiooniühilduvuse kontroll</string>\n  <string name=\"patch_compat_check_description\">Ära piira paikasid ühilduvate rakenduse versioonidega</string>\n  <string name=\"patch_compat_check_confirmation\">Ühildumatute paikade valimine võib põhjustada rakenduse rikkisoleku.\n\nKas soovite siiski jätkata?</string>\n  <string name=\"suggested_version_safeguard\">Nõua soovitatud rakenduse versiooni</string>\n  <string name=\"suggested_version_safeguard_description\">Jõusta soovitatud rakenduse versiooni valimine</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Rakenduse valimine, mis pole soovitatud versioon, võib põhjustada ootamatuid probleeme.\n\nKas soovite siiski jätkata?</string>\n  <string name=\"patch_selection_safeguard\">Luba muuta paiga valikut ja valikuid</string>\n  <string name=\"patch_selection_safeguard_description\">Ära takista paikade valimist või valiku tühistamist ning valikute kohandamist</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Paikade valiku muutmine võib põhjustada ootamatuid probleeme.\n\nLuba siiski?</string>\n  <string name=\"universal_patches_safeguard\">Luba kasutada universaalseid paikasid</string>\n  <string name=\"universal_patches_safeguard_description\">Ära takista universaalsete paikade kasutamist</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Universaalsed paigad ei ole nii hästi testitud kui need, mis on suunatud konkreetsetele rakendustele.\n\nLuba siiski?</string>\n  <string name=\"keystore\">Võtmehoidla</string>\n  <string name=\"patches_selections\">Paikade valikud</string>\n  <string name=\"import_keystore\">Impordi võtmehoidla</string>\n  <string name=\"import_keystore_description\">Impordi kohandatud võtmehoidla</string>\n  <string name=\"import_keystore_dialog_title\">Sisesta võtmehoidla mandaadid</string>\n  <string name=\"import_keystore_dialog_description\">Selle importimiseks peate sisestama võtmehoidla mandaadid.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Kasutajanimi (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Parool</string>\n  <string name=\"import_keystore_dialog_button\">Impordi</string>\n  <string name=\"import_keystore_wrong_credentials\">Valed võtmehoidla mandaadid</string>\n  <string name=\"import_keystore_success\">Imporditud võtmehoidla</string>\n  <string name=\"export_keystore\">Ekspordi võtmehoidla</string>\n  <string name=\"export_keystore_description\">Ekspordi praegune võtmehoidla</string>\n  <string name=\"export_keystore_unavailable\">Eksporditavat võtmehoidlat pole</string>\n  <string name=\"export_keystore_success\">Eksporditud võtmehoidla</string>\n  <string name=\"regenerate_keystore\">Taasta võtmehoidla</string>\n  <string name=\"regenerate_keystore_description\">Genereeri uus võtmehoidla</string>\n  <string name=\"regenerate_keystore_dialog_description\">Olete taastamas oma võtmehoidlat, mida haldur paigaldusprotsessi käigus kasutab.\n\nTe ei saa enam värskendada varem installitud rakendusi sellest allikast.</string>\n  <string name=\"regenerate_keystore_success\">Võtmehoidla on edukalt asendatud</string>\n  <string name=\"import_patch_selection\">Impordi paiga valik</string>\n  <string name=\"import_patch_selection_description\">Impordi paiga valik JSON-failist</string>\n  <string name=\"import_patch_selection_fail\">Paiga valikut ei saanud importida: %s</string>\n  <string name=\"import_patch_selection_success\">Imporditud paiga valik</string>\n  <string name=\"select_bundle_for_import\">Vali pakett, kuhu importida</string>\n  <string name=\"export_patch_selection\">Ekspordi paiga valik</string>\n  <string name=\"export_patch_selection_description\">Ekspordi paiga valik JSON-faili</string>\n  <string name=\"export_patch_selection_fail\">Paiga valikut ei saanud eksportida: %s</string>\n  <string name=\"export_patch_selection_success\">Eksporditud paiga valik</string>\n  <string name=\"select_bundle_for_export\">Vali pakett, millest eksportida</string>\n  <string name=\"patch_selection_packages\">Salvestatud valikutega rakendused</string>\n  <string name=\"patch_selection_entries\">Valitud paikade koguarv</string>\n  <string name=\"reset_configuration\">Lähtesta konfiguratsioon</string>\n  <string name=\"reset_patch_selection\">Paikade valikud</string>\n  <string name=\"reset_patch_selection_description\">Lähtesta salvestatud paiga valik</string>\n  <string name=\"reset_patch_options\">Paikamise valikud</string>\n  <string name=\"reset_patch_options_description\">Lähtesta salvestatud paiga valikud</string>\n  <string name=\"reset_patch_selection_success\">Paiga valik on lähtestatud</string>\n  <string name=\"patch_selection_reset_all\">Lähtesta paiga valik globaalselt</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Olete lähtestamas kõiki paiga valikuid. Peate iga paiga uuesti käsitsi valima.</string>\n  <string name=\"patch_selection_reset_all_description\">Lähtestab kõik paiga valikud</string>\n  <string name=\"patch_selection_reset_package\">Lähtesta paiga valik rakenduse jaoks</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Olete lähtestamas rakenduse \\\"%s\\\" paiga valikut. Peate iga paiga uuesti käsitsi valima.</string>\n  <string name=\"patch_selection_reset_package_description\">Lähtestab paigavaliku ühe rakenduse jaoks</string>\n  <string name=\"patch_selection_reset_patches\">Lähtesta paigavalik (üksik)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Olete kohe lähtestamas paigavaliku \\\"%s\\\" jaoks. Peate iga paiga uuesti käsitsi valima.</string>\n  <string name=\"patch_selection_reset_patches_description\">Lähtestab paigavaliku kindla paikade kogumi jaoks</string>\n  <string name=\"patch_options_reset_package\">Lähtesta rakenduse paigasuvandid</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Olete kohe lähtestamas rakenduse \\\"%s\\\" paigasuvandid. Peate iga suvandi uuesti rakendama.</string>\n  <string name=\"patch_options_reset_package_description\">Lähtestab paigasuvandid ühe rakenduse jaoks</string>\n  <string name=\"patch_options_reset_patches\">Lähtesta paigasuvandid (üksik)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Olete kohe lähtestamas \\\"%s\\\" paigasuvandid. Peate iga suvandi uuesti rakendama.</string>\n  <string name=\"patch_options_reset_patches_description\">Lähtestab paigasuvandid kindla paikade kogumi jaoks</string>\n  <string name=\"patch_options_reset_all\">Lähtesta paigasuvandid globaalselt</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Olete kohe lähtestamas kõik paigasuvandid. Peate iga suvandi uuesti rakendama.</string>\n  <string name=\"patch_options_reset_all_description\">Lähtestab kõik paigasuvandid</string>\n  <string name=\"downloaders\">Allalaadijad</string>\n  <string name=\"downloader_prereleases\">Kasuta eelväljaandeid</string>\n  <string name=\"downloader_prereleases_description\">Kasuta peamise allalaadija eelväljaande versioone</string>\n  <string name=\"downloader_state_loaded\">Laaditud</string>\n  <string name=\"downloader_state_failed\">Laadimine ebaõnnestus. Lisateabe saamiseks klõpsake</string>\n  <string name=\"downloader_state_missing\">Puuduv</string>\n  <string name=\"downloader_delete_apps_title\">Kustuta valitud rakendused</string>\n  <string name=\"downloader_delete_apps_description\">Kas olete kindel, et soovite valitud rakendused kustutada?</string>\n  <string name=\"downloader_delete_single_description\">Kas olete kindel, et soovite kustutada \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Allalaaditud rakendusi ei leitud.</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manageri kaudu alla laaditud rakendused kuvatakse siin.</string>\n  <string name=\"downloader_url\">Allalaadija URL</string>\n  <string name=\"downloader_add\">Lisa allalaadija</string>\n  <string name=\"select_downloader_type_dialog_description\">Lisa uusi allalaadijaid URL-ist või kohalikest failidest</string>\n  <string name=\"local_downloaders_description\">Lisa allalaadijaid kohalikust salvestusruumist.</string>\n  <string name=\"remote_downloaders_description\">Lisa allalaadijaid URL-ist. Saab automaatselt uuendada.</string>\n  <string name=\"install_revanced_downloaders\">Installige allalaadijad, et saada rakendusi otse ReVanced Manageri kaudu.</string>\n  <string name=\"install_revanced_downloader\">Installi ReVancedi allalaadijad</string>\n  <string name=\"cancel_downloader_install_title\">Tühista allalaadijate installimine?</string>\n  <string name=\"cancel_downloader_install_description\">Allalaadijate installimine on pooleli. Kui lahkute praegu, tühistatakse allalaadimine.</string>\n  <string name=\"downloader_sources_unavailable_title\">Need allalaadijad on puudu</string>\n  <string name=\"downloader_sources_unavailable_description\">Selle parandamiseks klõpsake uuendamisnupul.</string>\n  <string name=\"downloader_update_failed\">Allalaadija uuendamine ebaõnnestus: %s</string>\n  <string name=\"downloader_replace_fail\">Allalaadija importimine ebaõnnestus: %s</string>\n  <string name=\"search_apps\">Otsi rakendusi…</string>\n  <string name=\"loading_body\">Laadimine…</string>\n  <string name=\"downloading_patches\">Paikade allalaadimine…</string>\n  <string name=\"options\">Suvandid</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Jah</string>\n  <string name=\"no\">Ei</string>\n  <string name=\"edit\">Muuda</string>\n  <string name=\"dialog_input_placeholder\">Väärtus</string>\n  <string name=\"reset\">Lähtesta</string>\n  <string name=\"share\">Jaga</string>\n  <string name=\"patch\">Paik</string>\n  <string name=\"select_from_storage\">Vali salvestusruumist</string>\n  <string name=\"select_from_storage_description\">Vali APK fail salvestusest failivalija abil</string>\n  <string name=\"suggested_version_info\">Soovitatav versioon: %s</string>\n  <string name=\"type_anything\">Jätkamiseks sisesta midagi</string>\n  <string name=\"search\">Otsi paiku…</string>\n  <string name=\"apply\">Rakenda</string>\n  <string name=\"help\">Abi</string>\n  <string name=\"back\">Tagasi</string>\n  <string name=\"warning\">Hoiatus</string>\n  <string name=\"add\">Lisa</string>\n  <string name=\"enable\">Luba</string>\n  <string name=\"disable\">Keela</string>\n  <string name=\"close\">Sulge</string>\n  <string name=\"clear\">Puhasta</string>\n  <string name=\"system\">Süsteem</string>\n  <string name=\"light\">Hele</string>\n  <string name=\"dark\">Tume</string>\n  <string name=\"appearance\">Välimus</string>\n  <string name=\"networking\">Võrgustik</string>\n  <string name=\"allow_metered_networks\">Luba piiratud andmemahuga võrgud</string>\n  <string name=\"allow_metered_networks_description\">Lubab automaatsed uuendused piiratud andmemahuga võrkudes.\\n    Rakendus võib siiski hoiatada piiratud andmemahuga võrkude eest käsitsi toimingute puhul.</string>\n  <string name=\"downloaded_apps\">Allalaaditud rakendused</string>\n  <string name=\"process_runtime\">Käivita paika moodul teises protsessis (eksperimentaalne)</string>\n  <string name=\"process_runtime_description\">See on kiirem ja võimaldab paika moodulil rohkem mälu kasutada</string>\n  <string name=\"process_runtime_memory_limit\">Paika mooduli protsessi mälupiirang</string>\n  <string name=\"process_runtime_memory_limit_description\">Maksimaalne mälumaht, mida paikamiprotsess saab kasutada</string>\n  <string name=\"debug_logs_export\">Ekspordi silumispäevikud</string>\n  <string name=\"debug_logs_export_read_failed\">Päevikute lugemine ebaõnnestus (väljumiskood %d)</string>\n  <string name=\"debug_logs_export_failed\">Päevikute eksportimine ebaõnnestus</string>\n  <string name=\"debug_logs_export_success\">Eksporditud päevikud</string>\n  <string name=\"api_url\">API URL</string>\n  <string name=\"api_url_description\">API, mida kasutatakse vajalike failide allalaadimiseks</string>\n  <string name=\"api_url_dialog_title\">Muuda API URL-i</string>\n  <string name=\"api_url_dialog_description\">Muuda ReVanced Manageri API URL-i. ReVanced Manager kasutab API-t paikade ja uuenduste allalaadimiseks.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager ühendub API-ga paikade ja uuenduste allalaadimiseks. Veenduge, et usaldate seda.</string>\n  <string name=\"api_url_dialog_save\">Määra</string>\n  <string name=\"api_url_dialog_reset\">Lähtesta API URL</string>\n  <string name=\"device\">Seade</string>\n  <string name=\"device_android_version\">Androidi versioon</string>\n  <string name=\"device_model\">Mudel</string>\n  <string name=\"device_architectures\">Protsessori arhitektuurid</string>\n  <string name=\"device_memory_limit\">Mälupiirangud</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Tavaline) - %2$dMB (Suur)</string>\n  <string name=\"patches_force_download\">Sunni kõigi paikade allalaadimine</string>\n  <string name=\"patches_reset\">Lähtesta paigad</string>\n  <string name=\"reset_onboarding\">Lähtesta sissejuhatus</string>\n  <string name=\"reset_onboarding_description\">Näita sissejuhatuse ekraani järgmise rakenduse käivitamisel</string>\n  <string name=\"patching\">Paikamine</string>\n  <string name=\"signing\">Allkirjastamine</string>\n  <string name=\"storage\">Salvestusruum</string>\n  <string name=\"no_patch_found\">Paika ei leitud. Kontrollige oma paikasid</string>\n  <string name=\"tab_apps\">Rakendused</string>\n  <string name=\"tab_patches\">Paigad</string>\n  <string name=\"delete\">Kustuta</string>\n  <string name=\"refresh\">Värskenda</string>\n  <string name=\"continue_anyways\">Jätka igal juhul</string>\n  <string name=\"download_another_version\">Laadi alla teine versioon</string>\n  <string name=\"download_app\">Laadi rakendus alla</string>\n  <string name=\"download_apk\">Laadi alla APK fail</string>\n  <string name=\"patches_download_fail\">Paikade allalaadimine ebaõnnestus: %s</string>\n  <string name=\"api_not_working_title\">API teenus on praegu maas</string>\n  <string name=\"api_not_working_description\">Mõned funktsioonid võivad olla mõjutatud. Kontrolli oma ühendust või API URL-i seadetes.</string>\n  <string name=\"patches_replace_fail\">Paikade importimine ebaõnnestus: %s</string>\n  <string name=\"no_patched_apps_found\">Paigatud rakendusi ei leitud</string>\n  <string name=\"no_patched_apps_description\">Teil pole praegu ühtegi teadaolevat paigatud rakendust. Muutke seda, paigates oma esimene rakendus!</string>\n  <string name=\"patched_apps_section_title\">Paigatud rakendused</string>\n  <string name=\"patchable_apps_section_title\">Rakendused, mida saab paigata</string>\n  <string name=\"no_patches_found\">Paikasid ei leitud</string>\n  <string name=\"no_patches_description\">Teil pole veel paikasid. Lisage paikasid, puudutades allolevat nuppu!</string>\n  <string name=\"tap_on_patches\">Puudutage paiku, et saada nende kohta lisateavet</string>\n  <string name=\"patches_selected\">%s valitud</string>\n  <string name=\"incompatible_patches\">Kokkusobimatud paigad</string>\n  <string name=\"universal_patches\">Universaalsed paigad</string>\n  <string name=\"patch_selection_reset_toast\">Paigavalik ja suvandid on lähtestatud soovitatud vaikeseadetele</string>\n  <string name=\"patch_options_reset_toast\">Paigasuvandid on lähtestatud</string>\n  <string name=\"non_suggested_version_warning_title\">Mitte soovitatud versioon</string>\n  <string name=\"non_suggested_version_warning_description\">Valitud rakenduse versioon ei ühti soovitatud versiooniga.\\nPalun kasutage soovitatud versiooni: %s\\n\\nJätkamiseks keelake täpsemates seadetes \\\"Nõua soovitatud rakenduse versiooni\\\".</string>\n  <string name=\"selection_warning_title\">Lõpetada vaikeväärtuste kasutamine?</string>\n  <string name=\"selection_warning_description\">Soovitatav on kasutada vaikeväärtusega paigavalikut ja suvandeid. Nende muutmine võib põhjustada ootamatuid probleeme.\\n\\nEnne paikade lülitamist peate täpsemates seadetes sisse lülitama \\\"Luba paikade valiku ja suvandite muutmine\\\".</string>\n  <string name=\"universal_patch_warning_description\">Universaalsed paigad on üldisema otstarbega ega tööta nii usaldusväärselt kui kindlatele rakendustele suunatud paigad. Neid kasutades võite kokku puutuda probleemidega.\\n\\nEnne universaalsete paikade kasutamist peate täpsemates seadetes sisse lülitama \\\"Luba universaalsete paikade kasutamine\\\".</string>\n  <string name=\"this_version\">See versioon</string>\n  <string name=\"universal\">Mis tahes rakendus</string>\n  <string name=\"search_patches\">Otsi paiku</string>\n  <string name=\"app_version_not_compatible\">See paik ei ühildu valitud rakenduse versiooniga (%1$s)\\n\\nSee ühildub ainult järgmiste versioonidega: %2$s</string>\n  <string name=\"continue_with_version\">Jätkata selle versiooniga?</string>\n  <string name=\"version_not_compatible\">Mitte kõik paigad ei ühildu selle versiooniga (%s). Kas soovite ikkagi jätkata?</string>\n  <string name=\"download_application\">Laadida rakendus alla?</string>\n  <string name=\"app_not_installed\">Valitud rakendus pole installitud. Kas soovite selle alla laadida?</string>\n  <string name=\"failed_to_load_apk\">APK laadimine ebaõnnestus</string>\n  <string name=\"split_apk_not_supported\">Jagatud APK-sid ei saa parandada</string>\n  <string name=\"loading\">Laadimine…</string>\n  <string name=\"not_installed\">Pole installitud</string>\n  <string name=\"installed\">Installitud</string>\n  <string name=\"app_info\">Rakenduse info</string>\n  <string name=\"uninstall\">Desinstalli</string>\n  <string name=\"unpatch\">Eemalda paik</string>\n  <string name=\"repatch\">Paika uuesti</string>\n  <string name=\"install_type\">Paigaldustüüp</string>\n  <string name=\"package_name\">Paketi nimi</string>\n  <string name=\"original_package_name\">Algne paketi nimi</string>\n  <string name=\"applied_patches\">Rakendatud parandused</string>\n  <string name=\"view_applied_patches\">Vaata rakendatud parandusi</string>\n  <string name=\"default_install\">Vaikimisi</string>\n  <string name=\"mount_install\">Ühenda</string>\n  <string name=\"mounted\">Ühendatud</string>\n  <string name=\"not_mounted\">Pole ühendatud</string>\n  <string name=\"mount\">Ühenda</string>\n  <string name=\"unmount\">Lahuta</string>\n  <string name=\"failed_to_mount\">Ühendamine ebaõnnestus: %s</string>\n  <string name=\"failed_to_unmount\">Lahutamine ebaõnnestus: %s</string>\n  <string name=\"unpatch_app\">Eemalda parandused rakenduselt?</string>\n  <string name=\"unpatch_description\">Kas olete kindel, et soovite sellelt rakenduselt parandused eemaldada?</string>\n  <string name=\"downloader_invalid_version\">Allalaadija ei laadinud alla õiget versiooni</string>\n  <string name=\"downloader_app_not_found\">Allalaadija ei leidnud rakendust</string>\n  <string name=\"downloader_error\">Allalaadija viga: %s</string>\n  <string name=\"no_downloaders_installed\">Ühtegi rakenduse allalaadijat pole installitud!</string>\n  <string name=\"no_downloaders_trusted\">Ühtegi rakenduse allalaadijat pole usaldatud! Palun kontrollige oma seadeid.</string>\n  <string name=\"already_patched\">Juba parandatud</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filter</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Ühilduvus</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paketid</string>\n  <string name=\"patch_selector_sheet_actions_title\">Tegevused</string>\n  <string name=\"restore_default_selection\">Taasta vaikimisi valik</string>\n  <string name=\"deselect_all\">Tühista kõik valikud</string>\n  <string name=\"invert_selection\">Pööra valik ümber</string>\n  <string name=\"deselect_all_except\">Tühista valik kõigil, välja arvatud %s</string>\n  <string name=\"scope_dialog_title\">Rakenda</string>\n  <string name=\"scope_all_patches\">Kõik paikad</string>\n  <string name=\"scope_bundle_patches\">Ainult %s</string>\n  <string name=\"string_option_menu_description\">Rohkem valikuid</string>\n  <string name=\"option_preset_custom_value\">Kohandatud väärtus</string>\n  <string name=\"path_selector\">Vali salvestusruumist</string>\n  <string name=\"path_selector_parent_dir\">Eelmine kaust</string>\n  <string name=\"path_selector_dirs\">Kaustad</string>\n  <string name=\"path_selector_files\">Failid</string>\n  <string name=\"show_password_field\">Näita parooli</string>\n  <string name=\"hide_password_field\">Peida parool</string>\n  <string name=\"installer\">Paigaldaja</string>\n  <string name=\"install_app\">Installi</string>\n  <string name=\"install_app_success\">Rakendus installitud</string>\n  <string name=\"install_app_fail\">Rakenduse installimine ebaõnnestus: %s</string>\n  <string name=\"reinstall_app_fail\">Rakenduse uuesti installimine ebaõnnestus: %s</string>\n  <string name=\"uninstall_app_fail\">Rakenduse desinstallimine ebaõnnestus: %s</string>\n  <string name=\"open_app\">Ava</string>\n  <string name=\"save_apk\">Salvesta APK</string>\n  <string name=\"save_apk_success\">APK salvestatud</string>\n  <string name=\"sign_fail\">APK allkirjastamine ebaõnnestus: %s</string>\n  <string name=\"save_logs\">Salvesta logid</string>\n  <string name=\"save_as_file\">Salvesta failidesse</string>\n  <string name=\"export_patcher_logs\">Ekspordi paikamiste logid</string>\n  <string name=\"save_logs_success\">Logid salvestatud</string>\n  <string name=\"downloader_activity_dialog_body\">Selle allalaadijaga jätkamiseks on vaja kasutaja sekkumist.</string>\n  <string name=\"select_install_type\">Vali paigaldustüüp</string>\n  <string name=\"patcher_step_group_preparing\">Ettevalmistus</string>\n  <string name=\"patcher_step_load_patches\">Laadi parandused</string>\n  <string name=\"patcher_step_unpack\">Valmista ette paikur</string>\n  <string name=\"patcher_step_group_patching\">Paranduste rakendamine</string>\n  <string name=\"patcher_step_group_saving\">Salvestamine</string>\n  <string name=\"patcher_step_write_patched\">Kirjuta parandatud APK fail</string>\n  <string name=\"patcher_step_sign_apk\">Allkirjasta parandatud APK fail</string>\n  <string name=\"patcher_notification_title\">Paranduste rakendamine käib…</string>\n  <string name=\"patcher_notification_text\">Puuduta, et naasta parandaja juurde</string>\n  <string name=\"patcher_stop_confirm_title\">Peata parandaja</string>\n  <string name=\"patcher_stop_confirm_description\">Kas olete kindel, et soovite paranduste rakendamise protsessi peatada?</string>\n  <string name=\"patcher_install_in_progress\">Paigaldus on pooleli. Palun oodake</string>\n  <string name=\"execute_patches\">Käivita parandused</string>\n  <string name=\"executing_patch\">Käivita %s</string>\n  <string name=\"failed_to_execute_patch\">Viga %s käivitamisel</string>\n  <string name=\"step_completed\">lõpetatud</string>\n  <string name=\"step_failed\">ebaõnnestus</string>\n  <string name=\"step_running\">käib</string>\n  <string name=\"step_waiting\">ootab</string>\n  <string name=\"expand_content\">laienda</string>\n  <string name=\"collapse_content\">ahenda</string>\n  <string name=\"drag_handle\">järjesta ümber</string>\n  <string name=\"more\">Rohkem</string>\n  <string name=\"less\">Vähem</string>\n  <string name=\"continue_\">Jätka</string>\n  <string name=\"dismiss\">Lükka tagasi</string>\n  <string name=\"view_announcement\">Vaata teadaannet</string>\n  <string name=\"permanent_dismiss\">Ära seda enam näita</string>\n  <string name=\"donate\">Anneta</string>\n  <string name=\"website\">Veebisait</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Kontakt</string>\n  <string name=\"license\">Litsents</string>\n  <string name=\"source\">Allikas</string>\n  <string name=\"repository\">Hoidla</string>\n  <string name=\"bundle_information_by_author\">Autor: %1$s</string>\n  <string name=\"version\">Versioon</string>\n  <string name=\"version_compatibility_warning\">Valitud versioon ei pruugi olla ühilduv valitud parandustega</string>\n  <string name=\"submit_feedback\">Esita probleem või tagasiside</string>\n  <string name=\"submit_feedback_description\">Aidake meil seda rakendust täiustada</string>\n  <string name=\"developer_options\">Arendaja valikud</string>\n  <string name=\"developer_options_description\">Valikud probleemide silumiseks</string>\n  <string name=\"patches_update_success\">Uuendus õnnestus</string>\n  <string name=\"patches_update_unavailable\">Uuendust pole saadaval</string>\n  <string name=\"view_patches\">Vaata parandusi</string>\n  <string name=\"patches_view_any_version\">Mis tahes versioon</string>\n  <string name=\"patches_view_any_package\">Mis tahes pakett</string>\n  <string name=\"patches_delete_single_dialog_description\">Kas olete kindel, et soovite kustutada \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Kas olete kindel, et soovite kustutada valitud parandused?</string>\n  <string name=\"announcements\">Teadaanded</string>\n  <string name=\"archive\">Arhiiv</string>\n  <string name=\"about_revanced_manager\">ReVanced Managerist</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager on Androidi rakendus, mis kasutab Androidi rakenduste parandamiseks ReVanced Patcherit. See võimaldab teil alla laadida ja parandada rakendusi kohandatud parandustega ning hallata paranduste rakendamise protsessi.</string>\n  <string name=\"developer_options_taps\">%d puudutust jäänud</string>\n  <string name=\"developer_options_enabled\">Arendaja valikud on lubatud</string>\n  <string name=\"developer_options_already_enabled\">Arendaja valikud on juba lubatud</string>\n  <string name=\"update_available\">Uuendus on saadaval</string>\n  <string name=\"current_version\">Praegune versioon: %s</string>\n  <string name=\"new_version\">Uus versioon: %s</string>\n  <string name=\"ready_to_install_update\">Valmis uuendust installima</string>\n  <string name=\"update_completed\">Uuendus installitud</string>\n  <string name=\"install_update_manager_failed\">Uuenduse installimine ebaõnnestus</string>\n  <string name=\"manual_update_check\">Kontrolli uuendusi</string>\n  <string name=\"view_update\">Vaata uuendust</string>\n  <string name=\"manual_update_check_description\">Kontrolli uuendusi käsitsi</string>\n  <string name=\"update_checking_manager\">Kontrolli uuendusi käivitamisel</string>\n  <string name=\"update_checking_manager_description\">Kontrolli ReVanced Manageri uusi versioone, kui rakendus käivitub</string>\n  <string name=\"update_checking_downloader\">Kontrolli ReVancedi allalaadijate uuendusi käivitamisel</string>\n  <string name=\"update_checking_downloader_description\">Kontrolli installitud ReVancedi allalaadijate uuendusi, kui rakendus käivitub</string>\n  <string name=\"manager_prereleases\">Kasuta eelväljaandeid</string>\n  <string name=\"manager_prereleases_description\">Kasuta ReVanced Manageri eelväljaandeid</string>\n  <string name=\"prereleases_warning\">Eelväljalaske versioonid võivad olla ebastabiilsed ja sisaldada vigu. Võite kogeda kokkujooksmisi, andmekadu või muid ootamatuid probleeme. Lubage see ainult siis, kui olete nende riskidega rahul.</string>\n  <string name=\"changelog\">Vaata muudatuste logi</string>\n  <string name=\"changelog_loading\">Muudatuste logi laadimine</string>\n  <string name=\"changelog_download_fail\">Muudatuste logi allalaadimine ebaõnnestus: %s</string>\n  <string name=\"changelog_description\">Vaadake selle uuenduse viimaseid muudatusi</string>\n  <string name=\"battery_optimization_notification\">Aku optimeerimine peab olema välja lülitatud, et ReVanced Manager taustal korralikult töötaks. Optimeerimise väljalülitamiseks klõpsake siin.</string>\n  <string name=\"installing_manager_update\">Uuenduse installimine…</string>\n  <string name=\"downloading_manager_update\">Uuenduse allalaadimine…</string>\n  <string name=\"download_manager_failed\">Uuenduse allalaadimine ebaõnnestus: %s</string>\n  <string name=\"cancel\">Tühista</string>\n  <string name=\"save\">Salvesta</string>\n  <string name=\"save_with_count\">Salvesta (%1$s)</string>\n  <string name=\"update\">Uuenda</string>\n  <string name=\"empty\">Tühi</string>\n  <string name=\"installing_message\">Puuduta käsku <b>Uuenda</b>, kui seda küsitakse.\nReVanced Manager suletakse uuendamise ajal.</string>\n  <string name=\"no_changelogs_found\">Muudatuste logisid ei leitud</string>\n  <string name=\"just_now\">Just praegu</string>\n  <string name=\"minutes_ago\">%s m tagasi</string>\n  <string name=\"hours_ago\">%s h tagasi</string>\n  <string name=\"days_ago\">%s p tagasi</string>\n  <string name=\"invalid_date\">Vigane kuupäev</string>\n  <string name=\"disable_battery_optimization\">Keela aku optimeerimine</string>\n  <string name=\"input_dialog_value_invalid\">Vigane väärtus</string>\n  <string name=\"option_required\">See valik on kohustuslik</string>\n  <string name=\"required_options_screen\">Kohustuslikud valikud</string>\n  <string name=\"failed_to_check_updates\">Uuenduste kontrollimine ebaõnnestus: %s</string>\n  <string name=\"no_update_available\">Uuendust pole saadaval</string>\n  <string name=\"no_announcements_found\">Teadaandeid ei leitud</string>\n  <string name=\"update_check\">Kontrollin uuendusi…</string>\n  <string name=\"dismiss_temporary\">Mitte praegu</string>\n  <string name=\"update_available_dialog_description\">Saadaval on ReVanced Manageri uus versioon (%s).</string>\n  <string name=\"failed_to_download_update\">Uuenduse allalaadimine ebaõnnestus: %s</string>\n  <string name=\"download\">Lae alla</string>\n  <string name=\"download_confirmation_metered\">Kasutate praegu piiratud andmesideühendust ja teie teenusepakkuja võib kohaldada andmesidetasusid.\n\nKas soovite siiski jätkata?</string>\n  <string name=\"download_update_confirmation\">Laadida uuendus alla?</string>\n  <string name=\"no_contributors_found\">Kaastöötajaid ei leitud</string>\n  <string name=\"select\">Vali</string>\n  <string name=\"select_deselect_all\">Vali kõik või eemalda valik</string>\n  <string name=\"select_patches_type_dialog_description\">Lisa uusi parandusi URL-ist või kohalikest failidest</string>\n  <string name=\"local_patches_description\">Lisa parandused kohalikust salvestusruumist.</string>\n  <string name=\"remote_patches_description\">Lisa parandused URL-ist. Parandused saavad automaatselt uuendada.</string>\n  <string name=\"recommended\">Soovitatav</string>\n  <string name=\"installation_failed_dialog_title\">Paigaldus ebaõnnestus</string>\n  <string name=\"installation_cancelled_dialog_title\">Paigaldus tühistati</string>\n  <string name=\"installation_blocked_dialog_title\">Paigaldus blokeeritud</string>\n  <string name=\"installation_conflict_dialog_title\">Paigalduskonflikt</string>\n  <string name=\"installation_incompatible_dialog_title\">Paigaldus ühildumatu</string>\n  <string name=\"installation_invalid_dialog_title\">Paigaldus vigane</string>\n  <string name=\"installation_storage_issue_dialog_title\">Ebapiisavalt salvestusruumi</string>\n  <string name=\"installation_timeout_dialog_title\">Paigaldus aegus</string>\n  <string name=\"installation_failed_description\">Paigaldus ebaõnnestus tundmatu põhjuse tõttu. Proovi uuesti?</string>\n  <string name=\"installation_aborted_description\">Paigaldus tühistati käsitsi. Proovi uuesti?</string>\n  <string name=\"installation_blocked_description\">Paigaldus blokeeriti. Vaadake üle oma seadme turvaseaded ja proovige uuesti.</string>\n  <string name=\"installation_conflict_description\">Paigalduse takistas rakenduse olemasolev installatsioon. Desinstallige installitud rakendus ja proovige uuesti?</string>\n  <string name=\"installation_incompatible_description\">Rakendus ei ühildu selle seadmega. Kasutage selle seadmega ühilduvat APK-d ja proovige uuesti.</string>\n  <string name=\"installation_invalid_description\">Rakendus on vigane. Desinstallige rakendus ja proovige uuesti?</string>\n  <string name=\"installation_storage_issue_description\">Rakendust ei saanud paigaldada ebapiisava salvestusruumi tõttu. Vabastage ruumi ja proovige uuesti.</string>\n  <string name=\"installation_timeout_description\">Paigaldus võttis liiga kaua aega. Proovi uuesti?</string>\n  <string name=\"reinstall\">Installi uuesti</string>\n  <string name=\"show\">Näita</string>\n  <string name=\"debugging\">Silumine</string>\n  <string name=\"about_device\">Seadme kohta</string>\n  <string name=\"enter_url\">Sisesta URL</string>\n  <string name=\"next\">Järgmine</string>\n  <string name=\"auto_update\">Automaatne uuendus</string>\n  <string name=\"add_patches\">Lisa parandusi</string>\n  <string name=\"auto_update_description\">Uuenda automaatselt, kui uus versioon on saadaval</string>\n  <string name=\"patches_prereleases\">Kasuta eelväljaandeid</string>\n  <string name=\"patches_prereleases_description\">Kasuta %s eelväljaandeid</string>\n  <string name=\"patches_url\">Paranduste URL</string>\n  <string name=\"incompatible_patches_dialog\">Need parandused ei ühildu valitud rakenduse versiooniga (%1$s).\n\nLisateabe saamiseks klõpsake parandustel.</string>\n  <string name=\"incompatible_patch\">Ühildumatu parandus</string>\n  <string name=\"any_version\">Mis tahes</string>\n  <string name=\"never_show_again\">Ära enam näita</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Näita uuendusteatist käivitamisel</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Kuva hüpikteatis iga kord, kui käivitamisel on saadaval uus uuendus</string>\n  <string name=\"failed_to_import_keystore\">Võtmehoidla importimine ebaõnnestus</string>\n  <string name=\"export\">Ekspordi</string>\n  <string name=\"confirm\">Kinnita</string>\n  <string name=\"new_announcement\">Uus teadaanne:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d paik</item>\n    <item quantity=\"other\">%d paika</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Käivita %d paik</item>\n    <item quantity=\"other\">Käivita %d paika</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d valitud</item>\n    <item quantity=\"other\">%d valitud</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-eu-rES/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">Adabakitzailea</string>\n  <string name=\"onboarding_welcome_to\">Ongi etorri</string>\n  <string name=\"onboarding_welcome_back\">Kaixo! Berria da</string>\n  <string name=\"onboarding_apps_subtitle\">Aplikazio bat aukeratu dezakezu orain adabakitzeko edo geroago egiteko</string>\n  <string name=\"onboarding_apps_network_error\">Ezin izan dira adabakiak kargatu sarea erabilgarri edo ezegonkorra delako. Konektatu sare egonkor batera eta saiatu berriro.</string>\n  <string name=\"onboarding_updates_subtitle\">Eguneratze automatikoak konfiguratu ReVanced Manager eta adabakiak eguneratuta mantentzeko</string>\n  <string name=\"banner_sources_not_downloaded_description\">Adabakiak eta deskargatzaileak ezin izan dira deskargatu konfigurazioan zehar. Sakatu \\\"eguneratu\\\" deskargatzeko.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager konektatu egingo da %s-rekin, hasierako bertsioak deskargatzeko, zure gailua internetera konektatuta badago.</string>\n  <string name=\"retry\">Berriro saiatu</string>\n  <string name=\"onboarding_skip\">Orain arte saltatu</string>\n  <string name=\"onboarding_recommended_version\">Gomendatutako bertsioa: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Baimenak saltatu?</string>\n  <string name=\"onboarding_permissions_skip_description\">Beharrezko baimenik gabe, funtzio batzuek ez dute behar bezala funtzionatuko. Geroago eman ditzakezu aplikazioaren ezarpenetan.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Dena den saltatu</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager-ek baimen batzuk behar ditu ondo funtzionatzeko</string>\n  <string name=\"permission_install_apps\">Instalatu aplikazio ezezagunak</string>\n  <string name=\"permission_install_apps_description\">Adabakitutako aplikazioak instalatzeko beharrezkoa</string>\n  <string name=\"permission_notifications\">Jakinarazpenak</string>\n  <string name=\"permission_notifications_description\">Atzeko planoan adabakitzea etengabe ahalbidetzen du</string>\n  <string name=\"permission_battery\">Bateriaren optimizazioa</string>\n  <string name=\"permission_battery_description\">Atzeko planoan adabakitzea etetea eragozten du</string>\n  <string name=\"permission_grant\">Eman</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager deskargatzailearen ostalaria</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager deskargatzaileetarako sarbidea kontrolatzeko erabiltzen da. ReVanced Managerrek bakarrik du hau.</string>\n  <string name=\"fab_patch_app\">Aplikazio bat adabakitu</string>\n  <string name=\"fab_add_patches\">Gehitu adabakiak</string>\n  <string name=\"new_downloader_notification\">Deskargatzaile berri(ak) eskuragarri. Egin klik hemen konfiguratzeko.</string>\n  <string name=\"patches_not_downloaded\">Adabakiak ez dira deskargatu.</string>\n  <string name=\"app_source_dialog_option_auto_description\">Erabili instalatutako aplikazioa, gero deskargatutako APK, gero eskuragarri dauden deskargatzaileak</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Ez dago aplikazio edo deskargatzaile bateragarririk eskuragarri</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Muntatutako aplikazioak ezin dira berriro adabakitu root sarbiderik gabe</string>\n  <string name=\"patch_selector_item\">Hautatu adabakiak</string>\n  <string name=\"patch_selector_item_description\">%d adabaki hautatu dira</string>\n  <string name=\"patch_selection_changed_warning\">Adabakien hautaketa aldatu da.</string>\n  <string name=\"apk_source_selector_item\">Hautatu APK iturria</string>\n  <string name=\"apk_source_auto\">Automatikoa</string>\n  <string name=\"apk_source_auto_installed\">Automatikoa · Instalatutako APK erabiliz</string>\n  <string name=\"apk_source_auto_downloaded\">Automatikoa · Deskargatutako APK erabiliz</string>\n  <string name=\"apk_source_auto_downloader\">Automatikoa · Eskuragarri dauden deskargatzaileak erabiliz</string>\n  <string name=\"apk_source_auto_storage\">Automatikoa · Biltegitik hautatu</string>\n  <string name=\"apk_source_downloaded\">Dagoeneko deskargatuta</string>\n  <string name=\"auto_updates_dialog_description\">Nahi al duzu ReVanced Manager-ek aldian-aldian egiaztatzea hurrengo osagaien eguneraketak?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced adabakiak</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Deskargatzaileak</string>\n  <string name=\"auto_updates_dialog_note\">Ezarpen hauek geroago alda daitezke.\n\n    ReVanced Manager konektatu egingo da %s-rekin, hasierako bertsioak deskargatzeko, zure gailua internetera konektatuta badago.</string>\n  <string name=\"announcements_filter_tag\">Etiketaren arabera iragazi</string>\n  <string name=\"announcements_show_archived\">Artxibatutakoak erakutsi</string>\n  <string name=\"updates_description\">Egiaztatu eguneraketak eta ikusi aldaketen erregistroa</string>\n  <string name=\"downloads_description\">Deskargatzaileak eta deskargatutako aplikazioak</string>\n  <string name=\"safeguards_toggled_warning\">Babesak txandakatu dira.</string>\n  <string name=\"about_app_name\">%1$s-ri buruz</string>\n  <string name=\"search_languages\">Bilatu hizkuntzak…</string>\n  <string name=\"keystore\">Gako-biltegia</string>\n  <string name=\"patches_selections\">Adabaki hautapenak</string>\n  <string name=\"select_bundle_for_import\">Hautatu inportatzeko sorta</string>\n  <string name=\"select_bundle_for_export\">Hautatu esportatzeko sorta</string>\n  <string name=\"patch_selection_packages\">Gordetako hautapenak dituzten aplikazioak</string>\n  <string name=\"patch_selection_entries\">Guztira hautatutako adabakiak</string>\n  <string name=\"reset_configuration\">Berrezarri konfigurazioa</string>\n  <string name=\"reset_patch_selection\">Adabaki hautapenak</string>\n  <string name=\"reset_patch_options\">Adabaki aukerak</string>\n  <string name=\"downloaders\">Deskargatzaileak</string>\n  <string name=\"downloader_prereleases\">Erabili aurre-argitalpenak</string>\n  <string name=\"downloader_prereleases_description\">Erabili deskargatzaile nagusiaren aurre-argitalpen bertsioak</string>\n  <string name=\"downloader_state_loaded\">Kargatuta</string>\n  <string name=\"downloader_state_failed\">Kargatzeak huts egin du. Egin klik xehetasun gehiago lortzeko</string>\n  <string name=\"downloader_state_missing\">Falta da</string>\n  <string name=\"downloader_delete_apps_title\">Hautatutako aplikazioak ezabatu</string>\n  <string name=\"downloader_delete_apps_description\">Ziur zaude hautatutako aplikazioak ezabatu nahi dituzula?</string>\n  <string name=\"downloader_delete_single_description\">Ziur zaude \\\"%s\\\" ezabatu nahi duzula?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager bidez deskargatutako aplikazioak hemen agertuko dira.</string>\n  <string name=\"downloader_url\">Deskargatzailearen URLa</string>\n  <string name=\"downloader_add\">Gehitu deskargatzailea</string>\n  <string name=\"select_downloader_type_dialog_description\">Gehitu deskargatzaile berriak URLetatik edo tokiko fitxategietatik</string>\n  <string name=\"local_downloaders_description\">Gehitu deskargatzaileak tokiko biltegitik.</string>\n  <string name=\"remote_downloaders_description\">Gehitu deskargatzaileak URLetatik. Automatikoki eguneratu daitezke.</string>\n  <string name=\"install_revanced_downloaders\">Instalatu deskargatzaileak aplikazioak zuzenean ReVanced Manager-en barruan lortzeko.</string>\n  <string name=\"install_revanced_downloader\">Instalatu ReVanced deskargatzaileak</string>\n  <string name=\"cancel_downloader_install_title\">Deskargatzaileen instalazioa bertan behera utzi?</string>\n  <string name=\"cancel_downloader_install_description\">Deskargatzaileen instalazio bat martxan dago. Orain alde egiten baduzu, deskarga bertan behera geratuko da.</string>\n  <string name=\"downloader_sources_unavailable_title\">Deskargatzaile hauek falta dira</string>\n  <string name=\"downloader_sources_unavailable_description\">Egin klik eguneratzeko botoian konpontzeko.</string>\n  <string name=\"downloader_update_failed\">Ezin izan da deskargatzailea eguneratu: %s</string>\n  <string name=\"downloader_replace_fail\">Ezin izan da deskargatzailea inportatu: %s</string>\n  <string name=\"select_from_storage_description\">Hautatu APK fitxategi bat biltegitik fitxategi hautatzailea erabiliz</string>\n  <string name=\"enable\">Gaitu</string>\n  <string name=\"disable\">Desgaitu</string>\n  <string name=\"process_runtime_memory_limit_description\">Adabakitzaile prozesuak erabil dezakeen memoria kopuru maximoa</string>\n  <string name=\"reset_onboarding\">Berrezarri integrazioa</string>\n  <string name=\"reset_onboarding_description\">Erakutsi integrazio pantaila aplikazioa hurrengoan abiaraztean</string>\n  <string name=\"api_not_working_title\">API zerbitzua behera dago une honetan</string>\n  <string name=\"api_not_working_description\">Baliteke funtzio batzuk eragina izatea. Egiaztatu zure konexioa edo API URL helbidea ezarpenetan.</string>\n  <string name=\"no_patched_apps_found\">Ez da adabakitutako aplikaziorik aurkitu</string>\n  <string name=\"no_patched_apps_description\">Une honetan ez duzu adabakitutako aplikaziorik, guk dakigunez. Aldatu hori zure lehen aplikazioa adabakituz!</string>\n  <string name=\"patched_apps_section_title\">Adabakitutako aplikazioak</string>\n  <string name=\"patchable_apps_section_title\">Adabaki daitezkeen aplikazioak</string>\n  <string name=\"no_patches_found\">Ez da adabakirik aurkitu</string>\n  <string name=\"no_patches_description\">Oraindik ez duzu adabakirik. Gehitu adabakiak beheko botoia sakatuz!</string>\n  <string name=\"split_apk_not_supported\">APK banatuak ezin dira adabakitu</string>\n  <string name=\"no_downloaders_installed\">Ez dago aplikazio deskargatzailerik instalatuta!</string>\n  <string name=\"no_downloaders_trusted\">Ez zaie aplikazio deskargatzaileei konfiantzarik eman! Mesedez, egiaztatu zure ezarpenak.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paketeak</string>\n  <string name=\"patch_selector_sheet_actions_title\">Ekintzak</string>\n  <string name=\"restore_default_selection\">Berrezarri hautapen lehenetsia</string>\n  <string name=\"deselect_all\">Desautatu guztiak</string>\n  <string name=\"invert_selection\">Hautapen alderantzikatu</string>\n  <string name=\"deselect_all_except\">Guztiak desautatu, %s izan ezik</string>\n  <string name=\"scope_dialog_title\">Honi aplikatu</string>\n  <string name=\"scope_all_patches\">Adabaki guztiak</string>\n  <string name=\"scope_bundle_patches\">%s soilik</string>\n  <string name=\"save_as_file\">Gorde fitxategietan</string>\n  <string name=\"export_patcher_logs\">Esportatu adabakitzaile erregistroak</string>\n  <string name=\"save_logs_success\">Erregistroak gordeta</string>\n  <string name=\"downloader_activity_dialog_body\">Erabiltzailearen interakzioa beharrezkoa da deskargatzaile honekin aurrera egiteko.</string>\n  <string name=\"patcher_step_unpack\">Prestatu adabakitzailea</string>\n  <string name=\"view_announcement\">Iragarkia ikusi</string>\n  <string name=\"license\">Lizentzia</string>\n  <string name=\"source\">Iturria</string>\n  <string name=\"repository\">Biltegia</string>\n  <string name=\"bundle_information_by_author\">%1$s-ren eskutik</string>\n  <string name=\"version_compatibility_warning\">Hautatutako bertsioa bateraezina izan daiteke hautatutako adabakiekin</string>\n  <string name=\"announcements\">Iragarkiak</string>\n  <string name=\"archive\">Artxiboa</string>\n  <string name=\"view_update\">Ikusi eguneratzea</string>\n  <string name=\"update_checking_downloader\">Egiaztatu ReVanced Deskargatzaileen eguneraketak abiaraztean</string>\n  <string name=\"update_checking_downloader_description\">Egiaztatu instalatutako ReVanced Deskargatzaileen eguneraketak aplikazioa hasten denean</string>\n  <string name=\"prereleases_warning\">Aurretiko bertsioak ezegonkorrak izan daitezke eta akatsak izan ditzakete. Baliteke hutsegiteak, datu-galerak edo beste ustekabeko arazoak izatea. Gaitu hau arrisku horiekin eroso bazaude soilik.</string>\n  <string name=\"changelog\">Ikusi aldaketen erregistroa</string>\n  <string name=\"no_announcements_found\">Ez da iragarkirik aurkitu</string>\n  <string name=\"new_announcement\">Iragarki berria:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d adabaki</item>\n    <item quantity=\"other\">%d adabaki</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d adabaki exekutatu</item>\n    <item quantity=\"other\">%d adabaki exekutatu</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d hautatuta</item>\n    <item quantity=\"other\">%d hautatuta</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fa-rIR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">پچ‌کننده</string>\n  <string name=\"onboarding_welcome_to\">به خوش آمدید</string>\n  <string name=\"onboarding_welcome_back\">سلام! این نسخه جدید</string>\n  <string name=\"onboarding_apps_subtitle\">اکنون می‌توانید یک برنامه را برای پچ کردن انتخاب کنید یا این کار را بعداً انجام دهید</string>\n  <string name=\"onboarding_updates_subtitle\">به‌روزرسانی‌های خودکار را پیکربندی کنید تا ReVanced Manager و پچ‌ها به‌روز بمانند</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager برای دانلود نسخه‌های اولیه، در صورتی که دستگاه شما به اینترنت متصل باشد، به %s متصل خواهد شد.</string>\n  <string name=\"retry\">تلاش مجدد</string>\n  <string name=\"onboarding_skip\">فعلاً رد کن</string>\n  <string name=\"onboarding_recommended_version\">نسخه پیشنهادی: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">از مجوزها صرف‌نظر شود؟</string>\n  <string name=\"onboarding_permissions_skip_description\">بدون مجوزهای لازم، برخی از ویژگی‌ها ممکن است به درستی کار نکنند. می‌توانید بعداً در تنظیمات برنامه آن‌ها را اعطا کنید.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">به هر حال رد کن</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager برای کارکرد صحیح به چند مجوز نیاز دارد</string>\n  <string name=\"permission_install_apps\">نصب برنامه‌های ناشناس</string>\n  <string name=\"permission_install_apps_description\">برای نصب برنامه‌های پچ شده لازم است</string>\n  <string name=\"permission_notifications\">اعلان‌ها</string>\n  <string name=\"permission_battery\">بهینه‌سازی باتری</string>\n  <string name=\"permission_battery_description\">از قطع شدن پچ‌کردن در پس‌زمینه جلوگیری می‌کند</string>\n  <string name=\"permission_grant\">اعطا</string>\n  <string name=\"downloader_host_permission_label\">میزبان دانلودکننده ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">برای کنترل دسترسی به دانلودکننده‌های ReVanced Manager استفاده می‌شود. فقط ReVanced Manager این را دارد.</string>\n  <string name=\"fab_patch_app\">یک برنامه را پچ کنید</string>\n  <string name=\"fab_add_patches\">افزودن پچ‌ها</string>\n  <string name=\"new_downloader_notification\">دانلودکننده(های) جدید موجود است. برای پیکربندی آن‌ها اینجا کلیک کنید.</string>\n  <string name=\"patches_not_downloaded\">وصله‌ها دانلود نشده‌اند.</string>\n  <string name=\"app_source_dialog_option_auto_description\">استفاده از برنامه نصب شده، سپس APK دانلود شده، سپس دانلودکننده‌های موجود</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">برنامه سازگار یا دانلودکننده‌ای در دسترس نیست</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">برنامه‌های نصب‌شده بدون دسترسی روت نمی‌توانند دوباره پچ شوند</string>\n  <string name=\"patch_selector_item\">پچ‌ها را انتخاب کنید</string>\n  <string name=\"patch_selector_item_description\">%d پچ انتخاب شده است</string>\n  <string name=\"patch_selection_changed_warning\">انتخاب وصله‌ها تغییر کرده است</string>\n  <string name=\"apk_source_selector_item\">منبع APK را انتخاب کنید</string>\n  <string name=\"apk_source_auto\">خودکار</string>\n  <string name=\"apk_source_auto_installed\">خودکار · با استفاده از APK نصب شده</string>\n  <string name=\"apk_source_auto_downloaded\">خودکار · با استفاده از APK دانلود شده</string>\n  <string name=\"apk_source_auto_downloader\">خودکار · با استفاده از دانلودکننده‌های موجود</string>\n  <string name=\"apk_source_auto_storage\">خودکار · انتخاب از حافظه</string>\n  <string name=\"apk_source_downloaded\">قبلاً دانلود شده</string>\n  <string name=\"auto_updates_dialog_description\">آیا می‌خواهید ReVanced Manager به صورت دوره‌ای به‌روزرسانی‌های اجزای زیر را بررسی کند؟</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">پچ‌های ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: دانلودکننده‌ها</string>\n  <string name=\"auto_updates_dialog_note\">این تنظیمات را می‌توان بعداً تغییر داد.\n\n    ReVanced Manager برای دانلود نسخه‌های اولیه، در صورتی که دستگاه شما به اینترنت متصل باشد، به %s متصل خواهد شد.</string>\n  <string name=\"announcements_filter_tag\">فیلتر بر اساس برچسب</string>\n  <string name=\"announcements_show_archived\">نمایش آرشیو شده</string>\n  <string name=\"updates_description\">بررسی به‌روزرسانی‌ها و مشاهده تغییرات</string>\n  <string name=\"downloads_description\">بارگیری‌کننده‌ها و برنامه‌های بارگیری‌شده</string>\n  <string name=\"safeguards_toggled_warning\">مراقبت‌ها تغییر وضعیت داده‌اند</string>\n  <string name=\"about_app_name\">درباره %1$s</string>\n  <string name=\"search_languages\">جستجوی زبان‌ها…</string>\n  <string name=\"keystore\">کی‌استور</string>\n  <string name=\"patches_selections\">انتخاب‌های پچ‌ها</string>\n  <string name=\"select_bundle_for_import\">بسته‌ای را برای وارد کردن به آن انتخاب کنید</string>\n  <string name=\"select_bundle_for_export\">بسته‌ای را برای خروجی گرفتن از آن انتخاب کنید</string>\n  <string name=\"patch_selection_packages\">برنامه‌ها با انتخاب‌های ذخیره‌شده</string>\n  <string name=\"patch_selection_entries\">مجموع پچ‌های انتخاب شده</string>\n  <string name=\"reset_configuration\">بازنشانی پیکربندی</string>\n  <string name=\"reset_patch_selection\">انتخاب‌های پچ</string>\n  <string name=\"reset_patch_options\">گزینه‌های پچ</string>\n  <string name=\"downloaders\">بارگیری‌کننده‌ها</string>\n  <string name=\"downloader_prereleases\">استفاده از نسخه‌های پیش‌انتشار</string>\n  <string name=\"downloader_prereleases_description\">استفاده از نسخه‌های پیش‌انتشار دانلودکننده اصلی</string>\n  <string name=\"downloader_state_loaded\">بارگذاری شد</string>\n  <string name=\"downloader_state_failed\">بارگیری ناموفق بود. برای جزئیات بیشتر کلیک کنید</string>\n  <string name=\"downloader_state_missing\">گمشده</string>\n  <string name=\"downloader_delete_apps_title\">حذف برنامه‌های انتخاب‌شده</string>\n  <string name=\"downloader_delete_apps_description\">آیا مطمئن هستید که می‌خواهید برنامه‌های انتخاب‌شده را حذف کنید؟</string>\n  <string name=\"downloader_delete_single_description\">آیا مطمئن هستید که می‌خواهید \\\"%s\\\" را حذف کنید؟</string>\n  <string name=\"downloader_settings_no_apps_description\">برنامه‌های دانلود شده از طریق ReVanced Manager در اینجا نمایش داده می‌شوند.</string>\n  <string name=\"downloader_url\">URL دانلودکننده</string>\n  <string name=\"downloader_add\">افزودن دانلودکننده</string>\n  <string name=\"select_downloader_type_dialog_description\">دانلودکننده‌های جدید را از URL یا فایل‌های محلی اضافه کنید</string>\n  <string name=\"local_downloaders_description\">دانلودکننده‌ها را از حافظه محلی اضافه کنید.</string>\n  <string name=\"remote_downloaders_description\">دانلودکننده‌ها را از URL اضافه کنید. قابلیت به‌روزرسانی خودکار دارد.</string>\n  <string name=\"install_revanced_downloaders\">دانلودکننده‌ها را نصب کنید تا برنامه‌ها را مستقیماً در ReVanced Manager دریافت کنید.</string>\n  <string name=\"install_revanced_downloader\">نصب دانلودکننده‌های ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">لغو نصب دانلودکننده‌ها؟</string>\n  <string name=\"cancel_downloader_install_description\">نصب دانلودکننده‌ها در حال انجام است. اگر اکنون خارج شوید، دانلود لغو خواهد شد.</string>\n  <string name=\"downloader_sources_unavailable_title\">این دانلودکننده‌ها موجود نیستند</string>\n  <string name=\"downloader_sources_unavailable_description\">برای رفع مشکل، روی دکمه به‌روزرسانی کلیک کنید.</string>\n  <string name=\"downloader_update_failed\">به‌روزرسانی دانلودکننده با شکست مواجه شد: %s</string>\n  <string name=\"downloader_replace_fail\">وارد کردن دانلودکننده با شکست مواجه شد: %s</string>\n  <string name=\"select_from_storage_description\">یک فایل APK را از حافظه با استفاده از انتخاب‌گر فایل انتخاب کنید</string>\n  <string name=\"enable\">فعال کردن</string>\n  <string name=\"disable\">غیرفعال کردن</string>\n  <string name=\"process_runtime_memory_limit_description\">حداکثر مقدار حافظه‌ای که فرآیند پچر می‌تواند استفاده کند</string>\n  <string name=\"reset_onboarding\">بازنشانی صفحه معرفی</string>\n  <string name=\"reset_onboarding_description\">نمایش صفحه معرفی در اجرای بعدی برنامه</string>\n  <string name=\"api_not_working_title\">سرویس API در حال حاضر قطع است</string>\n  <string name=\"api_not_working_description\">برخی از ویژگی‌ها ممکن است تحت تاثیر قرار گیرند. اتصال یا آدرس اینترنتی API خود را در تنظیمات بررسی کنید.</string>\n  <string name=\"no_patched_apps_found\">هیچ برنامه پچ‌شده‌ای یافت نشد</string>\n  <string name=\"no_patched_apps_description\">شما در حال حاضر هیچ برنامه پچ‌شده‌ای که ما از آن مطلع باشیم، ندارید. با پچ‌کردن اولین برنامه خود، این وضعیت را تغییر دهید!</string>\n  <string name=\"patched_apps_section_title\">برنامه‌های وصله شده</string>\n  <string name=\"patchable_apps_section_title\">برنامه‌هایی که می‌توان وصله کرد</string>\n  <string name=\"no_patches_found\">هیچ پچی یافت نشد</string>\n  <string name=\"no_patches_description\">شما هنوز هیچ پچی ندارید. با ضربه زدن روی دکمه زیر، پچ‌ها را اضافه کنید!</string>\n  <string name=\"split_apk_not_supported\">APKهای تقسیم‌شده قابل پچ شدن نیستند</string>\n  <string name=\"no_downloaders_installed\">هیچ دانلودکننده برنامه‌ای نصب نشده است!</string>\n  <string name=\"no_downloaders_trusted\">هیچ دانلودکننده برنامه‌ای مورد اعتماد قرار نگرفته است! لطفاً تنظیمات خود را بررسی کنید.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">بسته‌ها</string>\n  <string name=\"patch_selector_sheet_actions_title\">عملیات</string>\n  <string name=\"restore_default_selection\">بازگرداندن انتخاب پیش‌فرض</string>\n  <string name=\"deselect_all\">لغو انتخاب همه</string>\n  <string name=\"invert_selection\">معکوس کردن انتخاب</string>\n  <string name=\"deselect_all_except\">لغو انتخاب همه به جز %s</string>\n  <string name=\"scope_dialog_title\">اعمال در</string>\n  <string name=\"scope_all_patches\">همه وصله‌ها</string>\n  <string name=\"scope_bundle_patches\">فقط %s</string>\n  <string name=\"save_as_file\">ذخیره در فایل‌ها</string>\n  <string name=\"export_patcher_logs\">خروجی گرفتن از گزارش‌های پچر</string>\n  <string name=\"save_logs_success\">گزارش‌ها ذخیره شد</string>\n  <string name=\"downloader_activity_dialog_body\">برای ادامه با این بارگیری‌کننده، تعامل کاربر لازم است.</string>\n  <string name=\"patcher_step_unpack\">پچ‌کننده را آماده کنید</string>\n  <string name=\"view_announcement\">مشاهده اطلاعیه</string>\n  <string name=\"license\">مجوز</string>\n  <string name=\"source\">منبع</string>\n  <string name=\"repository\">مخزن</string>\n  <string name=\"bundle_information_by_author\">توسط %1$s</string>\n  <string name=\"version_compatibility_warning\">نسخه انتخاب شده ممکن است با وصله‌های انتخاب شده ناسازگار باشد</string>\n  <string name=\"announcements\">اطلاعیه‌ها</string>\n  <string name=\"archive\">بایگانی</string>\n  <string name=\"view_update\">مشاهده به‌روزرسانی</string>\n  <string name=\"update_checking_downloader\">بررسی به‌روزرسانی‌های دانلودکننده‌های ReVanced هنگام راه‌اندازی</string>\n  <string name=\"update_checking_downloader_description\">بررسی به‌روزرسانی‌های دانلودکننده‌های ReVanced نصب شده هنگام شروع برنامه</string>\n  <string name=\"prereleases_warning\">نسخه‌های پیش‌انتشار ممکن است ناپایدار باشند و حاوی اشکالاتی باشند. ممکن است با از کار افتادن، از دست دادن داده‌ها یا سایر مشکلات غیرمنتظره مواجه شوید. فقط در صورتی این گزینه را فعال کنید که با این خطرات راحت هستید.</string>\n  <string name=\"changelog\">مشاهده تغییرات</string>\n  <string name=\"no_announcements_found\">هیچ اطلاعیه‌ای یافت نشد</string>\n  <string name=\"new_announcement\">اطلاعیه جدید:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d وصله</item>\n    <item quantity=\"other\">%d وصله</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">اجرای %d وصله</item>\n    <item quantity=\"other\">اجرای %d وصله</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d انتخاب شده</item>\n    <item quantity=\"other\">%d انتخاب شده</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fi-rFI/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Paikkaaja</string>\n  <string name=\"patches\">Paikkaukset</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Manager</string>\n  <string name=\"onboarding_welcome_to\">Tervetuloa</string>\n  <string name=\"onboarding_welcome_back\">Hei! Se on uusi</string>\n  <string name=\"onboarding_apps_subtitle\">Voit valita paikattavan sovelluksen nyt tai tehdä sen myöhemmin</string>\n  <string name=\"onboarding_apps_network_error\">Päivityksiä ei voitu ladata, koska verkko ei ole käytettävissä tai on epävakaa. Yhdistä vakaaseen verkkoon ja yritä uudelleen.</string>\n  <string name=\"onboarding_updates_subtitle\">Määritä automaattiset päivitykset pitääksesi ReVanced Managerin ja paikat ajan tasalla</string>\n  <string name=\"banner_sources_not_downloaded_description\">Päivityksiä ja latausohjelmia ei voitu ladata asennuksen aikana. Napauta päivitä ladataksesi ne.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager muodostaa yhteyden kohteeseen %s ladatakseen alkuperäiset versiot, jos laitteesi on yhdistetty internetiin.</string>\n  <string name=\"retry\">Yritä uudelleen</string>\n  <string name=\"onboarding_skip\">Ohita toistaiseksi</string>\n  <string name=\"onboarding_recommended_version\">Suositeltu versio: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Ohita käyttöoikeudet?</string>\n  <string name=\"onboarding_permissions_skip_description\">Ilman vaadittuja käyttöoikeuksia jotkin ominaisuudet eivät ehkä toimi oikein. Voit myöntää ne myöhemmin sovelluksen asetuksista.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Ohita joka tapauksessa</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager tarvitsee joitakin käyttöoikeuksia toimiakseen oikein.</string>\n  <string name=\"permission_install_apps\">Asenna tuntemattomia sovelluksia</string>\n  <string name=\"permission_install_apps_description\">Vaaditaan paikattujen sovellusten asentamiseen</string>\n  <string name=\"permission_notifications\">Ilmoitukset</string>\n  <string name=\"permission_notifications_description\">Mahdollistaa keskeytymättömän korjaamisen taustalla</string>\n  <string name=\"permission_battery\">Akun optimointi</string>\n  <string name=\"permission_battery_description\">Estää paikkauksen keskeytymisen taustalla</string>\n  <string name=\"permission_grant\">Myönnä</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager -lataajaisäntä</string>\n  <string name=\"downloader_host_permission_description\">Käytetään hallitsemaan pääsyä ReVanced Manager -lataajiin. Vain ReVanced Managerilla on tämä.</string>\n  <string name=\"toast_copied_to_clipboard\">Kopioitu!</string>\n  <string name=\"copy_to_clipboard\">Kopioi leikepöydälle</string>\n  <string name=\"dashboard\">Hallintapaneeli</string>\n  <string name=\"settings\">Asetukset</string>\n  <string name=\"select_app\">Valitse sovellus</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d valittu</string>\n  <string name=\"fab_patch_app\">Paikkaa sovellus</string>\n  <string name=\"fab_add_patches\">Lisää paikkauksia</string>\n  <string name=\"new_downloader_notification\">Uusia lataajia saatavilla. Napauta tästä määrittääksesi ne.</string>\n  <string name=\"unsupported_architecture_warning\">Paikkaus tällä laitearkkitehtuurilla ei ole tuettu ja todennäköisesti epäonnistuu.</string>\n  <string name=\"import_\">Tuo</string>\n  <string name=\"import_patches\">Tuo paikkaukset</string>\n  <string name=\"file_field_set\">Valittu</string>\n  <string name=\"file_field_not_set\">Ei valittu</string>\n  <string name=\"field_not_set\">Ei asetettu</string>\n  <string name=\"patches_missing\">Puuttuu</string>\n  <string name=\"patches_error\">Virhe</string>\n  <string name=\"patches_error_description\">Paikkauksia ei voitu ladata. Napauta nähdäksesi virheen</string>\n  <string name=\"patches_not_downloaded\">Päivityksiä ei ole ladattu.</string>\n  <string name=\"patches_name_default\">Paikkaukset</string>\n  <string name=\"patches_name_fallback\">Nimetön</string>\n  <string name=\"android_11_bug_dialog_title\">Android 11 -virhe</string>\n  <string name=\"android_11_bug_dialog_description\">Sovelluksen asennusoikeus on myönnettävä etukäteen, jotta vältetään Android 11 -järjestelmän virhe, joka vaikuttaa negatiivisesti käyttökokemukseen.</string>\n  <string name=\"no_network_toast\">Internet-yhteyttä ei ole käytettävissä</string>\n  <string name=\"selected_app_meta_any_version\">Mikä tahansa saatavilla oleva versio</string>\n  <string name=\"app_source_dialog_title\">Valitse lähde</string>\n  <string name=\"app_source_dialog_option_auto\">Automaattinen</string>\n  <string name=\"app_source_dialog_option_auto_description\">Käytä asennettua sovellusta, sitten ladattua APK:ta, sitten käytettävissä olevia latausohjelmia</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Yhteensopivia sovelluksia tai latausohjelmia ei ole saatavilla</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Liitettyjä sovelluksia ei voi paikata uudelleen ilman root-oikeuksia</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Versio %s ei vastaa ehdotettua versiota</string>\n  <string name=\"patch_item_description\">Aloita sovelluksen paikkaaminen</string>\n  <string name=\"patch_selector_item\">Valitse paikkaukset</string>\n  <string name=\"patch_selector_item_description\">%d paikkausta valittu</string>\n  <string name=\"patch_selection_changed_warning\">Päivitysten valintaa on muutettu</string>\n  <string name=\"no_patches_selected\">Paikkauksia ei ole valittu</string>\n  <string name=\"network_unavailable_warning\">Laitteesi ei ole yhteydessä Internetiin. Lataaminen epäonnistuu myöhemmin.</string>\n  <string name=\"network_metered_warning\">Käytät parhaillaan käytön mukaan laskutettavaa yhteyttä. Palveluntarjoajasi datamaksuja voidaan soveltaa.</string>\n  <string name=\"apk_source_selector_item\">Valitse APK-lähde</string>\n  <string name=\"apk_source_auto\">Automaattinen</string>\n  <string name=\"apk_source_auto_installed\">Automaattinen · Käytetään asennettua APK:ta</string>\n  <string name=\"apk_source_auto_downloaded\">Automaattinen · Käytetään ladattua APK:ta</string>\n  <string name=\"apk_source_auto_downloader\">Automaattinen · Käyttämällä saatavilla olevia lataajia</string>\n  <string name=\"apk_source_auto_storage\">Automaattinen · Valitse tallennustilasta</string>\n  <string name=\"apk_source_downloader\">Käytetään %s</string>\n  <string name=\"apk_source_installed\">Käytetään asennettua APK:ta</string>\n  <string name=\"apk_source_local\">Käytetään paikallista APK-tiedostoa</string>\n  <string name=\"apk_source_downloaded\">Jo ladattu</string>\n  <string name=\"legacy_import_failed\">Vanhoja asetuksia ei voitu tuoda</string>\n  <string name=\"auto_updates_dialog_title\">Määritä päivitykset</string>\n  <string name=\"auto_updates_dialog_description\">Haluatko, että ReVanced Manager tarkistaa säännöllisesti päivitykset seuraaville komponenteille?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced-paikkaukset</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Lataajat</string>\n  <string name=\"auto_updates_dialog_note\">Nämä asetukset voidaan muuttaa myöhemmin.\n\n    ReVanced Manager muodostaa yhteyden kohteeseen %s ladatakseen alkuperäiset versiot, jos laitteesi on yhdistetty internetiin.</string>\n  <string name=\"announcements_filter_tag\">Suodata tunnisteen mukaan</string>\n  <string name=\"announcements_show_archived\">Näytä arkistoidut</string>\n  <string name=\"general\">Yleiset</string>\n  <string name=\"general_description\">Kieli, teema, dynaaminen väri</string>\n  <string name=\"updates\">Päivitykset</string>\n  <string name=\"updates_description\">Tarkista päivitykset ja näytä muutosloki</string>\n  <string name=\"downloads\">Lataukset</string>\n  <string name=\"downloads_description\">Lataajat ja ladatut sovellukset</string>\n  <string name=\"import_export\">Tuonti ja vienti</string>\n  <string name=\"import_export_description\">Avainsäilö, paikkausasetukset ja -valinta</string>\n  <string name=\"advanced\">Lisäasetukset</string>\n  <string name=\"advanced_description\">API-URL, muistiraja, virheenkorjaus</string>\n  <string name=\"safeguards_toggled_warning\">Suojaukset on vaihdettu</string>\n  <string name=\"about\">Tietoja</string>\n  <string name=\"about_app_name\">Tietoja kohteesta %1$s</string>\n  <string name=\"opensource_licenses\">Avoimen lähdekoodin lisenssit</string>\n  <string name=\"opensource_licenses_description\">Näytä kaikki tämän sovelluksen luomiseen käytetyt kirjastot</string>\n  <string name=\"contributors\">Osallistujat</string>\n  <string name=\"contributors_description\">Näytä ReVancedin osallistujat</string>\n  <string name=\"dynamic_color\">Dynaaminen väri</string>\n  <string name=\"dynamic_color_description\">Sovita värit taustakuvaan</string>\n  <string name=\"pure_black_theme\">Musta teema</string>\n  <string name=\"pure_black_theme_description\">Käytä mustia taustoja tummalle teemalle</string>\n  <string name=\"theme\">Teema</string>\n  <string name=\"theme_description\">Valitse vaalean tai tumman teeman välillä</string>\n  <string name=\"language\">Kieli</string>\n  <string name=\"language_description\">Valitse sovelluksen näyttökieli</string>\n  <string name=\"language_system_default\">Järjestelmän oletus</string>\n  <string name=\"search_languages\">Hae kieliä…</string>\n  <string name=\"safeguards\">Suojatoimet</string>\n  <string name=\"patch_compat_check\">Poista version yhteensopivuustarkistus käytöstä</string>\n  <string name=\"patch_compat_check_description\">Älä rajoita paikkauksia yhteensopiviin sovellusversioihin</string>\n  <string name=\"patch_compat_check_confirmation\">Yhteensopimattomien paikkausten valitseminen voi johtaa rikkinäiseen sovellukseen.\n\nHaluatko silti jatkaa?</string>\n  <string name=\"suggested_version_safeguard\">Vaadi ehdotettua sovellusversiota</string>\n  <string name=\"suggested_version_safeguard_description\">Pakota ehdotetun sovellusversion valinta</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Ei-ehdotetun sovellusversion valitseminen voi aiheuttaa odottamattomia ongelmia.\n\nHaluatko silti jatkaa?</string>\n  <string name=\"patch_selection_safeguard\">Salli paikkausvalinnan ja -asetusten muuttaminen</string>\n  <string name=\"patch_selection_safeguard_description\">Älä estä paikkausvalinnan muuttamista tai asetusten mukauttamista</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Paikkausvalinnan muuttaminen voi aiheuttaa odottamattomia ongelmia.\n\nOta silti käyttöön?</string>\n  <string name=\"universal_patches_safeguard\">Salli yleispaikkausten käyttö</string>\n  <string name=\"universal_patches_safeguard_description\">Älä estä yleispaikkausten käyttöä</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Yleispaikkauksia ei ole testattu yhtä hyvin kuin niitä, jotka on tarkoitettu tietyille sovelluksille.\n\nOta silti käyttöön?</string>\n  <string name=\"keystore\">Avainsäilö</string>\n  <string name=\"patches_selections\">Paikkausvalinnat</string>\n  <string name=\"import_keystore\">Tuo avainsäilö</string>\n  <string name=\"import_keystore_description\">Tuo mukautettu avainsäilö</string>\n  <string name=\"import_keystore_dialog_title\">Anna avainsäilön tunnistetiedot</string>\n  <string name=\"import_keystore_dialog_description\">Sinun on annettava avainsäilön tunnistetiedot tuodaksesi sen.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Käyttäjätunnus (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Salasana</string>\n  <string name=\"import_keystore_dialog_button\">Tuo</string>\n  <string name=\"import_keystore_wrong_credentials\">Väärät avainsäilön tunnistetiedot</string>\n  <string name=\"import_keystore_success\">Avainsäilö tuotiin</string>\n  <string name=\"export_keystore\">Vie avainsäilö</string>\n  <string name=\"export_keystore_description\">Vie nykyinen avainsäilö</string>\n  <string name=\"export_keystore_unavailable\">Ei avainsäilöä vietäväksi</string>\n  <string name=\"export_keystore_success\">Avainsäilö vietiin</string>\n  <string name=\"regenerate_keystore\">Luo avainsäilö uudelleen</string>\n  <string name=\"regenerate_keystore_description\">Luo uusi avainsäilö</string>\n  <string name=\"regenerate_keystore_dialog_description\">Olet uudelleenluomassa avainsäilön, jota Manager käyttää paikkausprosessin aikana.\n\nEt voi päivittää aiemmin asennettuja sovelluksia tästä lähteestä.</string>\n  <string name=\"regenerate_keystore_success\">Avainsäilön korvaus onnistui</string>\n  <string name=\"import_patch_selection\">Tuo paikkausvalinnat</string>\n  <string name=\"import_patch_selection_description\">Tuo paikkausvalinta JSON-tiedostosta</string>\n  <string name=\"import_patch_selection_fail\">Paikkausvalintoja ei voitu tuoda: %s</string>\n  <string name=\"import_patch_selection_success\">Paikkausvalinnat tuotiin</string>\n  <string name=\"select_bundle_for_import\">Valitse paketti tuotavaksi</string>\n  <string name=\"export_patch_selection\">Vie paikkausvalinnat</string>\n  <string name=\"export_patch_selection_description\">Vie paikkausvalinnat JSON-tiedostoon</string>\n  <string name=\"export_patch_selection_fail\">Paikkausvalintoja ei voitu viedä: %s</string>\n  <string name=\"export_patch_selection_success\">Paikkausvalinnat vietiin</string>\n  <string name=\"select_bundle_for_export\">Valitse paketti vietäväksi</string>\n  <string name=\"patch_selection_packages\">Sovellukset tallennetuilla valinnoilla</string>\n  <string name=\"patch_selection_entries\">Yhteensä valittuja paikkauksia</string>\n  <string name=\"reset_configuration\">Nollaa asetukset</string>\n  <string name=\"reset_patch_selection\">Paikkausvalinnat</string>\n  <string name=\"reset_patch_selection_description\">Nollaa tallennettu paikkausvalinta</string>\n  <string name=\"reset_patch_options\">Paikkausasetukset</string>\n  <string name=\"reset_patch_options_description\">Nollaa tallennetut paikkausasetukset</string>\n  <string name=\"reset_patch_selection_success\">Paikkausvalinnat on nollattu</string>\n  <string name=\"patch_selection_reset_all\">Nollaa kaikki paikkausvalinnat</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Olet nollaamassa kaikki paikkausvalinnat. Sinun on valittava jokainen paikkaus uudelleen manuaalisesti.</string>\n  <string name=\"patch_selection_reset_all_description\">Nollaa kaikki paikkausvalinnat</string>\n  <string name=\"patch_selection_reset_package\">Nollaa paikkausvalinta sovellukselle</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Olet nollaamassa sovelluksen \\\"%s\\\" paikkausasetukset. Sinun on valittava jokainen paikkaus uudelleen manuaalisesti.</string>\n  <string name=\"patch_selection_reset_package_description\">Nollaa paikkausvalinnan yksittäiselle sovellukselle</string>\n  <string name=\"patch_selection_reset_patches\">Nollaa paikkausvalinta (yksittäinen)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Olet nollaamassa sovelluksen \\\"%s\\\" paikkausasetukset. Sinun on valittava jokainen paikkaus uudelleen manuaalisesti.</string>\n  <string name=\"patch_selection_reset_patches_description\">Nollaa tietyn paikkauskokoelman paikkausasetukset</string>\n  <string name=\"patch_options_reset_package\">Nollaa sovelluksen paikkausasetukset</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Olet nollaamassa sovelluksen \\\"%s\\\" paikkausasetukset. Sinun on otettava jokainen asetus uudelleen käyttöön.</string>\n  <string name=\"patch_options_reset_package_description\">Nollaa yhden sovelluksen paikkausasetukset</string>\n  <string name=\"patch_options_reset_patches\">Nollaa paikkausasetukset (yksittäinen)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Olet nollaamassa sovelluksen \\\"%s\\\" paikkausasetukset. Sinun on otettava jokainen asetus uudelleen käyttöön.</string>\n  <string name=\"patch_options_reset_patches_description\">Nollaa tietyn paikkauskokoelman paikkausasetukset</string>\n  <string name=\"patch_options_reset_all\">Nollaa kaikki paikkausasetukset</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Olet nollaamassa kaikki paikkausasetukset. Sinun on otettava jokainen asetus uudelleen käyttöön.</string>\n  <string name=\"patch_options_reset_all_description\">Nollaa kaikki paikkausasetukset</string>\n  <string name=\"downloaders\">Lataajat</string>\n  <string name=\"downloader_prereleases\">Käytä ennakkoversioita</string>\n  <string name=\"downloader_prereleases_description\">Käytä pääasiallisen lataajan ennakkoversioita</string>\n  <string name=\"downloader_state_loaded\">Ladattu</string>\n  <string name=\"downloader_state_failed\">Lataus epäonnistui. Napauta saadaksesi lisätietoja</string>\n  <string name=\"downloader_state_missing\">Puuttuu</string>\n  <string name=\"downloader_delete_apps_title\">Poista valitut sovellukset</string>\n  <string name=\"downloader_delete_apps_description\">Haluatko varmasti poistaa valitut sovellukset?</string>\n  <string name=\"downloader_delete_single_description\">Haluatko varmasti poistaa kohteen \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Ladattuja sovelluksia ei löytynyt.</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Managerin kautta ladatut sovellukset näkyvät täällä.</string>\n  <string name=\"downloader_url\">Lataajan URL-osoite</string>\n  <string name=\"downloader_add\">Lisää lataaja</string>\n  <string name=\"select_downloader_type_dialog_description\">Lisää uusia lataajia URL-osoitteesta tai paikallisista tiedostoista</string>\n  <string name=\"local_downloaders_description\">Lisää lataajia paikallisesta tallennustilasta.</string>\n  <string name=\"remote_downloaders_description\">Lisää lataajia URL-osoitteesta. Voidaan päivittää automaattisesti.</string>\n  <string name=\"install_revanced_downloaders\">Asenna lataajia saadaksesi sovelluksia suoraan ReVanced Managerin kautta.</string>\n  <string name=\"install_revanced_downloader\">Asenna ReVanced -lataajat</string>\n  <string name=\"cancel_downloader_install_title\">Peruutetaanko lataajien asennus?</string>\n  <string name=\"cancel_downloader_install_description\">Lataajien asennus on käynnissä. Jos poistut nyt, lataus peruutetaan.</string>\n  <string name=\"downloader_sources_unavailable_title\">Nämä lataajat puuttuvat</string>\n  <string name=\"downloader_sources_unavailable_description\">Napsauta päivityspainiketta korjataksesi sen.</string>\n  <string name=\"downloader_update_failed\">Lataajan päivitys epäonnistui: %s</string>\n  <string name=\"downloader_replace_fail\">Lataajan tuonti epäonnistui: %s</string>\n  <string name=\"search_apps\">Hae sovelluksia…</string>\n  <string name=\"loading_body\">Ladataan…</string>\n  <string name=\"downloading_patches\">Ladataan paikkauksia…</string>\n  <string name=\"options\">Asetukset</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Kyllä</string>\n  <string name=\"no\">Ei</string>\n  <string name=\"edit\">Muokkaa</string>\n  <string name=\"dialog_input_placeholder\">Arvo</string>\n  <string name=\"reset\">Nollaa</string>\n  <string name=\"share\">Jaa</string>\n  <string name=\"patch\">Paikkaa</string>\n  <string name=\"select_from_storage\">Valitse tallennustilasta</string>\n  <string name=\"select_from_storage_description\">Valitse APK-tiedosto tallennustilasta tiedostovalitsimen avulla</string>\n  <string name=\"suggested_version_info\">Ehdotettu versio: %s</string>\n  <string name=\"type_anything\">Jatka kirjoittamalla mitä tahansa</string>\n  <string name=\"search\">Etsi paikkauksia…</string>\n  <string name=\"apply\">Käytä</string>\n  <string name=\"help\">Ohje</string>\n  <string name=\"back\">Takaisin</string>\n  <string name=\"warning\">Varoitus</string>\n  <string name=\"add\">Lisää</string>\n  <string name=\"enable\">Ota käyttöön</string>\n  <string name=\"disable\">Poista käytöstä</string>\n  <string name=\"close\">Sulje</string>\n  <string name=\"clear\">Tyhjennä</string>\n  <string name=\"system\">Järjestelmä</string>\n  <string name=\"light\">Vaalea</string>\n  <string name=\"dark\">Tumma</string>\n  <string name=\"appearance\">Ulkoasu</string>\n  <string name=\"networking\">Verkko</string>\n  <string name=\"allow_metered_networks\">Salli käytön mukaan laskutettavat verkot</string>\n  <string name=\"allow_metered_networks_description\">Sallii automaattiset päivitykset käytön mukaan laskutettavissa verkoissa.\n    Sovellus saattaa silti varoittaa käytön mukaan laskutettavista verkoista manuaalisille toiminnoille.</string>\n  <string name=\"downloaded_apps\">Ladatut sovellukset</string>\n  <string name=\"process_runtime\">Suorita Patcher toisessa prosessissa (kokeellinen)</string>\n  <string name=\"process_runtime_description\">Tämä on nopeampaa ja sallii Patcherin käyttää enemmän muistia</string>\n  <string name=\"process_runtime_memory_limit\">Patcher-prosessin muistiraja</string>\n  <string name=\"process_runtime_memory_limit_description\">Muistin enimmäismäärä, jota paikkausprosessi voi käyttää</string>\n  <string name=\"debug_logs_export\">Vie virheenkorjauslokit</string>\n  <string name=\"debug_logs_export_read_failed\">Lokien lukeminen epäonnistui (poistumiskoodi %d)</string>\n  <string name=\"debug_logs_export_failed\">Lokien vienti epäonnistui</string>\n  <string name=\"debug_logs_export_success\">Viedyt lokit</string>\n  <string name=\"api_url\">API-URL</string>\n  <string name=\"api_url_description\">API, jota käytetään tarvittavien tiedostojen lataamiseen</string>\n  <string name=\"api_url_dialog_title\">Vaihda API-URL</string>\n  <string name=\"api_url_dialog_description\">Vaihda ReVanced Managerin API-URL. ReVanced Manager käyttää APIa paikkausten ja päivitysten lataamiseen.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager yhdistää APIin paikkausten ja päivitysten lataamiseksi. Varmista, että luotat siihen.</string>\n  <string name=\"api_url_dialog_save\">Aseta</string>\n  <string name=\"api_url_dialog_reset\">Nollaa API-URL</string>\n  <string name=\"device\">Laite</string>\n  <string name=\"device_android_version\">Android-versio</string>\n  <string name=\"device_model\">Malli</string>\n  <string name=\"device_architectures\">CPU-arkkitehtuurit</string>\n  <string name=\"device_memory_limit\">Muistirajoitukset</string>\n  <string name=\"device_memory_limit_format\">%1$d Mt (normaali) - %2$d Mt (suuri)</string>\n  <string name=\"patches_force_download\">Pakota kaikkien paikkausten lataaminen</string>\n  <string name=\"patches_reset\">Nollaa paikkaukset</string>\n  <string name=\"reset_onboarding\">Nollaa käyttöönotto</string>\n  <string name=\"reset_onboarding_description\">Näytä käyttöönottonäyttö seuraavan sovelluksen käynnistyksen yhteydessä</string>\n  <string name=\"patching\">Paikkaaminen</string>\n  <string name=\"signing\">Allekirjoittaminen</string>\n  <string name=\"storage\">Tallennustila</string>\n  <string name=\"no_patch_found\">Paikkausta ei löydy. Tarkista paikkauksesi</string>\n  <string name=\"tab_apps\">Sovellukset</string>\n  <string name=\"tab_patches\">Paikkaukset</string>\n  <string name=\"delete\">Poista</string>\n  <string name=\"refresh\">Päivitä</string>\n  <string name=\"continue_anyways\">Jatka silti</string>\n  <string name=\"download_another_version\">Lataa toinen versio</string>\n  <string name=\"download_app\">Lataa sovellus</string>\n  <string name=\"download_apk\">Lataa APK-tiedosto</string>\n  <string name=\"patches_download_fail\">Paikkausten lataus epäonnistui: %s</string>\n  <string name=\"api_not_working_title\">API-palvelu on tällä hetkellä poissa käytöstä</string>\n  <string name=\"api_not_working_description\">Jotkin ominaisuudet saattavat olla heikentyneitä. Tarkista yhteys tai API-URL asetuksista.</string>\n  <string name=\"patches_replace_fail\">Paikkausten tuonti epäonnistui: %s</string>\n  <string name=\"no_patched_apps_found\">Paikattuja sovelluksia ei löytynyt</string>\n  <string name=\"no_patched_apps_description\">Sinulla ei ole tällä hetkellä yhtään paikattua sovellusta, joista tietäisimme. Muuta se paikkaamalla ensimmäinen sovelluksesi!</string>\n  <string name=\"patched_apps_section_title\">Paikatut sovellukset</string>\n  <string name=\"patchable_apps_section_title\">Paikattavissa olevat sovellukset</string>\n  <string name=\"no_patches_found\">Paikkauksia ei löytynyt</string>\n  <string name=\"no_patches_description\">Sinulla ei ole vielä paikkauksia. Lisää paikkauksia napauttamalla alla olevaa painiketta!</string>\n  <string name=\"tap_on_patches\">Napauta paikkauksia saadaksesi niistä lisätietoja</string>\n  <string name=\"patches_selected\">%s valittu</string>\n  <string name=\"incompatible_patches\">Yhteensopimattomat paikkaukset</string>\n  <string name=\"universal_patches\">Yleispaikkaukset</string>\n  <string name=\"patch_selection_reset_toast\">Paikkausvalinnat ja -asetukset on nollattu suositeltuihin oletusarvoihin</string>\n  <string name=\"patch_options_reset_toast\">Paikkausasetukset on nollattu</string>\n  <string name=\"non_suggested_version_warning_title\">Ei-ehdotettu versio</string>\n  <string name=\"non_suggested_version_warning_description\">Valitsemasi sovellusversio ei vastaa ehdotettua versiota.\nKäytä ehdotettua versiota: %s\n\nVoit silti jatkaa poistamalla \\\"Vaadi ehdotettua sovellusversiota\\\" käytöstä lisäasetuksissa.</string>\n  <string name=\"selection_warning_title\">Lopeta oletusten käyttö?</string>\n  <string name=\"selection_warning_description\">On suositeltavaa käyttää oletusarvoisia paikkausvalintoja ja -asetuksia. Niiden muuttaminen voi aiheuttaa odottamattomia ongelmia.\n\nSinun tulee ottaa käyttöön \\\"Salli paikkausvalinnan ja -asetusten muuttaminen\\\" lisäasetuksissa ennen niiden vaihtamista.</string>\n  <string name=\"universal_patch_warning_description\">Yleispaikkaukset ovat monikäyttöisempiä, mutta eivät toimi yhtä luotettavasti kuin tiettyjä sovelluksia varten tarkoitetut paikkaukset. Niiden käytössä voi ilmetä ongelmia.\n\nSinun tulee ottaa käyttöön \\\"Salli yleispaikkauset käyttö\\\" lisäasetuksissa ennen niiden käyttöä.</string>\n  <string name=\"this_version\">Tämä versio</string>\n  <string name=\"universal\">Mikä tahansa sovellus</string>\n  <string name=\"search_patches\">Etsi paikkauksia</string>\n  <string name=\"app_version_not_compatible\">Tämä paikkaus ei ole yhteensopiva valitun sovellusversion kanssa (%1$s)\n\nSe on yhteensopiva vain seuraavien versioiden kanssa: %2$s</string>\n  <string name=\"continue_with_version\">Jatka tällä versiolla?</string>\n  <string name=\"version_not_compatible\">Kaikki paikkaukset eivät ole yhteensopivia tämän version (%s) kanssa. Haluatko silti jatkaa?</string>\n  <string name=\"download_application\">Lataa sovellus?</string>\n  <string name=\"app_not_installed\">Valitsemaasi sovellusta ei ole asennettu. Haluatko ladata sen?</string>\n  <string name=\"failed_to_load_apk\">APK:n lataus epäonnistui</string>\n  <string name=\"split_apk_not_supported\">Jaettuja APK-tiedostoja ei voi korjata</string>\n  <string name=\"loading\">Ladataan…</string>\n  <string name=\"not_installed\">Ei asennettu</string>\n  <string name=\"installed\">Asennettu</string>\n  <string name=\"app_info\">Sovelluksen tiedot</string>\n  <string name=\"uninstall\">Poista asennus</string>\n  <string name=\"unpatch\">Poista paikkaukset</string>\n  <string name=\"repatch\">Paikkaa uudelleen</string>\n  <string name=\"install_type\">Asennustyyppi</string>\n  <string name=\"package_name\">Paketin nimi</string>\n  <string name=\"original_package_name\">Alkuperäinen paketin nimi</string>\n  <string name=\"applied_patches\">Käytetyt paikkaukset</string>\n  <string name=\"view_applied_patches\">Näytä käytetyt paikkaukset</string>\n  <string name=\"default_install\">Oletus</string>\n  <string name=\"mount_install\">Liitä</string>\n  <string name=\"mounted\">Liitetty</string>\n  <string name=\"not_mounted\">Ei liitetty</string>\n  <string name=\"mount\">Liitä</string>\n  <string name=\"unmount\">Irrota</string>\n  <string name=\"failed_to_mount\">Liittäminen epäonnistui: %s</string>\n  <string name=\"failed_to_unmount\">Irrottaminen epäonnistui: %s</string>\n  <string name=\"unpatch_app\">Poista sovelluksen paikkaukset?</string>\n  <string name=\"unpatch_description\">Haluatko varmasti poistaa tämän sovelluksen paikkaukset?</string>\n  <string name=\"downloader_invalid_version\">Lataaja ei hakenut oikeaa versiota</string>\n  <string name=\"downloader_app_not_found\">Lataaja ei löytänyt sovellusta</string>\n  <string name=\"downloader_error\">Lataajavirhe: %s</string>\n  <string name=\"no_downloaders_installed\">Sovellusten lataajia ei ole asennettu!</string>\n  <string name=\"no_downloaders_trusted\">Yhtäkään sovellusten lataajaa ei ole luotettu! Tarkista asetuksesi.</string>\n  <string name=\"already_patched\">Jo paikattu</string>\n  <string name=\"patch_selector_sheet_filter_title\">Suodatin</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Yhteensopivuus</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paketit</string>\n  <string name=\"patch_selector_sheet_actions_title\">Toiminnot</string>\n  <string name=\"restore_default_selection\">Palauta oletusvalinta</string>\n  <string name=\"deselect_all\">Poista kaikki valinnat</string>\n  <string name=\"invert_selection\">Käännä valinta</string>\n  <string name=\"deselect_all_except\">Poista kaikkien valinta paitsi %s</string>\n  <string name=\"scope_dialog_title\">Sovella kohteeseen</string>\n  <string name=\"scope_all_patches\">Kaikki paikkaukset</string>\n  <string name=\"scope_bundle_patches\">%s vain</string>\n  <string name=\"string_option_menu_description\">Lisää asetuksia</string>\n  <string name=\"option_preset_custom_value\">Mukautettu arvo</string>\n  <string name=\"path_selector\">Valitse tallennustilasta</string>\n  <string name=\"path_selector_parent_dir\">Edellinen hakemisto</string>\n  <string name=\"path_selector_dirs\">Hakemistot</string>\n  <string name=\"path_selector_files\">Tiedostot</string>\n  <string name=\"show_password_field\">Näytä salasana</string>\n  <string name=\"hide_password_field\">Piilota salasana</string>\n  <string name=\"installer\">Asentaja</string>\n  <string name=\"install_app\">Asenna</string>\n  <string name=\"install_app_success\">Sovellus asennettu</string>\n  <string name=\"install_app_fail\">Sovelluksen asennus epäonnistui: %s</string>\n  <string name=\"reinstall_app_fail\">Sovelluksen uudelleenasennus epäonnistui: %s</string>\n  <string name=\"uninstall_app_fail\">Sovelluksen poisto epäonnistui: %s</string>\n  <string name=\"open_app\">Avaa</string>\n  <string name=\"save_apk\">Tallenna APK</string>\n  <string name=\"save_apk_success\">APK tallennettu</string>\n  <string name=\"sign_fail\">APK:n allekirjoittaminen epäonnistui: %s</string>\n  <string name=\"save_logs\">Tallenna lokit</string>\n  <string name=\"save_as_file\">Tallenna tiedostoihin</string>\n  <string name=\"export_patcher_logs\">Vie paikkauslokit</string>\n  <string name=\"save_logs_success\">Lokit tallennettu</string>\n  <string name=\"downloader_activity_dialog_body\">Käyttäjän toimia vaaditaan tämän lataajan kanssa jatkamiseksi.</string>\n  <string name=\"select_install_type\">Valitse asennustyyppi</string>\n  <string name=\"patcher_step_group_preparing\">Valmistellaan</string>\n  <string name=\"patcher_step_load_patches\">Lataa paikkaukset</string>\n  <string name=\"patcher_step_unpack\">Valmistele paikkaaja</string>\n  <string name=\"patcher_step_group_patching\">Paikataan</string>\n  <string name=\"patcher_step_group_saving\">Tallennetaan</string>\n  <string name=\"patcher_step_write_patched\">Kirjoita paikattu APK-tiedosto</string>\n  <string name=\"patcher_step_sign_apk\">Allekirjoita paikattu APK-tiedosto</string>\n  <string name=\"patcher_notification_title\">Paikkaus käynnissä…</string>\n  <string name=\"patcher_notification_text\">Napauta palataksesi paikkaajaan</string>\n  <string name=\"patcher_stop_confirm_title\">Pysäytä paikkaaja</string>\n  <string name=\"patcher_stop_confirm_description\">Haluatko varmasti pysäyttää paikkausprosessin?</string>\n  <string name=\"patcher_install_in_progress\">Asennus on käynnissä. Odota hetki</string>\n  <string name=\"execute_patches\">Suorita paikkaukset</string>\n  <string name=\"executing_patch\">Suorita %s</string>\n  <string name=\"failed_to_execute_patch\">Suoritus epäonnistui: %s</string>\n  <string name=\"step_completed\">valmis</string>\n  <string name=\"step_failed\">epäonnistui</string>\n  <string name=\"step_running\">käynnissä</string>\n  <string name=\"step_waiting\">odotetaan</string>\n  <string name=\"expand_content\">laajenna</string>\n  <string name=\"collapse_content\">kutista</string>\n  <string name=\"drag_handle\">järjestä uudelleen</string>\n  <string name=\"more\">Enemmän</string>\n  <string name=\"less\">Vähemmän</string>\n  <string name=\"continue_\">Jatka</string>\n  <string name=\"dismiss\">Hylkää</string>\n  <string name=\"view_announcement\">Näytä tiedotus</string>\n  <string name=\"permanent_dismiss\">Älä näytä tätä uudelleen</string>\n  <string name=\"donate\">Lahjoita</string>\n  <string name=\"website\">Verkkosivusto</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Yhteystiedot</string>\n  <string name=\"license\">Lisenssi</string>\n  <string name=\"source\">Lähde</string>\n  <string name=\"repository\">Tietovarasto</string>\n  <string name=\"bundle_information_by_author\">Tekijä: %1$s</string>\n  <string name=\"version\">Versio</string>\n  <string name=\"version_compatibility_warning\">Valittu versio voi olla yhteensopimaton valittujen korjausten kanssa</string>\n  <string name=\"submit_feedback\">Ilmoita ongelmista tai anna palautetta</string>\n  <string name=\"submit_feedback_description\">Auta meitä parantamaan tätä sovellusta</string>\n  <string name=\"developer_options\">Kehittäjäasetukset</string>\n  <string name=\"developer_options_description\">Valintoja ongelmien virheenkorjaukseen</string>\n  <string name=\"patches_update_success\">Päivitys onnistui</string>\n  <string name=\"patches_update_unavailable\">Päivityksiä ei ole saatavilla</string>\n  <string name=\"view_patches\">Näytä paikkaukset</string>\n  <string name=\"patches_view_any_version\">Mikä tahansa versio</string>\n  <string name=\"patches_view_any_package\">Mikä tahansa paketti</string>\n  <string name=\"patches_delete_single_dialog_description\">Haluatko varmasti poistaa paikkauksen \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Haluatko varmasti poistaa valitut paikkaukset?</string>\n  <string name=\"announcements\">Tiedotukset</string>\n  <string name=\"archive\">Arkisto</string>\n  <string name=\"about_revanced_manager\">Tietoja ReVanced Managerista</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager on Android-sovellus, joka käyttää ReVanced Patcheria Android-sovellusten paikkaamiseen. Sen avulla voit ladata ja paikata sovelluksia mukautetuilla paikkauksilla, ja hallita paikkausprosessia.</string>\n  <string name=\"developer_options_taps\">%d napautusta jäljellä</string>\n  <string name=\"developer_options_enabled\">Kehittäjäasetukset käytössä</string>\n  <string name=\"developer_options_already_enabled\">Kehittäjäasetukset ovat jo käytössä</string>\n  <string name=\"update_available\">Päivitys saatavilla</string>\n  <string name=\"current_version\">Nykyinen versio: %s</string>\n  <string name=\"new_version\">Uusi versio: %s</string>\n  <string name=\"ready_to_install_update\">Valmis asentamaan päivityksen</string>\n  <string name=\"update_completed\">Päivitys asennettu</string>\n  <string name=\"install_update_manager_failed\">Päivityksen asennus epäonnistui</string>\n  <string name=\"manual_update_check\">Tarkista päivitykset</string>\n  <string name=\"view_update\">Näytä päivitys</string>\n  <string name=\"manual_update_check_description\">Tarkista päivitykset manuaalisesti</string>\n  <string name=\"update_checking_manager\">Tarkista päivitykset käynnistettäessä</string>\n  <string name=\"update_checking_manager_description\">Tarkista ReVanced Managerin uudet versiot sovelluksen käynnistyessä</string>\n  <string name=\"update_checking_downloader\">Tarkista ReVanced -lataajien päivitykset käynnistyksen yhteydessä</string>\n  <string name=\"update_checking_downloader_description\">Tarkista asennettujen ReVanced -lataajien päivitykset sovelluksen käynnistyessä</string>\n  <string name=\"manager_prereleases\">Käytä ennakkoversioita</string>\n  <string name=\"manager_prereleases_description\">Käytä ReVanced Managerin ennakkoversioita</string>\n  <string name=\"prereleases_warning\">Ennakkoversiot voivat olla epävakaita ja sisältää virheitä. Saatat kokea kaatumisia, tietojen katoamista tai muita odottamattomia ongelmia. Ota tämä käyttöön vain, jos olet tietoinen näistä riskeistä.</string>\n  <string name=\"changelog\">Näytä muutosloki</string>\n  <string name=\"changelog_loading\">Ladataan muutoslokia</string>\n  <string name=\"changelog_download_fail\">Muutoslokin lataaminen epäonnistui: %s</string>\n  <string name=\"changelog_description\">Katso tämän päivityksen uusimmat muutokset</string>\n  <string name=\"battery_optimization_notification\">Akun optimoinnit on poistettava käytöstä, jotta ReVanced Manager toimii oikein taustalla. Napauta tästä poistaaksesi optimoinnit käytöstä.</string>\n  <string name=\"installing_manager_update\">Asennetaan päivitystä…</string>\n  <string name=\"downloading_manager_update\">Ladataan päivitystä…</string>\n  <string name=\"download_manager_failed\">Päivityksen lataaminen epäonnistui: %s</string>\n  <string name=\"cancel\">Peruuta</string>\n  <string name=\"save\">Tallenna</string>\n  <string name=\"save_with_count\">Tallenna (%1$s)</string>\n  <string name=\"update\">Päivitä</string>\n  <string name=\"empty\">Tyhjä</string>\n  <string name=\"installing_message\">Napauta <b>Päivitä</b> pyydettäessä.\nReVanced Manager sulkeutuu päivityksen aikana.</string>\n  <string name=\"no_changelogs_found\">Muutoslokeja ei löytynyt</string>\n  <string name=\"just_now\">Juuri nyt</string>\n  <string name=\"minutes_ago\">%s min sitten</string>\n  <string name=\"hours_ago\">%s t sitten</string>\n  <string name=\"days_ago\">%s pv sitten</string>\n  <string name=\"invalid_date\">Virheellinen päivämäärä</string>\n  <string name=\"disable_battery_optimization\">Poista akun optimointi käytöstä</string>\n  <string name=\"input_dialog_value_invalid\">Virheellinen arvo</string>\n  <string name=\"option_required\">Tämä valinta on pakollinen</string>\n  <string name=\"required_options_screen\">Pakolliset valinnat</string>\n  <string name=\"failed_to_check_updates\">Päivitysten tarkistus epäonnistui: %s</string>\n  <string name=\"no_update_available\">Päivityksiä ei ole saatavilla</string>\n  <string name=\"no_announcements_found\">Tiedotuksia ei löytynyt</string>\n  <string name=\"update_check\">Tarkistetaan päivityksiä…</string>\n  <string name=\"dismiss_temporary\">Ei nyt</string>\n  <string name=\"update_available_dialog_description\">Uusi versio ReVanced Managerista (%s) on saatavilla.</string>\n  <string name=\"failed_to_download_update\">Päivityksen lataaminen epäonnistui: %s</string>\n  <string name=\"download\">Lataa</string>\n  <string name=\"download_confirmation_metered\">Käytössäsi on tällä hetkellä käytön mukaan laskutettava yhteys, ja palveluntarjoajasi saattaa veloittaa tiedonsiirrosta.\n\nHaluatko silti jatkaa?</string>\n  <string name=\"download_update_confirmation\">Lataa päivitys?</string>\n  <string name=\"no_contributors_found\">Osallistujia ei löytynyt</string>\n  <string name=\"select\">Valitse</string>\n  <string name=\"select_deselect_all\">Valitse tai poista kaikkien valinta</string>\n  <string name=\"select_patches_type_dialog_description\">Lisää uusia paikkauksia URL-osoitteesta tai paikallisista tiedostoista</string>\n  <string name=\"local_patches_description\">Lisää paikkauksia paikallisesta tallennustilasta.</string>\n  <string name=\"remote_patches_description\">Lisää paikkauksia URL-osoitteesta. Paikkaukset voivat päivittyä automaattisesti.</string>\n  <string name=\"recommended\">Suositeltu</string>\n  <string name=\"installation_failed_dialog_title\">Asennus epäonnistui</string>\n  <string name=\"installation_cancelled_dialog_title\">Asennus peruutettiin</string>\n  <string name=\"installation_blocked_dialog_title\">Asennus estettiin</string>\n  <string name=\"installation_conflict_dialog_title\">Asennusristiriita</string>\n  <string name=\"installation_incompatible_dialog_title\">Asennus ei ole yhteensopiva</string>\n  <string name=\"installation_invalid_dialog_title\">Virheellinen asennus</string>\n  <string name=\"installation_storage_issue_dialog_title\">Ei tarpeeksi tallennustilaa</string>\n  <string name=\"installation_timeout_dialog_title\">Asennus aikakatkaistiin</string>\n  <string name=\"installation_failed_description\">Asennus epäonnistui tuntemattomasta syystä. Yritä uudelleen?</string>\n  <string name=\"installation_aborted_description\">Asennus peruutettiin manuaalisesti. Yritä uudelleen?</string>\n  <string name=\"installation_blocked_description\">Asennus estettiin. Tarkista laitteesi suojausasetukset ja yritä uudelleen.</string>\n  <string name=\"installation_conflict_description\">Asennus estettiin sovelluksen olemassa olevan asennuksen takia. Poista asennettu sovellus ja yritä uudelleen?</string>\n  <string name=\"installation_incompatible_description\">Sovellus on yhteensopimaton tämän laitteen kanssa. Käytä tähän laitteeseen yhteensopivaa APK:ta ja yritä uudelleen.</string>\n  <string name=\"installation_invalid_description\">Sovellus on virheellinen. Poista sovellus ja yritä uudelleen?</string>\n  <string name=\"installation_storage_issue_description\">Sovellusta ei voitu asentaa riittämättömän tallennustilan vuoksi. Vapauta tilaa ja yritä uudelleen.</string>\n  <string name=\"installation_timeout_description\">Asennus kesti liian kauan. Yritä uudelleen?</string>\n  <string name=\"reinstall\">Asenna uudelleen</string>\n  <string name=\"show\">Näytä</string>\n  <string name=\"debugging\">Virheenkorjaus</string>\n  <string name=\"about_device\">Tietoja laitteesta</string>\n  <string name=\"enter_url\">Syötä URL-osoite</string>\n  <string name=\"next\">Seuraava</string>\n  <string name=\"auto_update\">Automaattinen päivitys</string>\n  <string name=\"add_patches\">Lisää paikkauksia</string>\n  <string name=\"auto_update_description\">Päivitä automaattisesti, kun uusi versio on saatavilla</string>\n  <string name=\"patches_prereleases\">Käytä ennakkoversioita</string>\n  <string name=\"patches_prereleases_description\">Käytä %s:n ennakkoversioita</string>\n  <string name=\"patches_url\">Paikkausten URL-osoite</string>\n  <string name=\"incompatible_patches_dialog\">Nämä paikkaukset eivät ole yhteensopivia valitun sovellusversion (%1$s) kanssa.\n\nNapauta paikkauksia nähdäksesi lisätietoja.</string>\n  <string name=\"incompatible_patch\">Yhteensopimaton paikkaus</string>\n  <string name=\"any_version\">Mikä tahansa</string>\n  <string name=\"never_show_again\">Älä näytä uudestaan</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Näytä päivitysilmoitus käynnistettäessä</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Näytä ponnahdusilmoitus aina, kun uusi päivitys on saatavilla käynnistettäessä</string>\n  <string name=\"failed_to_import_keystore\">Avainsäilön tuonti epäonnistui</string>\n  <string name=\"export\">Vie</string>\n  <string name=\"confirm\">Vahvista</string>\n  <string name=\"new_announcement\">Uusi tiedotus:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d paikkaus</item>\n    <item quantity=\"other\">%d paikkausta</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Suorita %d paikkaus</item>\n    <item quantity=\"other\">Suorita %d paikkausta</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d valittu</item>\n    <item quantity=\"other\">%d valittu</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fil-rPH/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Patcher</string>\n  <string name=\"patches\">Mga Patch</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Manager</string>\n  <string name=\"onboarding_welcome_to\">Maligayang pagdating sa</string>\n  <string name=\"onboarding_welcome_back\">Kumusta! Ito ang bagong</string>\n  <string name=\"onboarding_apps_subtitle\">Maaari kang pumili ng app na ia-patch ngayon o gawin ito mamaya</string>\n  <string name=\"onboarding_updates_subtitle\">I-configure ang awtomatikong update para panatilihing napapanahon ang ReVanced Manager at ang mga patch</string>\n  <string name=\"onboarding_updates_note\">Ang ReVanced Manager ay kokonekta sa %s upang i-download ang mga paunang bersyon kung nakakonekta ang iyong device sa internet.</string>\n  <string name=\"retry\">Subukang muli</string>\n  <string name=\"onboarding_skip\">Laktawan muna</string>\n  <string name=\"onboarding_recommended_version\">Inirerekomendang bersyon: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Laktawan ang mga pahintulot?</string>\n  <string name=\"onboarding_permissions_skip_description\">Kung walang kinakailangang pahintulot, maaaring hindi gumana nang tama ang ilang feature. Maaari mong ibigay ang mga ito sa ibang pagkakataon sa mga setting ng app.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Laktawan pa rin</string>\n  <string name=\"onboarding_permissions_subtitle\">Kailangan ng ReVanced Manager ng ilang pahintulot upang gumana nang maayos</string>\n  <string name=\"permission_install_apps\">I-install ang hindi kilalang apps</string>\n  <string name=\"permission_install_apps_description\">Kinakailangan upang i-install ang mga patched na application</string>\n  <string name=\"permission_notifications\">Mga Abiso</string>\n  <string name=\"permission_battery\">Pag-optimize ng baterya</string>\n  <string name=\"permission_battery_description\">Pinipigilan ang pag-patch na maantala sa background</string>\n  <string name=\"permission_grant\">Ibigay</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager host ng downloader</string>\n  <string name=\"downloader_host_permission_description\">Ginagamit upang kontrolin ang access sa mga downloader ng ReVanced Manager. Ang ReVanced Manager lang ang mayroon nito.</string>\n  <string name=\"toast_copied_to_clipboard\">Kinopya!</string>\n  <string name=\"copy_to_clipboard\">Kopyahin sa clipboard</string>\n  <string name=\"dashboard\">Dashboard</string>\n  <string name=\"settings\">Mga Setting</string>\n  <string name=\"select_app\">Pumili ng app</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d napili</string>\n  <string name=\"fab_patch_app\">I-patch ang isang app</string>\n  <string name=\"fab_add_patches\">Magdagdag ng mga patch</string>\n  <string name=\"new_downloader_notification\">May available na (mga) bagong downloader. Mag-click dito upang i-configure ang mga ito.</string>\n  <string name=\"unsupported_architecture_warning\">Hindi suportado ang pag-patch sa arkitektura ng device na ito at malamang na mabigo.</string>\n  <string name=\"import_\">I-import</string>\n  <string name=\"import_patches\">I-import ang mga patch</string>\n  <string name=\"file_field_set\">Napili</string>\n  <string name=\"file_field_not_set\">Hindi napili</string>\n  <string name=\"field_not_set\">Hindi nakatakda</string>\n  <string name=\"patches_missing\">Nawawala</string>\n  <string name=\"patches_error\">Error</string>\n  <string name=\"patches_error_description\">Hindi ma-load ang mga patch. Mag-click upang tingnan ang error</string>\n  <string name=\"patches_not_downloaded\">Hindi pa na-download ang mga patch.</string>\n  <string name=\"patches_name_default\">Mga patch</string>\n  <string name=\"patches_name_fallback\">Walang pangalan</string>\n  <string name=\"android_11_bug_dialog_title\">Bug sa Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">Ang pahintulot sa pag-install ng app ay dapat ibigay nang maaga upang maiwasan ang isang bug sa sistema ng Android 11 na magdulot ng negatibong epekto sa karanasan ng gumagamit.</string>\n  <string name=\"no_network_toast\">Walang available na koneksyon sa internet</string>\n  <string name=\"selected_app_meta_any_version\">Anumang available na bersyon</string>\n  <string name=\"app_source_dialog_title\">Pumili ng source</string>\n  <string name=\"app_source_dialog_option_auto\">Awtomatiko</string>\n  <string name=\"app_source_dialog_option_auto_description\">Gamitin ang naka-install na app, pagkatapos ang na-download na APK, pagkatapos ang mga available na downloader</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Walang nakitang compatible na app o mga downloader na available</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Ang mga naka-mount na app ay hindi maaaring i-patch muli nang walang root access</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Hindi tugma ang bersyon %s sa iminungkahing bersyon</string>\n  <string name=\"patch_item_description\">Simulan ang pag-patch ng application</string>\n  <string name=\"patch_selector_item\">Piliin ang mga patch</string>\n  <string name=\"patch_selector_item_description\">%d na patch ang napili</string>\n  <string name=\"patch_selection_changed_warning\">Nagbago ang pagpili ng mga patch</string>\n  <string name=\"no_patches_selected\">Walang napiling mga patch</string>\n  <string name=\"network_unavailable_warning\">Hindi nakakonekta ang iyong device sa internet. Mabibigo ang pag-download mamaya.</string>\n  <string name=\"network_metered_warning\">Kasalukuyan kang nasa metered connection. Maaaring magkaroon ng data charges mula sa iyong service provider.</string>\n  <string name=\"apk_source_selector_item\">Piliin ang source ng APK</string>\n  <string name=\"apk_source_auto\">Awtomatik</string>\n  <string name=\"apk_source_auto_installed\">Awtomatik · Gamit ang naka-install na APK</string>\n  <string name=\"apk_source_auto_downloaded\">Awtomatik · Gamit ang na-download na APK</string>\n  <string name=\"apk_source_auto_downloader\">Awtomatiko · Gumagamit ng magagamit na downloaders</string>\n  <string name=\"apk_source_auto_storage\">Awtomatiko · Pumili mula sa imbakan</string>\n  <string name=\"apk_source_downloader\">Ginagamit ang %s</string>\n  <string name=\"apk_source_installed\">Ginagamit ang naka-install na APK</string>\n  <string name=\"apk_source_local\">Ginagamit ang isang lokal na APK file</string>\n  <string name=\"apk_source_downloaded\">Na-download na</string>\n  <string name=\"legacy_import_failed\">Hindi ma-import ang legacy settings</string>\n  <string name=\"auto_updates_dialog_title\">I-configure ang mga update</string>\n  <string name=\"auto_updates_dialog_description\">Gusto mo bang regular na suriin ng ReVanced Manager ang mga update para sa mga sumusunod na bahagi?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Mga Patch ng ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Mga Downloader</string>\n  <string name=\"auto_updates_dialog_note\">Ang mga setting na ito ay maaaring baguhin sa ibang pagkakataon.\n\n    Ang ReVanced Manager ay kokonekta sa %s upang i-download ang mga paunang bersyon kung nakakonekta ang iyong device sa internet.</string>\n  <string name=\"announcements_filter_tag\">I-filter ayon sa tag</string>\n  <string name=\"announcements_show_archived\">Ipakita ang naka-archive</string>\n  <string name=\"general\">Pangkalahatan</string>\n  <string name=\"general_description\">Wika, tema, dynamic na kulay</string>\n  <string name=\"updates\">Mga Update</string>\n  <string name=\"updates_description\">Suriin ang mga update at tingnan ang changelog</string>\n  <string name=\"downloads\">Mga Download</string>\n  <string name=\"downloads_description\">Mga Downloader at mga na-download na app</string>\n  <string name=\"import_export\">I-import &amp; i-export</string>\n  <string name=\"import_export_description\">Keystore, mga opsyon sa patch at pagpili</string>\n  <string name=\"advanced\">Advanced</string>\n  <string name=\"advanced_description\">API URL, limitasyon sa memory, debugging</string>\n  <string name=\"safeguards_toggled_warning\">Naka-toggle na ang mga pananggalang</string>\n  <string name=\"about\">Tungkol sa</string>\n  <string name=\"about_app_name\">Tungkol sa %1$s</string>\n  <string name=\"opensource_licenses\">Mga lisensya ng open source</string>\n  <string name=\"opensource_licenses_description\">Tingnan ang lahat ng library na ginamit upang gawin ang application na ito</string>\n  <string name=\"contributors\">Mga Kontribyutor</string>\n  <string name=\"contributors_description\">Tingnan ang mga kontribyutor ng ReVanced</string>\n  <string name=\"dynamic_color\">Dynamic na kulay</string>\n  <string name=\"dynamic_color_description\">Iakma ang mga kulay sa wallpaper</string>\n  <string name=\"pure_black_theme\">Purong itim na tema</string>\n  <string name=\"pure_black_theme_description\">Gamitin ang purong itim na background para sa madilim na tema</string>\n  <string name=\"theme\">Tema</string>\n  <string name=\"theme_description\">Pumili sa pagitan ng light o dark theme</string>\n  <string name=\"language\">Wika</string>\n  <string name=\"language_description\">Pumili ng wika ng display ng app</string>\n  <string name=\"language_system_default\">Default ng system</string>\n  <string name=\"search_languages\">Maghanap ng mga wika…</string>\n  <string name=\"safeguards\">Mga Pananggalang</string>\n  <string name=\"patch_compat_check\">I-disable ang check sa compatibility ng bersyon</string>\n  <string name=\"patch_compat_check_description\">Huwag paghigpitan ang mga patch sa mga compatible na bersyon ng app</string>\n  <string name=\"patch_compat_check_confirmation\">Ang pagpili ng mga hindi compatible na patch ay maaaring magresulta sa sirang app.\\n\\nGusto mo pa ring magpatuloy?</string>\n  <string name=\"suggested_version_safeguard\">Kinakailangan ang iminungkahing bersyon ng app</string>\n  <string name=\"suggested_version_safeguard_description\">Ipilit ang pagpili ng iminungkahing bersyon ng app</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Ang pagpili ng app na hindi iminungkahing bersyon ay maaaring magdulot ng hindi inaasahang problema.\\n\\nGusto mo pa ring magpatuloy?</string>\n  <string name=\"patch_selection_safeguard\">Payagan ang pagbabago ng pagpili ng patch at mga opsyon</string>\n  <string name=\"patch_selection_safeguard_description\">Huwag pigilan ang pagpili o pagtanggal ng pagpili ng mga patch at pag-customize ng mga opsyon</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Ang pagbabago sa pagpili ng mga patch ay maaaring magdulot ng hindi inaasahang problema.\\n\\nI-enable pa rin?</string>\n  <string name=\"universal_patches_safeguard\">Payagan ang paggamit ng universal patches</string>\n  <string name=\"universal_patches_safeguard_description\">Huwag pigilan ang paggamit ng universal patches</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Ang mga universal patch ay hindi kasinghusay na nasubukan tulad ng mga target na partikular na app.\\n\\nI-enable pa rin?</string>\n  <string name=\"keystore\">Keystore</string>\n  <string name=\"patches_selections\">Mga Piniling Patch</string>\n  <string name=\"import_keystore\">I-import ang keystore</string>\n  <string name=\"import_keystore_description\">Mag-import ng custom na keystore</string>\n  <string name=\"import_keystore_dialog_title\">Ilagay ang mga kredensyal ng keystore</string>\n  <string name=\"import_keystore_dialog_description\">Kailangan mong ilagay ang mga kredensyal ng keystore upang i-import ito.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Username (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Password</string>\n  <string name=\"import_keystore_dialog_button\">I-import</string>\n  <string name=\"import_keystore_wrong_credentials\">Maling kredensyal ng keystore</string>\n  <string name=\"import_keystore_success\">Na-import na keystore</string>\n  <string name=\"export_keystore\">I-export ang keystore</string>\n  <string name=\"export_keystore_description\">I-export ang kasalukuyang keystore</string>\n  <string name=\"export_keystore_unavailable\">Walang keystore na i-e-export</string>\n  <string name=\"export_keystore_success\">Na-export na keystore</string>\n  <string name=\"regenerate_keystore\">I-regenerate ang keystore</string>\n  <string name=\"regenerate_keystore_description\">Bumuo ng bagong keystore</string>\n  <string name=\"regenerate_keystore_dialog_description\">Malapit mo nang i-regenerate ang iyong keystore na gagamitin ng manager sa proseso ng pag-patch.\\n\\nHindi mo na maa-update ang mga naunang naka-install na app mula sa source na ito.</string>\n  <string name=\"regenerate_keystore_success\">Matagumpay na napalitan ang keystore</string>\n  <string name=\"import_patch_selection\">I-import ang pagpili ng patch</string>\n  <string name=\"import_patch_selection_description\">I-import ang pagpili ng patch mula sa isang JSON file</string>\n  <string name=\"import_patch_selection_fail\">Hindi ma-import ang pagpili ng patch: %s</string>\n  <string name=\"import_patch_selection_success\">Na-import na pagpili ng patch</string>\n  <string name=\"select_bundle_for_import\">Piliin ang bundle na i-i-import sa</string>\n  <string name=\"export_patch_selection\">I-export ang pagpili ng patch</string>\n  <string name=\"export_patch_selection_description\">I-export ang pagpili ng patch sa isang JSON file</string>\n  <string name=\"export_patch_selection_fail\">Hindi ma-export ang pagpili ng patch: %s</string>\n  <string name=\"export_patch_selection_success\">Na-export na pagpili ng patch</string>\n  <string name=\"select_bundle_for_export\">Piliin ang bundle na i-e-export mula sa</string>\n  <string name=\"patch_selection_packages\">Mga App na may naka-save na pinili</string>\n  <string name=\"patch_selection_entries\">Kabuuang napiling mga patch</string>\n  <string name=\"reset_configuration\">I-reset ang configuration</string>\n  <string name=\"reset_patch_selection\">Mga Piniling Patch</string>\n  <string name=\"reset_patch_selection_description\">I-reset ang naka-store na pagpili ng patch</string>\n  <string name=\"reset_patch_options\">Mga opsyon sa Patch</string>\n  <string name=\"reset_patch_options_description\">I-reset ang naka-store na mga opsyon ng patch</string>\n  <string name=\"reset_patch_selection_success\">Na-reset na ang pagpili ng patch</string>\n  <string name=\"patch_selection_reset_all\">I-reset ang pagpili ng patch sa pangkalahatan</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Malapit mo nang i-reset ang lahat ng pagpili ng patch. Kailangan mong manu-manong piliin muli ang bawat patch.</string>\n  <string name=\"patch_selection_reset_all_description\">I-reset ang lahat ng pagpili ng patch</string>\n  <string name=\"patch_selection_reset_package\">I-reset ang pagpili ng patch para sa app</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Malapit mo nang i-reset ang pagpili ng patch para sa app na \\\"%s\\\". Kailangan mong manu-manong piliin muli ang bawat patch.</string>\n  <string name=\"patch_selection_reset_package_description\">Nire-reset ang pagpili ng patch para sa isang app</string>\n  <string name=\"patch_selection_reset_patches\">I-reset ang pagpili ng patch (isa)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">I-reset mo ang pagpili ng patch para sa \\\"%s\\\". Kailangan mong mano-manong piliin muli ang bawat patch.</string>\n  <string name=\"patch_selection_reset_patches_description\">Nire-reset ang pagpili ng patch para sa isang partikular na koleksyon ng mga patch</string>\n  <string name=\"patch_options_reset_package\">I-reset ang mga opsyon ng patch para sa app</string>\n  <string name=\"patch_options_reset_package_dialog_description\">I-reset mo ang mga opsyon ng patch para sa app na \\\"%s\\\". Kailangan mong muling ilapat ang bawat opsyon.</string>\n  <string name=\"patch_options_reset_package_description\">Nire-reset ang mga opsyon ng patch para sa isang app</string>\n  <string name=\"patch_options_reset_patches\">I-reset ang mga opsyon ng patch (isa)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">I-reset mo ang mga opsyon ng patch para sa \\\"%s\\\". Kailangan mong muling ilapat ang bawat opsyon.</string>\n  <string name=\"patch_options_reset_patches_description\">Nire-reset ang mga opsyon ng patch para sa isang partikular na koleksyon ng mga patch</string>\n  <string name=\"patch_options_reset_all\">I-reset ang mga opsyon ng patch sa pandaigdigan</string>\n  <string name=\"patch_options_reset_all_dialog_description\">I-reset mo ang lahat ng opsyon ng patch. Kailangan mong muling ilapat ang bawat opsyon.</string>\n  <string name=\"patch_options_reset_all_description\">Nire-reset ang lahat ng opsyon ng patch</string>\n  <string name=\"downloaders\">Mga Downloader</string>\n  <string name=\"downloader_prereleases\">Gumamit ng mga pre-release</string>\n  <string name=\"downloader_prereleases_description\">Gumamit ng mga pre-release na bersyon ng pangunahing downloader</string>\n  <string name=\"downloader_state_loaded\">Na-load</string>\n  <string name=\"downloader_state_failed\">Nabigong mag-load. Mag-click para sa karagdagang detalye</string>\n  <string name=\"downloader_state_missing\">Nawawala</string>\n  <string name=\"downloader_delete_apps_title\">Tanggalin ang mga napiling app</string>\n  <string name=\"downloader_delete_apps_description\">Sigurado ka bang gusto mong tanggalin ang mga napiling app?</string>\n  <string name=\"downloader_delete_single_description\">Sigurado ka bang gusto mong i-delete ang \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Walang nakitang na-download na apps.</string>\n  <string name=\"downloader_settings_no_apps_description\">Ang mga app na na-download sa pamamagitan ng ReVanced Manager ay lalabas dito.</string>\n  <string name=\"downloader_url\">URL ng Downloader</string>\n  <string name=\"downloader_add\">Magdagdag ng Downloader</string>\n  <string name=\"select_downloader_type_dialog_description\">Magdagdag ng mga bagong downloader mula sa URL o lokal na file</string>\n  <string name=\"local_downloaders_description\">Magdagdag ng mga downloader mula sa lokal na storage.</string>\n  <string name=\"remote_downloaders_description\">Magdagdag ng mga downloader mula sa URL. Maaaring awtomatikong i-update.</string>\n  <string name=\"install_revanced_downloaders\">Mag-install ng mga downloader upang direktang makakuha ng mga app sa loob ng ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">I-install ang mga ReVanced Downloader</string>\n  <string name=\"cancel_downloader_install_title\">Kanselahin ang pag-install ng mga downloader?</string>\n  <string name=\"cancel_downloader_install_description\">May isinasagawang pag-install ng mga downloader. Kung aalis ka ngayon, makakansela ang pag-download.</string>\n  <string name=\"downloader_sources_unavailable_title\">Nawawala ang mga downloader na ito</string>\n  <string name=\"downloader_sources_unavailable_description\">I-click ang update button para ayusin ito.</string>\n  <string name=\"downloader_update_failed\">Nabigo ang pag-update ng downloader: %s</string>\n  <string name=\"downloader_replace_fail\">Nabigo ang pag-import ng downloader: %s</string>\n  <string name=\"search_apps\">Maghanap ng mga app…</string>\n  <string name=\"loading_body\">Naglo-load…</string>\n  <string name=\"downloading_patches\">Nagda-download ng mga patch…</string>\n  <string name=\"options\">Mga Opsyon</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Oo</string>\n  <string name=\"no\">Hindi</string>\n  <string name=\"edit\">I-edit</string>\n  <string name=\"dialog_input_placeholder\">Halaga</string>\n  <string name=\"reset\">I-reset</string>\n  <string name=\"share\">Ibahagi</string>\n  <string name=\"patch\">Patch</string>\n  <string name=\"select_from_storage\">Pumili mula sa imbakan</string>\n  <string name=\"select_from_storage_description\">Pumili ng APK file mula sa storage gamit ang file picker</string>\n  <string name=\"suggested_version_info\">Iminungkahing bersyon: %s</string>\n  <string name=\"type_anything\">Mag-type ng anuman upang magpatuloy</string>\n  <string name=\"search\">Maghanap ng mga patch…</string>\n  <string name=\"apply\">Ilapat</string>\n  <string name=\"help\">Tulong</string>\n  <string name=\"back\">Bumalik</string>\n  <string name=\"warning\">Babala</string>\n  <string name=\"add\">Idagdag</string>\n  <string name=\"enable\">Paganahin</string>\n  <string name=\"disable\">Huwag paganahin</string>\n  <string name=\"close\">Isara</string>\n  <string name=\"clear\">I-clear</string>\n  <string name=\"system\">System</string>\n  <string name=\"light\">Maliwanag</string>\n  <string name=\"dark\">Madilim</string>\n  <string name=\"appearance\">Hitsura</string>\n  <string name=\"networking\">Networking</string>\n  <string name=\"allow_metered_networks\">Payagan ang mga network na may metro</string>\n  <string name=\"allow_metered_networks_description\">Pinapayagan ang mga awtomatikong update sa mga network na may metro.\\n    Maaaring magbigay pa rin ng babala ang application tungkol sa mga network na may metro para sa mga manu-manong operasyon.</string>\n  <string name=\"downloaded_apps\">Mga na-download na app</string>\n  <string name=\"process_runtime\">Patakbuhin ang Patcher sa ibang proseso (eksperimental)</string>\n  <string name=\"process_runtime_description\">Mas mabilis ito at nagpapahintulot sa Patcher na gumamit ng mas maraming memorya</string>\n  <string name=\"process_runtime_memory_limit\">Limitasyon sa memorya ng proseso ng Patcher</string>\n  <string name=\"process_runtime_memory_limit_description\">Ang maximum na dami ng memory na maaaring gamitin ng proseso ng Patcher</string>\n  <string name=\"debug_logs_export\">I-export ang mga debug log</string>\n  <string name=\"debug_logs_export_read_failed\">Nabigong basahin ang mga log (exit code %d)</string>\n  <string name=\"debug_logs_export_failed\">Nabigong i-export ang mga log</string>\n  <string name=\"debug_logs_export_success\">Na-export na mga log</string>\n  <string name=\"api_url\">API URL</string>\n  <string name=\"api_url_description\">Ang API na ginamit para mag-download ng mga kinakailangang file</string>\n  <string name=\"api_url_dialog_title\">Baguhin ang API URL</string>\n  <string name=\"api_url_dialog_description\">Baguhin ang API URL ng ReVanced Manager. Ginagamit ng ReVanced Manager ang API upang mag-download ng mga patch at update.</string>\n  <string name=\"api_url_dialog_warning\">Kumokonekta ang ReVanced Manager sa API upang mag-download ng mga patch at update. Siguraduhin na pinagkakatiwalaan mo ito.</string>\n  <string name=\"api_url_dialog_save\">Itakda</string>\n  <string name=\"api_url_dialog_reset\">I-reset ang API URL</string>\n  <string name=\"device\">Device</string>\n  <string name=\"device_android_version\">Bersyon ng Android</string>\n  <string name=\"device_model\">Modelo</string>\n  <string name=\"device_architectures\">Mga Arkitektura ng CPU</string>\n  <string name=\"device_memory_limit\">Mga limitasyon sa memorya</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normal) - %2$dMB (Malaki)</string>\n  <string name=\"patches_force_download\">Piliting i-download ang lahat ng patch</string>\n  <string name=\"patches_reset\">I-reset ang mga patch</string>\n  <string name=\"reset_onboarding\">I-reset ang onboarding</string>\n  <string name=\"reset_onboarding_description\">Ipakita ang onboarding screen sa susunod na paglunsad ng app</string>\n  <string name=\"patching\">Nagpa-patch</string>\n  <string name=\"signing\">Nagpipirma</string>\n  <string name=\"storage\">Imbakan</string>\n  <string name=\"no_patch_found\">Walang makitang patch. Suriin ang iyong mga patch</string>\n  <string name=\"tab_apps\">Mga App</string>\n  <string name=\"tab_patches\">Mga Patch</string>\n  <string name=\"delete\">Burahin</string>\n  <string name=\"refresh\">I-refresh</string>\n  <string name=\"continue_anyways\">Magpatuloy pa rin</string>\n  <string name=\"download_another_version\">Mag-download ng ibang bersyon</string>\n  <string name=\"download_app\">Mag-download ng app</string>\n  <string name=\"download_apk\">Mag-download ng APK file</string>\n  <string name=\"patches_download_fail\">Nabigong mag-download ng mga patch: %s</string>\n  <string name=\"api_not_working_title\">Ang serbisyo ng API ay kasalukuyang hindi gumagana</string>\n  <string name=\"api_not_working_description\">Maaaring maapektuhan ang ilang feature. Suriin ang iyong koneksyon o ang URL ng API sa mga setting.</string>\n  <string name=\"patches_replace_fail\">Nabigong mag-import ng mga patch: %s</string>\n  <string name=\"no_patched_apps_found\">Walang nahanap na patched na app</string>\n  <string name=\"no_patched_apps_description\">Sa kasalukuyan, wala kang anumang patched na app na alam namin. Baguhin iyan sa pamamagitan ng pag-patch ng iyong unang app!</string>\n  <string name=\"patched_apps_section_title\">Mga na-patch na app</string>\n  <string name=\"patchable_apps_section_title\">Mga app na maaaring i-patch</string>\n  <string name=\"no_patches_found\">Walang nahanap na mga patch</string>\n  <string name=\"no_patches_description\">Wala ka pang anumang patch. Magdagdag ng mga patch sa pamamagitan ng pag-tap sa button sa ibaba!</string>\n  <string name=\"tap_on_patches\">I-tap ang mga patch upang makakuha ng higit pang impormasyon tungkol sa mga ito</string>\n  <string name=\"patches_selected\">%s napili</string>\n  <string name=\"incompatible_patches\">Hindi tugmang mga patch</string>\n  <string name=\"universal_patches\">Mga Universal patch</string>\n  <string name=\"patch_selection_reset_toast\">Ang pagpili ng patch at mga opsyon ay na-reset sa inirerekomendang default</string>\n  <string name=\"patch_options_reset_toast\">Na-reset ang mga opsyon ng patch</string>\n  <string name=\"non_suggested_version_warning_title\">Bersyon na hindi iminungkahi</string>\n  <string name=\"non_suggested_version_warning_description\">Ang bersyon ng app na napili mo ay hindi tumutugma sa iminungkahing bersyon.\\nPaki-gamit ang iminungkahing bersyon: %s\\n\\nUpang magpatuloy pa rin, i-disable ang \\\"Require suggested app version\\\" sa advanced settings.</string>\n  <string name=\"selection_warning_title\">Itigil ang paggamit ng mga default?</string>\n  <string name=\"selection_warning_description\">Inirerekomenda na gamitin ang default na pagpili ng patch at mga opsyon. Ang pagbabago sa mga ito ay maaaring magdulot ng hindi inaasahang isyu.\\n\\nKailangan mong i-on ang \\\"Allow changing patch selection and options\\\" sa advanced settings bago i-toggle ang mga patch.</string>\n  <string name=\"universal_patch_warning_description\">Ang mga Universal patch ay may mas pangkalahatang gamit at hindi gumagana nang kasing-maaasahan gaya ng mga patch na target ang partikular na apps. Maaari kang makaranas ng mga isyu habang ginagamit ang mga ito.\\n\\nKailangan mong i-on ang \\\"Allow using universal patches\\\" sa advanced settings bago gamitin ang mga universal patch.</string>\n  <string name=\"this_version\">Ang bersyong ito</string>\n  <string name=\"universal\">Anumang app</string>\n  <string name=\"search_patches\">Maghanap ng mga patch</string>\n  <string name=\"app_version_not_compatible\">Hindi tugma ang patch na ito sa napiling bersyon ng app (%1$s)\\n\\nTugma lamang ito sa sumusunod na bersyon/mga bersyon: %2$s</string>\n  <string name=\"continue_with_version\">Magpatuloy sa bersyong ito?</string>\n  <string name=\"version_not_compatible\">Hindi lahat ng patch ay tugma sa bersyong ito (%s). Gusto mo bang magpatuloy pa rin?</string>\n  <string name=\"download_application\">Mag-download ng application?</string>\n  <string name=\"app_not_installed\">Hindi naka-install ang app na napili mo. Gusto mo bang i-download ito?</string>\n  <string name=\"failed_to_load_apk\">Nabigong i-load ang APK</string>\n  <string name=\"split_apk_not_supported\">Hindi mapapatch ang mga nahating APK</string>\n  <string name=\"loading\">Naglo-load…</string>\n  <string name=\"not_installed\">Hindi naka-install</string>\n  <string name=\"installed\">Naka-install</string>\n  <string name=\"app_info\">Impormasyon ng app</string>\n  <string name=\"uninstall\">I-uninstall</string>\n  <string name=\"unpatch\">Tanggalin ang patch</string>\n  <string name=\"repatch\">Muling i-patch</string>\n  <string name=\"install_type\">Uri ng pag-install</string>\n  <string name=\"package_name\">Pangalan ng package</string>\n  <string name=\"original_package_name\">Orihinal na pangalan ng package</string>\n  <string name=\"applied_patches\">Mga inilapat na patch</string>\n  <string name=\"view_applied_patches\">Tingnan ang mga inilapat na patch</string>\n  <string name=\"default_install\">Default</string>\n  <string name=\"mount_install\">I-mount</string>\n  <string name=\"mounted\">Naka-mount</string>\n  <string name=\"not_mounted\">Hindi naka-mount</string>\n  <string name=\"mount\">I-mount</string>\n  <string name=\"unmount\">I-unmount</string>\n  <string name=\"failed_to_mount\">Nabigo ang pag-mount: %s</string>\n  <string name=\"failed_to_unmount\">Nabigo ang pag-unmount: %s</string>\n  <string name=\"unpatch_app\">I-unpatch ang app?</string>\n  <string name=\"unpatch_description\">Sigurado ka bang gusto mong i-unpatch ang app na ito?</string>\n  <string name=\"downloader_invalid_version\">Hindi nakuha ng downloader ang tamang bersyon</string>\n  <string name=\"downloader_app_not_found\">Hindi nahanap ng downloader ang app</string>\n  <string name=\"downloader_error\">Error sa downloader: %s</string>\n  <string name=\"no_downloaders_installed\">Walang app downloader na naka-install!</string>\n  <string name=\"no_downloaders_trusted\">Walang app downloader ang pinagkakatiwalaan! Pakisuri ang iyong mga setting.</string>\n  <string name=\"already_patched\">Na-patch na</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filter</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Pagiging tugma</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Mga Package</string>\n  <string name=\"patch_selector_sheet_actions_title\">Mga Aksyon</string>\n  <string name=\"restore_default_selection\">Ibalik ang Default na Pinili</string>\n  <string name=\"deselect_all\">Alisin sa Pagkakapili Lahat</string>\n  <string name=\"invert_selection\">Baligtarin ang Pinili</string>\n  <string name=\"deselect_all_except\">I-deselect lahat maliban sa %s</string>\n  <string name=\"scope_dialog_title\">Ilapat sa</string>\n  <string name=\"scope_all_patches\">Lahat ng patch</string>\n  <string name=\"scope_bundle_patches\">%s lang</string>\n  <string name=\"string_option_menu_description\">Higit pang opsyon</string>\n  <string name=\"option_preset_custom_value\">Custom na halaga</string>\n  <string name=\"path_selector\">Piliin mula sa storage</string>\n  <string name=\"path_selector_parent_dir\">Nakaraang direktoryo</string>\n  <string name=\"path_selector_dirs\">Mga direktoryo</string>\n  <string name=\"path_selector_files\">Mga file</string>\n  <string name=\"show_password_field\">Ipakita ang password</string>\n  <string name=\"hide_password_field\">Itago ang password</string>\n  <string name=\"installer\">Installer</string>\n  <string name=\"install_app\">I-install</string>\n  <string name=\"install_app_success\">Na-install ang app</string>\n  <string name=\"install_app_fail\">Nabigo ang pag-install ng app: %s</string>\n  <string name=\"reinstall_app_fail\">Nabigo ang pag-reinstall ng app: %s</string>\n  <string name=\"uninstall_app_fail\">Nabigo ang pag-uninstall ng app: %s</string>\n  <string name=\"open_app\">Buksan</string>\n  <string name=\"save_apk\">I-save ang APK</string>\n  <string name=\"save_apk_success\">Na-save ang APK</string>\n  <string name=\"sign_fail\">Nabigo ang pag-sign ng APK: %s</string>\n  <string name=\"save_logs\">I-save ang mga log</string>\n  <string name=\"save_as_file\">I-save sa mga file</string>\n  <string name=\"export_patcher_logs\">I-export ang mga log ng patcher</string>\n  <string name=\"save_logs_success\">Na-save ang mga log</string>\n  <string name=\"downloader_activity_dialog_body\">Kinakailangan ang pakikipag-ugnayan ng user upang magpatuloy sa downloader na ito.</string>\n  <string name=\"select_install_type\">Piliin ang uri ng pag-install</string>\n  <string name=\"patcher_step_group_preparing\">Inihahanda</string>\n  <string name=\"patcher_step_load_patches\">I-load ang mga patch</string>\n  <string name=\"patcher_step_unpack\">Ihanda ang patcher</string>\n  <string name=\"patcher_step_group_patching\">Nagpa-patch</string>\n  <string name=\"patcher_step_group_saving\">Nagse-save</string>\n  <string name=\"patcher_step_write_patched\">Isulat ang na-patch na APK file</string>\n  <string name=\"patcher_step_sign_apk\">Lagdaan ang na-patch na APK file</string>\n  <string name=\"patcher_notification_title\">Nagpapatuloy ang pag-patch…</string>\n  <string name=\"patcher_notification_text\">I-tap upang bumalik sa patcher</string>\n  <string name=\"patcher_stop_confirm_title\">Ihinto ang patcher</string>\n  <string name=\"patcher_stop_confirm_description\">Sigurado ka bang gusto mong ihinto ang proseso ng pag-patch?</string>\n  <string name=\"patcher_install_in_progress\">Nagpapatuloy ang pag-install. Mangyaring maghintay</string>\n  <string name=\"execute_patches\">Isagawa ang mga patch</string>\n  <string name=\"executing_patch\">Isagawa ang %s</string>\n  <string name=\"failed_to_execute_patch\">Nabigo ang pagsasagawa ng %s</string>\n  <string name=\"step_completed\">nakumpleto</string>\n  <string name=\"step_failed\">nabigo</string>\n  <string name=\"step_running\">tumatakbo</string>\n  <string name=\"step_waiting\">naghihintay</string>\n  <string name=\"expand_content\">palawakin</string>\n  <string name=\"collapse_content\">tiklupin</string>\n  <string name=\"drag_handle\">muling ayusin</string>\n  <string name=\"more\">Higit pa</string>\n  <string name=\"less\">Mas kaunti</string>\n  <string name=\"continue_\">Magpatuloy</string>\n  <string name=\"dismiss\">Balewalain</string>\n  <string name=\"view_announcement\">Tingnan ang anunsyo</string>\n  <string name=\"permanent_dismiss\">Huwag ipakita ito muli</string>\n  <string name=\"donate\">Mag-donate</string>\n  <string name=\"website\">Website</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Makipag-ugnayan</string>\n  <string name=\"license\">Lisensya</string>\n  <string name=\"source\">Source</string>\n  <string name=\"repository\">Repository</string>\n  <string name=\"bundle_information_by_author\">Ni %1$s</string>\n  <string name=\"version\">Bersyon</string>\n  <string name=\"version_compatibility_warning\">Ang napiling bersyon ay maaaring hindi tugma sa mga napiling patch</string>\n  <string name=\"submit_feedback\">Magsumite ng isyu o feedback</string>\n  <string name=\"submit_feedback_description\">Tulungan kaming pagbutihin ang aplikasyong ito</string>\n  <string name=\"developer_options\">Mga opsyon ng developer</string>\n  <string name=\"developer_options_description\">Mga opsyon para sa pag-debug ng mga isyu</string>\n  <string name=\"patches_update_success\">Matagumpay ang update</string>\n  <string name=\"patches_update_unavailable\">Walang available na update</string>\n  <string name=\"view_patches\">Tingnan ang mga patch</string>\n  <string name=\"patches_view_any_version\">Anumang bersyon</string>\n  <string name=\"patches_view_any_package\">Anumang package</string>\n  <string name=\"patches_delete_single_dialog_description\">Sigurado ka bang gusto mong tanggalin ang \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Sigurado ka bang gusto mong tanggalin ang mga napiling patch?</string>\n  <string name=\"announcements\">Mga Anunsyo</string>\n  <string name=\"archive\">Arkibo</string>\n  <string name=\"about_revanced_manager\">Tungkol sa ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">Ang ReVanced Manager ay isang Android application na gumagamit ng ReVanced Patcher upang i-patch ang mga Android app. Pinapayagan ka nitong mag-download at mag-patch ng mga app gamit ang custom na patch, at pamahalaan ang proseso ng pag-patch.</string>\n  <string name=\"developer_options_taps\">%d na taps ang natitira</string>\n  <string name=\"developer_options_enabled\">Pinagana ang mga opsyon ng developer</string>\n  <string name=\"developer_options_already_enabled\">Ang mga opsyon ng developer ay pinagana na</string>\n  <string name=\"update_available\">May available na update</string>\n  <string name=\"current_version\">Kasalukuyang bersyon: %s</string>\n  <string name=\"new_version\">Bagong bersyon: %s</string>\n  <string name=\"ready_to_install_update\">Handa nang i-install ang update</string>\n  <string name=\"update_completed\">Na-install ang update</string>\n  <string name=\"install_update_manager_failed\">Nabigo ang pag-install ng update</string>\n  <string name=\"manual_update_check\">Suriin ang mga update</string>\n  <string name=\"view_update\">Tingnan ang update</string>\n  <string name=\"manual_update_check_description\">Manu-manong suriin ang mga update</string>\n  <string name=\"update_checking_manager\">Suriin ang mga update sa paglunsad</string>\n  <string name=\"update_checking_manager_description\">Suriin ang mga bagong bersyon ng ReVanced Manager kapag nagsimula ang aplikasyon</string>\n  <string name=\"update_checking_downloader\">Suriin ang mga update ng ReVanced Downloaders sa paglunsad</string>\n  <string name=\"update_checking_downloader_description\">Suriin ang mga update sa na-install na ReVanced Downloaders kapag nagsimula ang application</string>\n  <string name=\"manager_prereleases\">Gumamit ng mga pre-release</string>\n  <string name=\"manager_prereleases_description\">Gumamit ng mga pre-release na bersyon ng ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Maaaring hindi matatag ang mga bersyon ng pre-release at naglalaman ng mga bug. Maaari kang makaranas ng mga pag-crash, pagkawala ng data, o iba pang hindi inaasahang isyu. Paganahin lamang ito kung komportable ka sa mga panganib na ito.</string>\n  <string name=\"changelog\">Tingnan ang changelog</string>\n  <string name=\"changelog_loading\">Naglo-load ng changelog</string>\n  <string name=\"changelog_download_fail\">Nabigo ang pag-download ng changelog: %s</string>\n  <string name=\"changelog_description\">Tingnan ang pinakabagong mga pagbabago sa update na ito</string>\n  <string name=\"battery_optimization_notification\">Dapat i-off ang mga optimisasyon ng baterya upang ang ReVanced Manager ay gumana nang tama sa background. Mag-click dito upang i-off ang mga optimisasyon.</string>\n  <string name=\"installing_manager_update\">Nag-i-install ng update…</string>\n  <string name=\"downloading_manager_update\">Nagda-download ng update…</string>\n  <string name=\"download_manager_failed\">Nabigo ang pag-download ng update: %s</string>\n  <string name=\"cancel\">Kanselahin</string>\n  <string name=\"save\">I-save</string>\n  <string name=\"save_with_count\">I-save (%1$s)</string>\n  <string name=\"update\">Update</string>\n  <string name=\"empty\">Walang laman</string>\n  <string name=\"installing_message\">I-tap ang <b>Update</b> kapag ipinapahiwatig.\nAng ReVanced Manager ay magsasara kapag nag-a-update.</string>\n  <string name=\"no_changelogs_found\">Walang nakitang changelogs</string>\n  <string name=\"just_now\">Ngayon lang</string>\n  <string name=\"minutes_ago\">%sm nakalipas</string>\n  <string name=\"hours_ago\">%sh nakalipas</string>\n  <string name=\"days_ago\">%sd nakalipas</string>\n  <string name=\"invalid_date\">Di-wastong petsa</string>\n  <string name=\"disable_battery_optimization\">I-disable ang optimisasyon ng baterya</string>\n  <string name=\"input_dialog_value_invalid\">Di-wastong halaga</string>\n  <string name=\"option_required\">Kinakailangan ang opsyon na ito</string>\n  <string name=\"required_options_screen\">Kinakailangang mga opsyon</string>\n  <string name=\"failed_to_check_updates\">Nabigo ang pagsuri para sa mga update: %s</string>\n  <string name=\"no_update_available\">Walang available na update</string>\n  <string name=\"no_announcements_found\">Walang nakitang anunsyo</string>\n  <string name=\"update_check\">Sinusuri ang mga update…</string>\n  <string name=\"dismiss_temporary\">Hindi ngayon</string>\n  <string name=\"update_available_dialog_description\">May bagong bersyon ng ReVanced Manager (%s) na available.</string>\n  <string name=\"failed_to_download_update\">Nabigo ang pag-download ng update: %s</string>\n  <string name=\"download\">I-download</string>\n  <string name=\"download_confirmation_metered\">Kasalukuyan kang gumagamit ng metered na koneksyon, at maaaring magkaroon ng singil sa data mula sa iyong service provider.\n\nGusto mo pa ring magpatuloy?</string>\n  <string name=\"download_update_confirmation\">I-download ang update?</string>\n  <string name=\"no_contributors_found\">Walang nakitang kontribyutor</string>\n  <string name=\"select\">Piliin</string>\n  <string name=\"select_deselect_all\">Piliin o i-deselect lahat</string>\n  <string name=\"select_patches_type_dialog_description\">Magdagdag ng mga bagong patch mula sa URL o lokal na file</string>\n  <string name=\"local_patches_description\">Magdagdag ng mga patch mula sa lokal na storage.</string>\n  <string name=\"remote_patches_description\">Magdagdag ng mga patch mula sa URL. Maaaring awtomatikong mag-update ang mga patch.</string>\n  <string name=\"recommended\">Inirerekomenda</string>\n  <string name=\"installation_failed_dialog_title\">Nabigo ang pag-install</string>\n  <string name=\"installation_cancelled_dialog_title\">Nakansela ang pag-install</string>\n  <string name=\"installation_blocked_dialog_title\">Na-block ang pag-install</string>\n  <string name=\"installation_conflict_dialog_title\">Salungatan sa pag-install</string>\n  <string name=\"installation_incompatible_dialog_title\">Hindi tugma ang pag-install</string>\n  <string name=\"installation_invalid_dialog_title\">Hindi balido ang pag-install</string>\n  <string name=\"installation_storage_issue_dialog_title\">Hindi sapat ang storage</string>\n  <string name=\"installation_timeout_dialog_title\">Nag-timeout ang pag-install</string>\n  <string name=\"installation_failed_description\">Nabigo ang pag-install dahil sa hindi alam na dahilan. Subukan ulit?</string>\n  <string name=\"installation_aborted_description\">Manu-manong nakansela ang pag-install. Subukan ulit?</string>\n  <string name=\"installation_blocked_description\">Na-block ang pag-install. Suriin ang mga setting ng seguridad ng iyong device at subukan ulit.</string>\n  <string name=\"installation_conflict_description\">Napigilan ang pag-install ng isang kasalukuyang pag-install ng app. I-uninstall ang naka-install na app at subukan ulit?</string>\n  <string name=\"installation_incompatible_description\">Hindi tugma ang app sa device na ito. Gumamit ng APK na tugma sa device na ito at subukan ulit.</string>\n  <string name=\"installation_invalid_description\">Hindi balido ang app. I-uninstall ang app at subukan ulit?</string>\n  <string name=\"installation_storage_issue_description\">Hindi ma-install ang app dahil sa hindi sapat na storage. Magbakante ng espasyo at subukan ulit.</string>\n  <string name=\"installation_timeout_description\">Masyadong matagal ang pag-install. Subukan ulit?</string>\n  <string name=\"reinstall\">I-reinstall</string>\n  <string name=\"show\">Ipakita</string>\n  <string name=\"debugging\">Pagde-debug</string>\n  <string name=\"about_device\">Tungkol sa device</string>\n  <string name=\"enter_url\">Ilagay ang URL</string>\n  <string name=\"next\">Susunod</string>\n  <string name=\"auto_update\">Awtomatikong update</string>\n  <string name=\"add_patches\">Magdagdag ng mga patch</string>\n  <string name=\"auto_update_description\">Awtomatikong mag-update kapag may bagong bersyon na available</string>\n  <string name=\"patches_prereleases\">Gumamit ng mga pre-release</string>\n  <string name=\"patches_prereleases_description\">Gumamit ng mga pre-release na bersyon ng %s</string>\n  <string name=\"patches_url\">URL ng mga patch</string>\n  <string name=\"incompatible_patches_dialog\">Ang mga patch na ito ay hindi tugma sa napiling bersyon ng app (%1$s).\n\nMag-click sa mga patch upang makita ang higit pang detalye.</string>\n  <string name=\"incompatible_patch\">Hindi tugmang patch</string>\n  <string name=\"any_version\">Anuman</string>\n  <string name=\"never_show_again\">Huwag nang ipakita muli</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Ipakita ang mensahe ng update sa paglunsad</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Magpakita ng popup na notipikasyon tuwing may bagong update na available sa paglunsad</string>\n  <string name=\"failed_to_import_keystore\">Nabigo ang pag-import ng keystore</string>\n  <string name=\"export\">I-export</string>\n  <string name=\"confirm\">Kumpirmahin</string>\n  <string name=\"new_announcement\">Bagong anunsyo:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d patch</item>\n    <item quantity=\"other\">%d patch</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Isagawa ang %d patch</item>\n    <item quantity=\"other\">Isagawa ang %d patch</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d napili</item>\n    <item quantity=\"other\">%d napili</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-fr-rFR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Patcher</string>\n  <string name=\"patches\">Patchs</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Manager</string>\n  <string name=\"onboarding_welcome_to\">Bienvenue dans</string>\n  <string name=\"onboarding_welcome_back\">Bonjour ! C\\'est le nouveau</string>\n  <string name=\"onboarding_apps_subtitle\">Vous pouvez sélectionner une application à patcher maintenant ou le faire plus tard</string>\n  <string name=\"onboarding_apps_network_error\">Impossible de charger les correctifs car le réseau est indisponible ou instable. Connectez-vous à un réseau stable et réessayez.</string>\n  <string name=\"onboarding_updates_subtitle\">Configurez les mises à jour automatiques pour maintenir à jour ReVanced Manager et les patchs</string>\n  <string name=\"banner_sources_not_downloaded_description\">Les correctifs et les téléchargeurs n\\'ont pas pu être téléchargés lors de la configuration. Appuyez sur mettre à jour pour les télécharger.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager se connectera à %s pour télécharger les versions initiales si votre appareil est connecté à Internet.</string>\n  <string name=\"retry\">Réessayer</string>\n  <string name=\"onboarding_skip\">Ignorer pour l\\'instant</string>\n  <string name=\"onboarding_recommended_version\">Version recommandée : %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Ignorer les autorisations ?</string>\n  <string name=\"onboarding_permissions_skip_description\">Sans les autorisations requises, certaines fonctionnalités risquent de ne pas fonctionner correctement. Vous pourrez les accorder ultérieurement dans les paramètres de l\\'application.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Ignorer quand même</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager a besoin de quelques autorisations pour fonctionner correctement</string>\n  <string name=\"permission_install_apps\">Installation d\\'applis inconnues</string>\n  <string name=\"permission_install_apps_description\">Nécessaire pour installer les applications patchées</string>\n  <string name=\"permission_notifications\">Notifications</string>\n  <string name=\"permission_notifications_description\">Évite l\\'interruption du patching en arrière-plan</string>\n  <string name=\"permission_battery\">Optimisation de la batterie</string>\n  <string name=\"permission_battery_description\">Empêche l\\'interruption du patching en arrière-plan</string>\n  <string name=\"permission_grant\">Accorder</string>\n  <string name=\"downloader_host_permission_label\">Hôte de téléchargeurs ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Utilisé pour contrôler l\\'accès aux téléchargeurs ReVanced Manager. Seul ReVanced Manager en dispose.</string>\n  <string name=\"toast_copied_to_clipboard\">Copié !</string>\n  <string name=\"copy_to_clipboard\">Copier dans le presse-papiers</string>\n  <string name=\"dashboard\">Tableau de bord</string>\n  <string name=\"settings\">Paramètres</string>\n  <string name=\"select_app\">Sélectionnez une application</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d sélectionnés</string>\n  <string name=\"fab_patch_app\">Patcher une application</string>\n  <string name=\"fab_add_patches\">Ajouter des patchs</string>\n  <string name=\"new_downloader_notification\">De nouveaux téléchargeurs sont disponibles. Appuyez ici pour les configurer.</string>\n  <string name=\"unsupported_architecture_warning\">Le processus de patching n\\'est pas pris en charge sur l\\'architecture de cet appareil et échouera très probablement.</string>\n  <string name=\"import_\">Importer</string>\n  <string name=\"import_patches\">Importer des patchs</string>\n  <string name=\"file_field_set\">Sélectionné</string>\n  <string name=\"file_field_not_set\">Non sélectionné</string>\n  <string name=\"field_not_set\">Non défini</string>\n  <string name=\"patches_missing\">Manquants</string>\n  <string name=\"patches_error\">Erreur</string>\n  <string name=\"patches_error_description\">Les patchs n\\'ont pas pu être chargés, appuyez pour voir l\\'erreur</string>\n  <string name=\"patches_not_downloaded\">Les patchs n\\'ont pas été téléchargés.</string>\n  <string name=\"patches_name_default\">Patchs</string>\n  <string name=\"patches_name_fallback\">Sans nom</string>\n  <string name=\"android_11_bug_dialog_title\">Bug Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">L\\'autorisation d\\'installation d\\'applications doit être accordée à l\\'avance pour contourner un bug système dans Android 11 qui affecterait négativement l\\'expérience utilisateur.</string>\n  <string name=\"no_network_toast\">Aucune connexion Internet disponible</string>\n  <string name=\"selected_app_meta_any_version\">Toute version disponible</string>\n  <string name=\"app_source_dialog_title\">Sélectionner la source</string>\n  <string name=\"app_source_dialog_option_auto\">Automatique</string>\n  <string name=\"app_source_dialog_option_auto_description\">Utiliser l\\'application installée, puis l\\'APK téléchargé, puis les téléchargeurs disponibles</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Aucune application compatible trouvée ou aucun téléchargeur disponible</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Les applications montées ne peuvent pas être patchées à nouveau sans accès root</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">La version %s ne correspond pas à la version suggérée</string>\n  <string name=\"patch_item_description\">Commencez à patcher l\\'application</string>\n  <string name=\"patch_selector_item\">Sélectionner des patchs</string>\n  <string name=\"patch_selector_item_description\">%d patchs sélectionnés</string>\n  <string name=\"patch_selection_changed_warning\">La sélection de patchs a été modifiée</string>\n  <string name=\"no_patches_selected\">Aucun patch sélectionné</string>\n  <string name=\"network_unavailable_warning\">Votre appareil n\\'est pas connecté à Internet. Le téléchargement va échouer.</string>\n  <string name=\"network_metered_warning\">Vous êtes actuellement sur une connexion facturée à l\\'usage. Votre fournisseur de services pourrait vous facturer des frais d\\'utilisation des données.</string>\n  <string name=\"apk_source_selector_item\">Sélectionner la source de l\\'APK</string>\n  <string name=\"apk_source_auto\">Automatique</string>\n  <string name=\"apk_source_auto_installed\">Auto • Utilisation de l\\'APK installé</string>\n  <string name=\"apk_source_auto_downloaded\">Auto • Utilisation de l\\'APK téléchargé</string>\n  <string name=\"apk_source_auto_downloader\">Auto • Utilisation des téléchargeurs disponibles</string>\n  <string name=\"apk_source_auto_storage\">Auto • Sélectionner depuis le stockage</string>\n  <string name=\"apk_source_downloader\">Utilisation de %s</string>\n  <string name=\"apk_source_installed\">Utilisation de l\\'APK installé</string>\n  <string name=\"apk_source_local\">Utilisation d\\'un fichier APK local</string>\n  <string name=\"apk_source_downloaded\">Déjà téléchargé</string>\n  <string name=\"legacy_import_failed\">Impossible d\\'importer les paramètres hérités</string>\n  <string name=\"auto_updates_dialog_title\">Configurez les mises à jour</string>\n  <string name=\"auto_updates_dialog_description\">Voulez-vous que ReVanced Manager recherche périodiquement des mises à jour des composants suivants ?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Patches</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager : Téléchargeurs</string>\n  <string name=\"auto_updates_dialog_note\">Ces paramètres peuvent être modifiés ultérieurement.\n\n    ReVanced Manager se connectera à %s pour télécharger les versions initiales si votre appareil est connecté à Internet.</string>\n  <string name=\"announcements_filter_tag\">Filtrer par étiquette</string>\n  <string name=\"announcements_show_archived\">Afficher les annonces archivées</string>\n  <string name=\"general\">Général</string>\n  <string name=\"general_description\">Langue, thème, couleur dynamique</string>\n  <string name=\"updates\">Mises à jour</string>\n  <string name=\"updates_description\">Recherchez des mises à jour et consultez les changements</string>\n  <string name=\"downloads\">Téléchargements</string>\n  <string name=\"downloads_description\">Téléchargeurs et applications téléchargées</string>\n  <string name=\"import_export\">Importer et exporter</string>\n  <string name=\"import_export_description\">Magasin de clés, options et sélection des patchs</string>\n  <string name=\"advanced\">Avancé</string>\n  <string name=\"advanced_description\">URL de l\\'API, limites de mémoire, débogage</string>\n  <string name=\"safeguards_toggled_warning\">Les mesures de protections ont été modifiées</string>\n  <string name=\"about\">À propos</string>\n  <string name=\"about_app_name\">À propos de %1$s</string>\n  <string name=\"opensource_licenses\">Licences Open Source</string>\n  <string name=\"opensource_licenses_description\">Consultez la liste des bibliothèques utilisées pour créer cette application</string>\n  <string name=\"contributors\">Contributeurs</string>\n  <string name=\"contributors_description\">Consultez la liste des contributeurs à ReVanced</string>\n  <string name=\"dynamic_color\">Couleur dynamique</string>\n  <string name=\"dynamic_color_description\">Adaptez les couleurs au fond d\\'écran</string>\n  <string name=\"pure_black_theme\">Thème noir pur</string>\n  <string name=\"pure_black_theme_description\">Utilisez des arrière-plans noir pur en thème sombre</string>\n  <string name=\"theme\">Thème</string>\n  <string name=\"theme_description\">Choisissez entre le thème clair ou sombre</string>\n  <string name=\"language\">Langue</string>\n  <string name=\"language_description\">Choisissez la langue d\\'affichage de l\\'application</string>\n  <string name=\"language_system_default\">Langue du système</string>\n  <string name=\"search_languages\">Rechercher des langues…</string>\n  <string name=\"safeguards\">Mesures de protection</string>\n  <string name=\"patch_compat_check\">Désactiver la vérification de compatibilité des versions</string>\n  <string name=\"patch_compat_check_description\">Ne pas restreindre les patchs aux versions d\\'application compatibles</string>\n  <string name=\"patch_compat_check_confirmation\">Sélectionner des patchs incompatibles peut empêcher l\\'application de fonctionner correctement.\n\nVoulez-vous quand même continuer ?</string>\n  <string name=\"suggested_version_safeguard\">Exiger la version d\\'application suggérée</string>\n  <string name=\"suggested_version_safeguard_description\">Forcez la sélection de la version suggérée de l\\'application</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Sélectionner une application dont la version n\\'est pas celle suggérée peut entraîner des problèmes inattendus.\n\nVoulez-vous quand même continuer ?</string>\n  <string name=\"patch_selection_safeguard\">Autoriser la modification de la sélection et des options de patchs</string>\n  <string name=\"patch_selection_safeguard_description\">Ne pas empêcher la sélection ou la désélection des patchs et la personnalisation des options</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Modifier la sélection des patchs peut entraîner des problèmes inattendus.\n\nActiver quand même ?</string>\n  <string name=\"universal_patches_safeguard\">Autoriser l\\'utilisation de patchs universels</string>\n  <string name=\"universal_patches_safeguard_description\">Ne pas empêcher l\\'utilisation de patchs universels</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Les patchs universels ne sont pas aussi bien testés que ceux qui ciblent des applications spécifiques.\n\nActiver quand même ?</string>\n  <string name=\"keystore\">Magasin de clés</string>\n  <string name=\"patches_selections\">Sélections de patchs</string>\n  <string name=\"import_keystore\">Importer un magasin de clés</string>\n  <string name=\"import_keystore_description\">Importez un magasin de clés personnalisé</string>\n  <string name=\"import_keystore_dialog_title\">Saisissez les identifiants du magasin de clés</string>\n  <string name=\"import_keystore_dialog_description\">Vous devrez saisir les identifiants du magasin de clés pour l\\'importer.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Nom d\\'utilisateur (alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Mot de passe</string>\n  <string name=\"import_keystore_dialog_button\">Importer</string>\n  <string name=\"import_keystore_wrong_credentials\">Identifiants du magasin de clés incorrects</string>\n  <string name=\"import_keystore_success\">Magasin de clés importé</string>\n  <string name=\"export_keystore\">Exporter le magasin de clés</string>\n  <string name=\"export_keystore_description\">Exportez le magasin de clés actuel</string>\n  <string name=\"export_keystore_unavailable\">Aucun magasin de clés à exporter</string>\n  <string name=\"export_keystore_success\">Magasin de clés exporté</string>\n  <string name=\"regenerate_keystore\">Regénérer le magasin de clés</string>\n  <string name=\"regenerate_keystore_description\">Générez un nouveau magasin de clés</string>\n  <string name=\"regenerate_keystore_dialog_description\">Vous êtes sur le point de regénérer votre magasin de clés utilisé par Manager pendant l\\'application des patchs.\n\nVous ne pourrez pas mettre à jour les applications précédemment installées à partir de cette source.</string>\n  <string name=\"regenerate_keystore_success\">Le magasin de clés a été remplacé avec succès</string>\n  <string name=\"import_patch_selection\">Importer la sélection de patchs</string>\n  <string name=\"import_patch_selection_description\">Importez la sélection de patchs à partir d\\'un fichier JSON</string>\n  <string name=\"import_patch_selection_fail\">Impossible d\\'importer la sélection de patchs : %s</string>\n  <string name=\"import_patch_selection_success\">Sélection de patchs importée</string>\n  <string name=\"select_bundle_for_import\">Sélectionner le bundle pour l\\'importation</string>\n  <string name=\"export_patch_selection\">Exporter la sélection de patchs</string>\n  <string name=\"export_patch_selection_description\">Exportez la sélection de patchs vers un fichier JSON</string>\n  <string name=\"export_patch_selection_fail\">Impossible d\\'exporter la sélection de patchs : %s</string>\n  <string name=\"export_patch_selection_success\">Sélection de patchs exportée</string>\n  <string name=\"select_bundle_for_export\">Sélectionner le bundle pour l\\'exportation</string>\n  <string name=\"patch_selection_packages\">Applications avec sélections enregistrées</string>\n  <string name=\"patch_selection_entries\">Patchs sélectionnés au total</string>\n  <string name=\"reset_configuration\">Réinitialiser la configuration</string>\n  <string name=\"reset_patch_selection\">Sélections de patchs</string>\n  <string name=\"reset_patch_selection_description\">Réinitialiser la sélection de patchs stockée</string>\n  <string name=\"reset_patch_options\">Options des patchs</string>\n  <string name=\"reset_patch_options_description\">Réinitialiser les options de patchs stockées</string>\n  <string name=\"reset_patch_selection_success\">La sélection de patchs a été réinitialisée</string>\n  <string name=\"patch_selection_reset_all\">Réinitialiser la sélection de patchs globalement</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Vous êtes sur le point de réinitialiser toutes les sélections de patchs. Vous devrez sélectionner manuellement chaque patch à nouveau.</string>\n  <string name=\"patch_selection_reset_all_description\">Réinitialise toutes les sélections de patchs</string>\n  <string name=\"patch_selection_reset_package\">Réinitialiser la sélection de patchs pour l\\'application</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Vous êtes sur le point de réinitialiser la sélection de patchs pour l\\'application \\\"%s\\\". Vous devrez sélectionner manuellement chaque patch à nouveau.</string>\n  <string name=\"patch_selection_reset_package_description\">Réinitialise la sélection de patchs pour une seule application</string>\n  <string name=\"patch_selection_reset_patches\">Réinitialiser la sélection de patchs (simple)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Vous êtes sur le point de réinitialiser la sélection de patchs pour \\\"%s\\\". Vous devrez sélectionner manuellement chaque patch à nouveau.</string>\n  <string name=\"patch_selection_reset_patches_description\">Réinitialise la sélection de patchs pour une collection spécifique de patchs</string>\n  <string name=\"patch_options_reset_package\">Réinitialiser les options de patchs pour une application</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Vous êtes sur le point de réinitialiser les options de patchs pour l\\'application \\\"%s\\\". Vous devrez réappliquer chaque option à nouveau.</string>\n  <string name=\"patch_options_reset_package_description\">Réinitialise les options de patchs pour une seule application</string>\n  <string name=\"patch_options_reset_patches\">Réinitialiser les options de patchs (unique)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Vous êtes sur le point de réinitialiser les options de patchs pour \\\"%s\\\". Vous devrez réappliquer chaque option à nouveau.</string>\n  <string name=\"patch_options_reset_patches_description\">Réinitialise les options de patchs pour une collection spécifique de patchs</string>\n  <string name=\"patch_options_reset_all\">Réinitialiser les options de patchs globalement</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Vous êtes sur le point de réinitialiser toutes les options de patchs. Vous devrez réappliquer chaque option à nouveau.</string>\n  <string name=\"patch_options_reset_all_description\">Réinitialise toutes les options de patchs</string>\n  <string name=\"downloaders\">Téléchargeurs</string>\n  <string name=\"downloader_prereleases\">Utiliser les préversions</string>\n  <string name=\"downloader_prereleases_description\">Utilisez les versions préliminaires du téléchargeur principal</string>\n  <string name=\"downloader_state_loaded\">Chargé</string>\n  <string name=\"downloader_state_failed\">Échec du chargement, appuyez pour plus de détails</string>\n  <string name=\"downloader_state_missing\">Manquant</string>\n  <string name=\"downloader_delete_apps_title\">Supprimer les applications sélectionnées</string>\n  <string name=\"downloader_delete_apps_description\">Voulez-vous vraiment supprimer les applications sélectionnées ?</string>\n  <string name=\"downloader_delete_single_description\">Voulez-vous vraiment supprimer \\\"%s\\\" ?</string>\n  <string name=\"downloader_settings_no_apps\">Aucune application téléchargée trouvée.</string>\n  <string name=\"downloader_settings_no_apps_description\">Les applications téléchargées via ReVanced Manager apparaîtront ici.</string>\n  <string name=\"downloader_url\">URL du téléchargeur</string>\n  <string name=\"downloader_add\">Ajouter un téléchargeur</string>\n  <string name=\"select_downloader_type_dialog_description\">Ajoutez de nouveaux téléchargeurs à partir d\\'une URL ou de fichiers locaux</string>\n  <string name=\"local_downloaders_description\">Ajoutez des téléchargeurs à partir du stockage local.</string>\n  <string name=\"remote_downloaders_description\">Ajoutez des téléchargeurs à partir d\\'une URL. Ils pourront être mis à jour automatiquement.</string>\n  <string name=\"install_revanced_downloaders\">Installez des téléchargeurs pour obtenir des applications directement depuis ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Installer les téléchargeurs ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Annuler l\\'installation des téléchargeurs ?</string>\n  <string name=\"cancel_downloader_install_description\">Une installation de téléchargeurs est en cours. Si vous quittez maintenant, le téléchargement sera annulé.</string>\n  <string name=\"downloader_sources_unavailable_title\">Ces téléchargeurs sont manquants</string>\n  <string name=\"downloader_sources_unavailable_description\">Appuyez sur le bouton de mise à jour pour corriger le problème.</string>\n  <string name=\"downloader_update_failed\">Échec de la mise à jour du téléchargeur : %s</string>\n  <string name=\"downloader_replace_fail\">Échec de l\\'importation du téléchargeur : %s</string>\n  <string name=\"search_apps\">Rechercher des applications…</string>\n  <string name=\"loading_body\">Chargement…</string>\n  <string name=\"downloading_patches\">Téléchargement des patchs…</string>\n  <string name=\"options\">Options</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Oui</string>\n  <string name=\"no\">Non</string>\n  <string name=\"edit\">Modifier</string>\n  <string name=\"dialog_input_placeholder\">Valeur</string>\n  <string name=\"reset\">Réinitialiser</string>\n  <string name=\"share\">Partager</string>\n  <string name=\"patch\">Patcher</string>\n  <string name=\"select_from_storage\">Sélectionner depuis le stockage</string>\n  <string name=\"select_from_storage_description\">Sélectionnez un fichier APK de votre stockage à l\\'aide du sélecteur de fichiers</string>\n  <string name=\"suggested_version_info\">Version suggérée : %s</string>\n  <string name=\"type_anything\">Saisissez quelque chose pour continuer</string>\n  <string name=\"search\">Rechercher des patchs…</string>\n  <string name=\"apply\">Appliquer</string>\n  <string name=\"help\">Aide</string>\n  <string name=\"back\">Retour</string>\n  <string name=\"warning\">Avertissement</string>\n  <string name=\"add\">Ajouter</string>\n  <string name=\"enable\">Activer</string>\n  <string name=\"disable\">Désactiver</string>\n  <string name=\"close\">Fermer</string>\n  <string name=\"clear\">Effacer</string>\n  <string name=\"system\">Système</string>\n  <string name=\"light\">Claire</string>\n  <string name=\"dark\">Sombre</string>\n  <string name=\"appearance\">Apparence</string>\n  <string name=\"networking\">Réseau</string>\n  <string name=\"allow_metered_networks\">Autoriser les réseaux facturés à l\\'usage</string>\n  <string name=\"allow_metered_networks_description\">Permet les mises à jour automatiques sur les réseaux facturés à l\\'usage.\n    Il est néanmoins possible que l\\'application vous prévienne de l\\'utilisation d\\'un réseau facturé à l\\'usage lors des opérations manuelles.</string>\n  <string name=\"downloaded_apps\">Applications téléchargées</string>\n  <string name=\"process_runtime\">Exécuter Patcher dans un autre processus (expérimental)</string>\n  <string name=\"process_runtime_description\">Plus rapide et permet à Patcher d\\'utiliser plus de mémoire</string>\n  <string name=\"process_runtime_memory_limit\">Limite de mémoire du processus Patcher</string>\n  <string name=\"process_runtime_memory_limit_description\">La quantité maximale de mémoire que le processus Patcher peut utiliser</string>\n  <string name=\"debug_logs_export\">Exporter les journaux de débogage</string>\n  <string name=\"debug_logs_export_read_failed\">Échec de la lecture des journaux (code de sortie %d)</string>\n  <string name=\"debug_logs_export_failed\">Échec de l\\'exportation des journaux </string>\n  <string name=\"debug_logs_export_success\">Journaux exportés</string>\n  <string name=\"api_url\">URL de l\\'API</string>\n  <string name=\"api_url_description\">L\\'API utilisée pour télécharger les fichiers nécessaires</string>\n  <string name=\"api_url_dialog_title\">Modifier l\\'URL de l\\'API</string>\n  <string name=\"api_url_dialog_description\">Modifiez l\\'URL de l\\'API de ReVanced Manager. ReVanced Manager utilise l\\'API pour télécharger les patchs et les mises à jour.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager se connecte à l\\'API pour télécharger les patchs et les mises à jour. Assurez-vous de lui faire confiance.</string>\n  <string name=\"api_url_dialog_save\">Définir</string>\n  <string name=\"api_url_dialog_reset\">Réinitialiser l\\'URL de l\\'API</string>\n  <string name=\"device\">Appareil</string>\n  <string name=\"device_android_version\">Version d\\'Android</string>\n  <string name=\"device_model\">Modèle</string>\n  <string name=\"device_architectures\">Architectures CPU</string>\n  <string name=\"device_memory_limit\">Limites de mémoire</string>\n  <string name=\"device_memory_limit_format\">%1$d Mo (normal) – %2$d Mo (grand)</string>\n  <string name=\"patches_force_download\">Forcer le téléchargement de tous les patchs</string>\n  <string name=\"patches_reset\">Réinitialiser les patchs</string>\n  <string name=\"reset_onboarding\">Réinitialiser l\\'onboarding</string>\n  <string name=\"reset_onboarding_description\">Afficher l\\'écran d\\'onboarding au prochain lancement de l\\'application</string>\n  <string name=\"patching\">Application des patchs</string>\n  <string name=\"signing\">Signature</string>\n  <string name=\"storage\">Stockage</string>\n  <string name=\"no_patch_found\">Les patchs sont introuvables, vérifiez vos patchs</string>\n  <string name=\"tab_apps\">Applis</string>\n  <string name=\"tab_patches\">Patchs</string>\n  <string name=\"delete\">Supprimer</string>\n  <string name=\"refresh\">Actualiser</string>\n  <string name=\"continue_anyways\">Continuer quand même</string>\n  <string name=\"download_another_version\">Télécharger une autre version</string>\n  <string name=\"download_app\">Télécharger l\\'application</string>\n  <string name=\"download_apk\">Télécharger le fichier APK</string>\n  <string name=\"patches_download_fail\">Échec du téléchargement des patchs : %s</string>\n  <string name=\"api_not_working_title\">Le service API est actuellement indisponible</string>\n  <string name=\"api_not_working_description\">Certaines fonctionnalités pourraient être affectées. Vérifiez votre connexion ou l\\'URL de l\\'API dans les paramètres.</string>\n  <string name=\"patches_replace_fail\">Échec de l\\'importation des patchs : %s</string>\n  <string name=\"no_patched_apps_found\">Aucune application patchée trouvée</string>\n  <string name=\"no_patched_apps_description\">Vous n\\'avez actuellement aucune application patchée que nous connaissions. Changez cela en patchant votre première application !</string>\n  <string name=\"patched_apps_section_title\">Applications patchées</string>\n  <string name=\"patchable_apps_section_title\">Applications pouvant être patchées</string>\n  <string name=\"no_patches_found\">Aucun patch trouvé</string>\n  <string name=\"no_patches_description\">Vous n\\'avez pas encore de patchs. Ajoutez des patchs en appuyant sur le bouton ci-dessous !</string>\n  <string name=\"tap_on_patches\">Appuyez sur les patchs pour obtenir plus d\\'informations à leur sujet</string>\n  <string name=\"patches_selected\">Sélectionné : %s</string>\n  <string name=\"incompatible_patches\">Patchs incompatibles</string>\n  <string name=\"universal_patches\">Patchs universels</string>\n  <string name=\"patch_selection_reset_toast\">La sélection et les options de patchs ont été réinitialisées aux valeurs par défaut recommandées</string>\n  <string name=\"patch_options_reset_toast\">Les options de patchs ont été réinitialisées</string>\n  <string name=\"non_suggested_version_warning_title\">Version non suggérée</string>\n  <string name=\"non_suggested_version_warning_description\">La version de l\\'application que vous avez sélectionnée ne correspond pas à la version suggérée.\nVeuillez utiliser la version suggérée : %s\n\nPour continuer quand même, désactivez \\\"Exiger la version d\\'application suggérée\\\" dans les paramètres avancés.</string>\n  <string name=\"selection_warning_title\">Arrêter d\\'utiliser les paramètres par défaut ?</string>\n  <string name=\"selection_warning_description\">Il est recommandé d\\'utiliser la sélection et les options de patchs par défaut. Les modifier peut entraîner des problèmes inattendus.\n\nVous devez activer \\\"Autoriser la modification de la sélection et des options de patchs\\\" dans les paramètres avancés avant de pouvoir activer/désactiver les patchs.</string>\n  <string name=\"universal_patch_warning_description\">Les patchs universels sont à un usage plus générique et ne sont pas aussi fiables que les patchs conçus pour des applications spécifiques. Vous pourriez rencontrer des problèmes en les utilisant.\n\nVous devez activer \\\"Autoriser l\\'utilisation des patchs universels\\\" dans les paramètres avancés avant de pouvoir utiliser les patchs universels.</string>\n  <string name=\"this_version\">Cette version</string>\n  <string name=\"universal\">N\\'importe quelle application</string>\n  <string name=\"search_patches\">Rechercher des patchs</string>\n  <string name=\"app_version_not_compatible\">Ce patch n\\'est pas compatible avec la version de l\\'application sélectionnée (%1$s)\n\nIl n\\'est compatible qu\\'avec les versions suivantes : %2$s</string>\n  <string name=\"continue_with_version\">Continuer avec cette version ?</string>\n  <string name=\"version_not_compatible\">Tous les patchs ne sont pas compatibles avec cette version (%s). Voulez-vous quand même continuer ?</string>\n  <string name=\"download_application\">Télécharger l\\'application ?</string>\n  <string name=\"app_not_installed\">L\\'application que vous avez sélectionnée n\\'est pas installée. Voulez-vous la télécharger ?</string>\n  <string name=\"failed_to_load_apk\">Échec du chargement de l\\'APK</string>\n  <string name=\"split_apk_not_supported\">Les APK fractionnés ne peuvent pas être patchés</string>\n  <string name=\"loading\">Chargement…</string>\n  <string name=\"not_installed\">Non installée</string>\n  <string name=\"installed\">Installée</string>\n  <string name=\"app_info\">Infos sur l\\'appli</string>\n  <string name=\"uninstall\">Désinstaller</string>\n  <string name=\"unpatch\">Dépatcher</string>\n  <string name=\"repatch\">Repatcher</string>\n  <string name=\"install_type\">Type d\\'installation</string>\n  <string name=\"package_name\">Nom du package</string>\n  <string name=\"original_package_name\">Nom de package d\\'origine</string>\n  <string name=\"applied_patches\">Patchs appliqués</string>\n  <string name=\"view_applied_patches\">Voir les patchs appliqués</string>\n  <string name=\"default_install\">Par défaut</string>\n  <string name=\"mount_install\">Montage</string>\n  <string name=\"mounted\">Montée</string>\n  <string name=\"not_mounted\">Non montée</string>\n  <string name=\"mount\">Monter</string>\n  <string name=\"unmount\">Démonter</string>\n  <string name=\"failed_to_mount\">Échec du montage : %s</string>\n  <string name=\"failed_to_unmount\">Échec du démontage : %s</string>\n  <string name=\"unpatch_app\">Dé-patcher l\\'application ?</string>\n  <string name=\"unpatch_description\">Voulez-vous vraiment dé-patcher cette application ?</string>\n  <string name=\"downloader_invalid_version\">Le plugin de téléchargement n\\'a pas récupéré la bonne version</string>\n  <string name=\"downloader_app_not_found\">Le plugin de téléchargement n\\'a pas trouvé l\\'application</string>\n  <string name=\"downloader_error\">Erreur du plugin de téléchargement : %s</string>\n  <string name=\"no_downloaders_installed\">Aucun téléchargeur d\\'applications n\\'est installé !</string>\n  <string name=\"no_downloaders_trusted\">Aucun téléchargeur d\\'applications n\\'a été approuvé ! Veuillez vérifier vos paramètres.</string>\n  <string name=\"already_patched\">Déjà patchée</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filtrer</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Compatibilité</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Packages</string>\n  <string name=\"patch_selector_sheet_actions_title\">Actions</string>\n  <string name=\"restore_default_selection\">Restaurer la sélection par défaut</string>\n  <string name=\"deselect_all\">Tout désélectionner</string>\n  <string name=\"invert_selection\">Inverser la sélection</string>\n  <string name=\"deselect_all_except\">Tout désélectionner sauf %s</string>\n  <string name=\"scope_dialog_title\">Appliquer à</string>\n  <string name=\"scope_all_patches\">Tous les patchs</string>\n  <string name=\"scope_bundle_patches\">Seulement %s</string>\n  <string name=\"string_option_menu_description\">Plus d\\'options</string>\n  <string name=\"option_preset_custom_value\">Valeur personnalisée</string>\n  <string name=\"path_selector\">Sélectionner à partir du stockage</string>\n  <string name=\"path_selector_parent_dir\">Répertoire précédent</string>\n  <string name=\"path_selector_dirs\">Répertoires</string>\n  <string name=\"path_selector_files\">Fichiers</string>\n  <string name=\"show_password_field\">Afficher le mot de passe</string>\n  <string name=\"hide_password_field\">Masquer le mot de passe</string>\n  <string name=\"installer\">Programme d\\'installation</string>\n  <string name=\"install_app\">Installer</string>\n  <string name=\"install_app_success\">Application installée</string>\n  <string name=\"install_app_fail\">Échec de l\\'installation de l\\'application : %s</string>\n  <string name=\"reinstall_app_fail\">Échec de la réinstallation de l\\'application : %s</string>\n  <string name=\"uninstall_app_fail\">Échec de la désinstallation de l\\'application : %s</string>\n  <string name=\"open_app\">Ouvrir</string>\n  <string name=\"save_apk\">Enregistrer l\\'APK</string>\n  <string name=\"save_apk_success\">APK enregistré</string>\n  <string name=\"sign_fail\">Échec de la signature de l\\'APK : %s</string>\n  <string name=\"save_logs\">Enregistrer les journaux</string>\n  <string name=\"save_as_file\">Enregistrer dans les fichiers</string>\n  <string name=\"export_patcher_logs\">Exporter les journaux du patcheur</string>\n  <string name=\"save_logs_success\">Journaux enregistrés</string>\n  <string name=\"downloader_activity_dialog_body\">Une interaction utilisateur est requise pour pouvoir poursuivre avec ce téléchargeur.</string>\n  <string name=\"select_install_type\">Sélectionner le type d\\'installation</string>\n  <string name=\"patcher_step_group_preparing\">Préparation</string>\n  <string name=\"patcher_step_load_patches\">Charger les patchs</string>\n  <string name=\"patcher_step_unpack\">Préparer le patcheur</string>\n  <string name=\"patcher_step_group_patching\">Application des patchs</string>\n  <string name=\"patcher_step_group_saving\">Enregistrement</string>\n  <string name=\"patcher_step_write_patched\">Écrire le fichier APK patché</string>\n  <string name=\"patcher_step_sign_apk\">Signer le fichier APK patché</string>\n  <string name=\"patcher_notification_title\">Application des patchs en cours…</string>\n  <string name=\"patcher_notification_text\">Appuyez pour revenir au patcheur</string>\n  <string name=\"patcher_stop_confirm_title\">Arrêter le patcheur</string>\n  <string name=\"patcher_stop_confirm_description\">Voulez-vous vraiment interrompre le processus de patching ?</string>\n  <string name=\"patcher_install_in_progress\">L\\'installation est en cours, veuillez patienter</string>\n  <string name=\"execute_patches\">Exécuter les patchs</string>\n  <string name=\"executing_patch\">Exécuter %s</string>\n  <string name=\"failed_to_execute_patch\">Échec de l\\'exécution de %s</string>\n  <string name=\"step_completed\">terminé</string>\n  <string name=\"step_failed\">échec</string>\n  <string name=\"step_running\">en cours</string>\n  <string name=\"step_waiting\">en attente</string>\n  <string name=\"expand_content\">développer</string>\n  <string name=\"collapse_content\">réduire</string>\n  <string name=\"drag_handle\">réorganiser</string>\n  <string name=\"more\">Plus</string>\n  <string name=\"less\">Moins</string>\n  <string name=\"continue_\">Continuer</string>\n  <string name=\"dismiss\">Fermer</string>\n  <string name=\"view_announcement\">Voir l\\'annonce</string>\n  <string name=\"permanent_dismiss\">Ne plus afficher</string>\n  <string name=\"donate\">Faire un don</string>\n  <string name=\"website\">Site Web</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Contact</string>\n  <string name=\"license\">Licence</string>\n  <string name=\"source\">Source</string>\n  <string name=\"repository\">Dépôt</string>\n  <string name=\"bundle_information_by_author\">Par %1$s</string>\n  <string name=\"version\">Version</string>\n  <string name=\"version_compatibility_warning\">La version sélectionnée peut être incompatible avec les patchs sélectionnés</string>\n  <string name=\"submit_feedback\">Envoyer un rapport de bug ou des commentaires</string>\n  <string name=\"submit_feedback_description\">Aidez-nous à améliorer cette application</string>\n  <string name=\"developer_options\">Options pour les développeurs</string>\n  <string name=\"developer_options_description\">Options pour le débogage des problèmes</string>\n  <string name=\"patches_update_success\">Mise à jour réussie</string>\n  <string name=\"patches_update_unavailable\">Aucune mise à jour disponible</string>\n  <string name=\"view_patches\">Consultez la liste des patchs</string>\n  <string name=\"patches_view_any_version\">Toute version</string>\n  <string name=\"patches_view_any_package\">Tout package</string>\n  <string name=\"patches_delete_single_dialog_description\">Voulez-vous vraiment supprimer \\\"%s\\\" ?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Voulez-vous vraiment supprimer les correctifs sélectionnés ?</string>\n  <string name=\"announcements\">Annonces</string>\n  <string name=\"archive\">Archive</string>\n  <string name=\"about_revanced_manager\">À propos de ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager est une application Android utilisant ReVanced Patcher pour patcher des applications Android. Elle vous permet de télécharger et d\\'appliquer des patchs personnalisés aux applications, et de gérer le processus d\\'application des patchs.</string>\n  <string name=\"developer_options_taps\">%d appuis restants</string>\n  <string name=\"developer_options_enabled\">Options pour les développeurs activées</string>\n  <string name=\"developer_options_already_enabled\">Les options pour les développeurs sont déjà activées</string>\n  <string name=\"update_available\">Une mise à jour est disponible</string>\n  <string name=\"current_version\">Version actuelle : %s</string>\n  <string name=\"new_version\">Nouvelle version : %s</string>\n  <string name=\"ready_to_install_update\">Prêt à installer la mise à jour</string>\n  <string name=\"update_completed\">Mise à jour installée</string>\n  <string name=\"install_update_manager_failed\">Échec de l\\'installation de la mise à jour</string>\n  <string name=\"manual_update_check\">Rechercher des mises à jour</string>\n  <string name=\"view_update\">Voir la mise à jour</string>\n  <string name=\"manual_update_check_description\">Recherchez manuellement des mises à jour</string>\n  <string name=\"update_checking_manager\">Rechercher des mises à jour au lancement</string>\n  <string name=\"update_checking_manager_description\">Rechercher des mises à jour de ReVanced Manager au démarrage de l\\'application</string>\n  <string name=\"update_checking_downloader\">Rechercher des mises à jour des téléchargeurs ReVanced au lancement</string>\n  <string name=\"update_checking_downloader_description\">Recherchez des mises à jour des téléchargeurs ReVanced installés au démarrage de l\\'application</string>\n  <string name=\"manager_prereleases\">Utiliser les préversions</string>\n  <string name=\"manager_prereleases_description\">Utilisez les versions préliminaires de ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Les versions préliminaires peuvent être instables et contenir des bugs. Vous pourriez rencontrer des plantages, pertes de données ou autres problèmes inattendus. Activez cette option seulement si vous acceptez ces risques.</string>\n  <string name=\"changelog\">Voir les changements</string>\n  <string name=\"changelog_loading\">Chargement du journal de modifications</string>\n  <string name=\"changelog_download_fail\">Échec du téléchargement du journal de modifications : %s</string>\n  <string name=\"changelog_description\">Découvrez les dernières modifications apportées dans cette mise à jour</string>\n  <string name=\"battery_optimization_notification\">Les optimisations de batterie doivent être désactivées pour que ReVanced Manager puisse fonctionner correctement en arrière-plan. Appuyez ici pour désactiver les optimisations.</string>\n  <string name=\"installing_manager_update\">Installation de la mise à jour…</string>\n  <string name=\"downloading_manager_update\">Téléchargement de la mise à jour…</string>\n  <string name=\"download_manager_failed\">Échec du téléchargement de la mise à jour : %s</string>\n  <string name=\"cancel\">Annuler</string>\n  <string name=\"save\">Enregistrer</string>\n  <string name=\"save_with_count\">Enregistrer (%1$s)</string>\n  <string name=\"update\">Mettre à jour</string>\n  <string name=\"empty\">Vide</string>\n  <string name=\"installing_message\">Appuyez sur <b>Mettre à jour</b> lorsque vous y êtes invité.\nReVanced Manager se fermera lors de la mise à jour.</string>\n  <string name=\"no_changelogs_found\">Aucun journal de modifications trouvé</string>\n  <string name=\"just_now\">À l\\'instant</string>\n  <string name=\"minutes_ago\">il y a %s m</string>\n  <string name=\"hours_ago\">il y a %s h</string>\n  <string name=\"days_ago\">il y a %s j</string>\n  <string name=\"invalid_date\">Date invalide</string>\n  <string name=\"disable_battery_optimization\">Désactiver l\\'optimisation de la batterie</string>\n  <string name=\"input_dialog_value_invalid\">Valeur invalide</string>\n  <string name=\"option_required\">Cette option est requise</string>\n  <string name=\"required_options_screen\">Options requises</string>\n  <string name=\"failed_to_check_updates\">Échec de la recherche de mises à jour : %s</string>\n  <string name=\"no_update_available\">Aucune mise à jour disponible</string>\n  <string name=\"no_announcements_found\">Aucune annonce trouvée</string>\n  <string name=\"update_check\">Recherche de mises à jour…</string>\n  <string name=\"dismiss_temporary\">Pas maintenant</string>\n  <string name=\"update_available_dialog_description\">Une nouvelle version de ReVanced Manager (%s) est disponible.</string>\n  <string name=\"failed_to_download_update\">Échec du téléchargement de la mise à jour : %s</string>\n  <string name=\"download\">Télécharger</string>\n  <string name=\"download_confirmation_metered\">Vous êtes actuellement connecté à un réseau facturé à l\\'usage, des frais de données de votre fournisseur de services peuvent s\\'appliquer.\n\nVoulez-vous quand même continuer ?</string>\n  <string name=\"download_update_confirmation\">Télécharger la mise à jour ?</string>\n  <string name=\"no_contributors_found\">Aucun contributeur trouvé</string>\n  <string name=\"select\">Sélectionner</string>\n  <string name=\"select_deselect_all\">Tout sélectionner ou désélectionner</string>\n  <string name=\"select_patches_type_dialog_description\">Ajoutez de nouveaux patchs à partir d\\'une URL ou de fichiers locaux</string>\n  <string name=\"local_patches_description\">Ajoutez des patchs à partir du stockage local.</string>\n  <string name=\"remote_patches_description\">Ajoutez des patchs à partir d\\'une URL. Les patchs peuvent se mettre à jour automatiquement.</string>\n  <string name=\"recommended\">Recommandé</string>\n  <string name=\"installation_failed_dialog_title\">Échec de l\\'installation</string>\n  <string name=\"installation_cancelled_dialog_title\">Installation annulée</string>\n  <string name=\"installation_blocked_dialog_title\">Installation bloquée</string>\n  <string name=\"installation_conflict_dialog_title\">Conflit d\\'installation</string>\n  <string name=\"installation_incompatible_dialog_title\">Installation incompatible</string>\n  <string name=\"installation_invalid_dialog_title\">Installation invalide</string>\n  <string name=\"installation_storage_issue_dialog_title\">Stockage insuffisant</string>\n  <string name=\"installation_timeout_dialog_title\">Délai d\\'installation dépassé</string>\n  <string name=\"installation_failed_description\">L\\'installation a échoué pour une raison inconnue. Réessayer ?</string>\n  <string name=\"installation_aborted_description\">L\\'installation a été annulée manuellement. Réessayer ?</string>\n  <string name=\"installation_blocked_description\">L\\'installation a été bloquée. Vérifiez les paramètres de sécurité de votre appareil et réessayez.</string>\n  <string name=\"installation_conflict_description\">L\\'installation a été empêchée par une installation existante de l\\'application. Désinstaller l\\'application installée et réessayer ?</string>\n  <string name=\"installation_incompatible_description\">L\\'application est incompatible avec cet appareil. Utilisez un APK compatible avec cet appareil et réessayez.</string>\n  <string name=\"installation_invalid_description\">L\\'application est invalide. Désinstaller l\\'application et réessayer ?</string>\n  <string name=\"installation_storage_issue_description\">L\\'application n\\'a pas pu être installée car l\\'espace de stockage était insuffisant. Libérez de l\\'espace et réessayez.</string>\n  <string name=\"installation_timeout_description\">L\\'installation a pris trop de temps. Réessayer ?</string>\n  <string name=\"reinstall\">Réinstaller</string>\n  <string name=\"show\">Afficher</string>\n  <string name=\"debugging\">Débogage</string>\n  <string name=\"about_device\">À propos de l\\'appareil</string>\n  <string name=\"enter_url\">Saisir une URL</string>\n  <string name=\"next\">Suivant</string>\n  <string name=\"auto_update\">Mise à jour automatique</string>\n  <string name=\"add_patches\">Ajouter des patchs</string>\n  <string name=\"auto_update_description\">Mettre à jour automatiquement dès qu\\'une nouvelle version est disponible</string>\n  <string name=\"patches_prereleases\">Utiliser les préversions</string>\n  <string name=\"patches_prereleases_description\">Utilisez les versions préliminaires de %s</string>\n  <string name=\"patches_url\">URL des patchs</string>\n  <string name=\"incompatible_patches_dialog\">Ces patchs ne sont pas compatibles avec la version de l\\'application sélectionnée (%1$s).\n\nAppuyez sur les patchs pour obtenir plus de détails.</string>\n  <string name=\"incompatible_patch\">Patch incompatible</string>\n  <string name=\"any_version\">Toutes les versions</string>\n  <string name=\"never_show_again\">Ne plus afficher</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Afficher le message de mise à jour au lancement</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Afficher une notification pop-up au lancement dès qu\\'une nouvelle mise à jour est disponible</string>\n  <string name=\"failed_to_import_keystore\">Échec de l\\'importation du magasin de clés</string>\n  <string name=\"export\">Exporter</string>\n  <string name=\"confirm\">Confirmer</string>\n  <string name=\"new_announcement\">Nouvelle annonce :\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d patch</item>\n    <item quantity=\"other\">%d patchs</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Exécuter %d patch</item>\n    <item quantity=\"other\">Exécuter %d patchs</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d sélectionné</item>\n    <item quantity=\"other\">%d sélectionnés</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ga-rIE/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Paisteoir</string>\n  <string name=\"patches\">Paistí</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Bainisteoir</string>\n  <string name=\"onboarding_welcome_to\">Fáilte chuig</string>\n  <string name=\"onboarding_welcome_back\">Haigh! Is é an ceann nua é</string>\n  <string name=\"onboarding_apps_subtitle\">Is féidir leat aip a roghnú chun paiste a chur air anois nó é a dhéanamh níos déanaí</string>\n  <string name=\"onboarding_apps_network_error\">Níorbh fhéidir paistí a luchtú toisc go bhfuil an líonra neamhshábháilte nó ar fáil. Ceangail le líonra cobhsaí agus bain triail as arís.</string>\n  <string name=\"onboarding_updates_subtitle\">Cumraigh nuashonruithe uathoibríocha chun ReVanced Manager agus paistí a choinneáil cothrom le dáta</string>\n  <string name=\"banner_sources_not_downloaded_description\">Níorbh fhéidir paistí agus íoslódóirí a íoslódáil le linn an tsocraithe. Tapáil nuashonrú chun iad a íoslódáil.</string>\n  <string name=\"onboarding_updates_note\">Déanfaidh ReVanced Manager nasc le %s chun leaganacha tosaigh a íoslódáil má tá do ghléas ceangailte leis an idirlíon.</string>\n  <string name=\"retry\">Bain triail eile as</string>\n  <string name=\"onboarding_skip\">Scipáil anois</string>\n  <string name=\"onboarding_recommended_version\">Leagan molta: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Scipáil ceadanna?</string>\n  <string name=\"onboarding_permissions_skip_description\">Gan na ceadanna riachtanacha, b\\'fhéidir nach n-oibreoidh roinnt gnéithe i gceart. Is féidir leat iad a dheonú níos déanaí i socruithe an aip.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Scipáil ar aon nós</string>\n  <string name=\"onboarding_permissions_subtitle\">Teastaíonn cúpla cead ó ReVanced Manager chun oibriú i gceart</string>\n  <string name=\"permission_install_apps\">Suiteáil aipeanna anaithnid</string>\n  <string name=\"permission_install_apps_description\">Riachtanach chun feidhmchláir phaisteáilte a shuiteáil</string>\n  <string name=\"permission_notifications\">Fógraí</string>\n  <string name=\"permission_notifications_description\">Ceadaíonn paisteáil gan bhriseadh sa chúlra</string>\n  <string name=\"permission_battery\">Optamú ceallraí</string>\n  <string name=\"permission_battery_description\">Coscann paisteáil ó bheith curtha isteach sa chúlra</string>\n  <string name=\"permission_grant\">Deontas</string>\n  <string name=\"downloader_host_permission_label\">Óstach íoslódálaí ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Úsáidtear é chun rochtain ar íoslódálaithe ReVanced Manager a rialú. Níl sé seo ach ag ReVanced Manager.</string>\n  <string name=\"toast_copied_to_clipboard\">Cóipeáilte!</string>\n  <string name=\"copy_to_clipboard\">Cóipeáil chuig gearrthaisce</string>\n  <string name=\"dashboard\">Deais</string>\n  <string name=\"settings\">Socruithe</string>\n  <string name=\"select_app\">Roghnaigh aip</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d roghnaithe</string>\n  <string name=\"fab_patch_app\">Paisteáil aip</string>\n  <string name=\"fab_add_patches\">Cuir paistí leis</string>\n  <string name=\"new_downloader_notification\">Íoslódálaithe nua ar fáil. Cliceáil anseo chun iad a chumrú.</string>\n  <string name=\"unsupported_architecture_warning\">Níl paisteáil ar ailtireacht an fheiste seo tacaithe agus is dócha go dteipfidh air.</string>\n  <string name=\"import_\">Iompórtáil</string>\n  <string name=\"import_patches\">Iompórtáil paistí</string>\n  <string name=\"file_field_set\">Roghnaithe</string>\n  <string name=\"file_field_not_set\">Gan a bheith roghnaithe</string>\n  <string name=\"field_not_set\">Gan socrú</string>\n  <string name=\"patches_missing\">Ar iarraidh</string>\n  <string name=\"patches_error\">Earráid</string>\n  <string name=\"patches_error_description\">Níorbh fhéidir paistí a luchtú. Cliceáil chun an earráid a fheiceáil</string>\n  <string name=\"patches_not_downloaded\">Níor íoslódáladh na paistí.</string>\n  <string name=\"patches_name_default\">Paistí</string>\n  <string name=\"patches_name_fallback\">Gan ainm</string>\n  <string name=\"android_11_bug_dialog_title\">Fabht Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">Ní mór an cead suiteála aip a dheonú roimh ré chun fabht sa chóras Android 11 a sheachaint a dhéanfaidh difear diúltach d\\'eispéireas an úsáideora.</string>\n  <string name=\"no_network_toast\">Níl aon nasc idirlín ar fáil</string>\n  <string name=\"selected_app_meta_any_version\">Aon leagan ar fáil</string>\n  <string name=\"app_source_dialog_title\">Roghnaigh foinse</string>\n  <string name=\"app_source_dialog_option_auto\">Uath</string>\n  <string name=\"app_source_dialog_option_auto_description\">Úsáid an aip suiteáilte, ansin an APK íoslódáilte, ansin íoslódálaithe atá ar fáil</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Gan aip chomhoiriúnach nó íoslódálaithe ar fáil</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Ní féidir aipeanna suiteáilte a phaisteáil arís gan rochtain fréamh</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Ní thagann leagan %s leis an leagan molta</string>\n  <string name=\"patch_item_description\">Tosaigh ag paisteáil an fheidhmchláir</string>\n  <string name=\"patch_selector_item\">Roghnaigh paistí</string>\n  <string name=\"patch_selector_item_description\">%d paistí roghnaithe</string>\n  <string name=\"patch_selection_changed_warning\">Tá athrú tagtha ar roghnú na bpaistí</string>\n  <string name=\"no_patches_selected\">Níl aon phaistí roghnaithe</string>\n  <string name=\"network_unavailable_warning\">Níl do ghléas ceangailte leis an idirlíon. Teipfidh ar an íoslódáil níos déanaí.</string>\n  <string name=\"network_metered_warning\">Tá tú ar nasc méadraithe faoi láthair. D\\'fhéadfadh táillí sonraí ón do sholáthraí seirbhíse a bheith i gceist.</string>\n  <string name=\"apk_source_selector_item\">Roghnaigh foinse APK</string>\n  <string name=\"apk_source_auto\">Uath</string>\n  <string name=\"apk_source_auto_installed\">Uath · Ag úsáid APK suiteáilte</string>\n  <string name=\"apk_source_auto_downloaded\">Uath · Ag úsáid APK íoslódáilte</string>\n  <string name=\"apk_source_auto_downloader\">Uath · Ag baint úsáide as íoslódálaithe atá ar fáil</string>\n  <string name=\"apk_source_auto_storage\">Uath · Roghnaigh ón stóras</string>\n  <string name=\"apk_source_downloader\">Ag úsáid %s</string>\n  <string name=\"apk_source_installed\">Ag úsáid APK suiteáilte</string>\n  <string name=\"apk_source_local\">Ag úsáid comhad APK áitiúil</string>\n  <string name=\"apk_source_downloaded\">Íoslódáilte cheana féin</string>\n  <string name=\"legacy_import_failed\">Níorbh fhéidir socruithe oidhreachta a iompórtáil</string>\n  <string name=\"auto_updates_dialog_title\">Cumraigh nuashonruithe</string>\n  <string name=\"auto_updates_dialog_description\">An dteastaíonn uait go ndéanfadh ReVanced Manager seiceáil tréimhsiúil le haghaidh nuashonruithe do na comhpháirteanna seo a leanas?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Paistí ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Íoslódálaithe</string>\n  <string name=\"auto_updates_dialog_note\">Is féidir na socruithe seo a athrú níos déanaí.\n\nCeanglóidh ReVanced Manager le %s chun leaganacha tosaigh a íoslódáil má tá do ghléas ceangailte leis an idirlíon.</string>\n  <string name=\"announcements_filter_tag\">Scag de réir clibe</string>\n  <string name=\"announcements_show_archived\">Taispeáin cartlannaithe</string>\n  <string name=\"general\">Ginearálta</string>\n  <string name=\"general_description\">Teanga, téama, dath dinimiciúil</string>\n  <string name=\"updates\">Nuashonruithe</string>\n  <string name=\"updates_description\">Seiceáil le haghaidh nuashonruithe agus féach ar an loga athraithe</string>\n  <string name=\"downloads\">Íoslódálacha</string>\n  <string name=\"downloads_description\">Íoslódálaithe agus aipeanna íoslódáilte</string>\n  <string name=\"import_export\">Iompórtáil &amp; easpórtáil</string>\n  <string name=\"import_export_description\">Stóras eochrach, roghanna paiste agus roghnú</string>\n  <string name=\"advanced\">Ardleibhéal</string>\n  <string name=\"advanced_description\">URL API, teorainn cuimhne, dífhabhtú</string>\n  <string name=\"safeguards_toggled_warning\">Lascaíodh cosaintí.</string>\n  <string name=\"about\">Maidir</string>\n  <string name=\"about_app_name\">Maidir le %1$s</string>\n  <string name=\"opensource_licenses\">Ceadúnais foinse oscailte</string>\n  <string name=\"opensource_licenses_description\">Féach ar na leabharlanna uile a úsáideadh chun an feidhmchlár seo a chruthú</string>\n  <string name=\"contributors\">Ranníocóirí</string>\n  <string name=\"contributors_description\">Féach ar ranníocóirí ReVanced</string>\n  <string name=\"dynamic_color\">Dath dinimiciúil</string>\n  <string name=\"dynamic_color_description\">Dathanna a oiriúnú don cúlbhrat</string>\n  <string name=\"pure_black_theme\">Téama dubh íon</string>\n  <string name=\"pure_black_theme_description\">Úsáid cúlraí dubha íona le haghaidh téama dorcha</string>\n  <string name=\"theme\">Téama</string>\n  <string name=\"theme_description\">Roghnaigh idir téama éadrom nó dorcha</string>\n  <string name=\"language\">Teanga</string>\n  <string name=\"language_description\">Roghnaigh teanga taispeána an aip</string>\n  <string name=\"language_system_default\">Réamhshocrú córais</string>\n  <string name=\"search_languages\">Cuardaigh teangacha…</string>\n  <string name=\"safeguards\">Cosaintí</string>\n  <string name=\"patch_compat_check\">Díchumasaigh seiceáil comhoiriúnachta leagan</string>\n  <string name=\"patch_compat_check_description\">Ná cuir srian le paistí le leaganacha aip comhoiriúnacha</string>\n  <string name=\"patch_compat_check_confirmation\">D\\'fhéadfadh aip briste a bheith mar thoradh ar phaistí neamh-chomhoiriúnacha a roghnú.\n\nAr mhaith leat leanúint ar aghaidh ar aon nós?</string>\n  <string name=\"suggested_version_safeguard\">Éiligh leagan molta an aip</string>\n  <string name=\"suggested_version_safeguard_description\">Cuir i bhfeidhm roghnú an leagain mholta den aip</string>\n  <string name=\"suggested_version_safeguard_confirmation\">D\\'fhéadfadh fadhbanna gan choinne a bheith mar thoradh ar aip nach bhfuil an leagan molta a roghnú.\n\nAr mhaith leat leanúint ar aghaidh ar aon nós?</string>\n  <string name=\"patch_selection_safeguard\">Ceadaigh athrú roghnú paiste agus roghanna</string>\n  <string name=\"patch_selection_safeguard_description\">Ná cuir cosc ar phaistí a roghnú nó a dhíroghnú agus ar roghanna a shaincheapadh</string>\n  <string name=\"patch_selection_safeguard_confirmation\">D\\'fhéadfadh fadhbanna gan choinne a bheith mar thoradh ar roghnú na bpaistí a athrú.\n\nCumasaigh ar aon nós?</string>\n  <string name=\"universal_patches_safeguard\">Ceadaigh úsáid paistí uilíocha</string>\n  <string name=\"universal_patches_safeguard_description\">Ná cuir cosc ar úsáid paistí uilíocha</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Níl paistí uilíocha tástáilte chomh maith le paistí a dhíríonn ar aipeanna sonracha.\n\nCumasaigh ar aon nós?</string>\n  <string name=\"keystore\">Eochracha</string>\n  <string name=\"patches_selections\">Roghanna paistí</string>\n  <string name=\"import_keystore\">Iompórtáil stóras eochrach</string>\n  <string name=\"import_keystore_description\">Iompórtáil stóras eochrach saincheaptha</string>\n  <string name=\"import_keystore_dialog_title\">Iontráil dintiúir stóras eochrach</string>\n  <string name=\"import_keystore_dialog_description\">Beidh ort dintiúir an stórais eochrach a iontráil chun é a iompórtáil.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Ainm úsáideora (Ailias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Pasfhocal</string>\n  <string name=\"import_keystore_dialog_button\">Iompórtáil</string>\n  <string name=\"import_keystore_wrong_credentials\">Dintiúir stóras eochrach mícheart</string>\n  <string name=\"import_keystore_success\">Stóras eochrach iompórtáilte</string>\n  <string name=\"export_keystore\">Easpórtáil stóras eochrach</string>\n  <string name=\"export_keystore_description\">Easpórtáil an stóras eochrach reatha</string>\n  <string name=\"export_keystore_unavailable\">Níl aon stóras eochrach le heaspórtáil</string>\n  <string name=\"export_keystore_success\">Stóras eochrach easpórtáilte</string>\n  <string name=\"regenerate_keystore\">Athghin stóras eochrach</string>\n  <string name=\"regenerate_keystore_description\">Gin stóras eochrach nua</string>\n  <string name=\"regenerate_keystore_dialog_description\">Tá tú ar tí do stóras eochrach a athghiniúint a úsáidfidh an bainisteoir le linn an phróisis paisteála.\n\nNí bheidh tú in ann na haipeanna a suiteáladh roimhe seo ón bhfoinse seo a nuashonrú.</string>\n  <string name=\"regenerate_keystore_success\">Tá an stór eochrach curtha in ionad go rathúil</string>\n  <string name=\"import_patch_selection\">Iompórtáil roghnú paiste</string>\n  <string name=\"import_patch_selection_description\">Iompórtáil roghnú paiste ó chomhad JSON</string>\n  <string name=\"import_patch_selection_fail\">Níorbh fhéidir roghnú paiste a iompórtáil: %s</string>\n  <string name=\"import_patch_selection_success\">Roghú paiste iompórtáilte</string>\n  <string name=\"select_bundle_for_import\">Roghnaigh pacáiste le hallmhairiú isteach ann</string>\n  <string name=\"export_patch_selection\">Easpórtáil roghnú paiste</string>\n  <string name=\"export_patch_selection_description\">Easpórtáil roghnú paiste chuig comhad JSON</string>\n  <string name=\"export_patch_selection_fail\">Níorbh fhéidir roghnú paiste a easpórtáil: %s</string>\n  <string name=\"export_patch_selection_success\">Rogha paiste easpórtáilte</string>\n  <string name=\"select_bundle_for_export\">Roghnaigh pacáiste le honnmhairiú uaidh</string>\n  <string name=\"patch_selection_packages\">Aipeanna le roghanna sábháilte</string>\n  <string name=\"patch_selection_entries\">Líon iomlán na bpaistí roghnaithe</string>\n  <string name=\"reset_configuration\">Athshocraigh an chumraíocht</string>\n  <string name=\"reset_patch_selection\">Roghanna paiste</string>\n  <string name=\"reset_patch_selection_description\">Athshocraigh an roghnú paiste stóráilte</string>\n  <string name=\"reset_patch_options\">Roghanna paiste</string>\n  <string name=\"reset_patch_options_description\">Athshocraigh na roghanna paiste stóráilte</string>\n  <string name=\"reset_patch_selection_success\">Athshocraíodh roghnú paiste</string>\n  <string name=\"patch_selection_reset_all\">Athshocraigh roghnú paiste go domhanda</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Tá tú ar tí gach roghnú paiste a athshocrú. Beidh ort gach paiste a roghnú de láimh arís.</string>\n  <string name=\"patch_selection_reset_all_description\">Athshocraíonn sé gach roghnú paiste</string>\n  <string name=\"patch_selection_reset_package\">Athshocraigh roghnú paiste don aip</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Tá tú ar tí roghnú an phaiste don aip \\\"%s\\\" a athshocrú. Beidh ort gach paiste a roghnú de láimh arís.</string>\n  <string name=\"patch_selection_reset_package_description\">Athshocraíonn sé roghnú paiste d\\'aip amháin</string>\n  <string name=\"patch_selection_reset_patches\">Athshocraigh roghnú paiste (singil)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Tá tú ar tí an roghnú paiste do \\\"%s\\\" a athshocrú. Beidh ort gach paiste a roghnú de láimh arís.</string>\n  <string name=\"patch_selection_reset_patches_description\">Athshocraíonn an roghnú paiste do bhailiúchán sonrach paistí</string>\n  <string name=\"patch_options_reset_package\">Athshocraigh roghanna paiste don aip</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Tá tú ar tí na roghanna paiste don aip \\\"%s\\\" a athshocrú. Beidh ort gach rogha a chur i bhfeidhm arís.</string>\n  <string name=\"patch_options_reset_package_description\">Athshocraíonn roghanna paiste d\\'aip amháin</string>\n  <string name=\"patch_options_reset_patches\">Athshocraigh roghanna paiste (singil)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Tá tú ar tí na roghanna paiste do \\\"%s\\\" a athshocrú. Beidh ort gach rogha a chur i bhfeidhm arís.</string>\n  <string name=\"patch_options_reset_patches_description\">Athshocraíonn na roghanna paiste do bhailiúchán sonrach paistí</string>\n  <string name=\"patch_options_reset_all\">Athshocraigh roghanna paiste go domhanda</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Tá tú ar tí gach rogha paiste a athshocrú. Beidh ort gach rogha a chur i bhfeidhm arís.</string>\n  <string name=\"patch_options_reset_all_description\">Athshocraíonn gach rogha paiste</string>\n  <string name=\"downloaders\">Íoslódálaithe</string>\n  <string name=\"downloader_prereleases\">Úsáid réamh-eisiúintí</string>\n  <string name=\"downloader_prereleases_description\">Bain úsáid as leaganacha réamh-eisiúna den phríomh-íoslódálaí</string>\n  <string name=\"downloader_state_loaded\">Luchtaithe</string>\n  <string name=\"downloader_state_failed\">Theip ar luchtú. Cliceáil le haghaidh tuilleadh sonraí</string>\n  <string name=\"downloader_state_missing\">Ar iarraidh</string>\n  <string name=\"downloader_delete_apps_title\">Scrios aipeanna roghnaithe</string>\n  <string name=\"downloader_delete_apps_description\">An bhfuil tú cinnte gur mhaith leat na haipeanna roghnaithe a scriosadh?</string>\n  <string name=\"downloader_delete_single_description\">An bhfuil tú cinnte gur mhaith leat \\\"%s\\\" a scriosadh?</string>\n  <string name=\"downloader_settings_no_apps\">Níor aimsíodh aon aipeanna íoslódáilte.</string>\n  <string name=\"downloader_settings_no_apps_description\">Tiocfaidh aipeanna a íoslódáladh trí ReVanced Manager anseo.</string>\n  <string name=\"downloader_url\">URL Íoslódálaí</string>\n  <string name=\"downloader_add\">Cuir Íoslódálaí leis</string>\n  <string name=\"select_downloader_type_dialog_description\">Cuir íoslódálaithe nua leis ó URL nó ó chomhaid áitiúla</string>\n  <string name=\"local_downloaders_description\">Cuir íoslódálaithe leis ó stóráil áitiúil.</string>\n  <string name=\"remote_downloaders_description\">Cuir íoslódálaithe leis ó URL. Is féidir iad a nuashonrú go huathoibríoch.</string>\n  <string name=\"install_revanced_downloaders\">Suiteáil íoslódálaithe chun aipeanna a fháil go díreach laistigh de ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Suiteáil Íoslódálaithe ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Cealaigh suiteáil na n-íoslódálaithe?</string>\n  <string name=\"cancel_downloader_install_description\">Tá suiteáil íoslódálaithe ar siúl. Má fhágann tú anois, cuirfear an íoslódáil ar ceal.</string>\n  <string name=\"downloader_sources_unavailable_title\">Tá na híoslódálaithe seo ar iarraidh</string>\n  <string name=\"downloader_sources_unavailable_description\">Cliceáil ar an gcnaipe nuashonraithe chun é a dheisiú.</string>\n  <string name=\"downloader_update_failed\">Theip ar nuashonrú an íoslódálaí: %s</string>\n  <string name=\"downloader_replace_fail\">Theip ar iompórtáil an íoslódálaí: %s</string>\n  <string name=\"search_apps\">Cuardaigh aipeanna…</string>\n  <string name=\"loading_body\">Ag lódáil…</string>\n  <string name=\"downloading_patches\">Ag íoslódáil paistí…</string>\n  <string name=\"options\">Roghanna</string>\n  <string name=\"ok\">Ceart Go Leor</string>\n  <string name=\"yes\">Tá</string>\n  <string name=\"no\">Níl</string>\n  <string name=\"edit\">Cuir in eagar</string>\n  <string name=\"dialog_input_placeholder\">Luach</string>\n  <string name=\"reset\">Athshocrú</string>\n  <string name=\"share\">Roinn</string>\n  <string name=\"patch\">Paiste</string>\n  <string name=\"select_from_storage\">Roghnaigh as stóráil</string>\n  <string name=\"select_from_storage_description\">Roghnaigh comhad APK as stóráil ag úsáid roghnóir comhad</string>\n  <string name=\"suggested_version_info\">Leagan molta: %s</string>\n  <string name=\"type_anything\">Clóscríobh aon rud chun leanúint ar aghaidh</string>\n  <string name=\"search\">Cuardaigh paistí…</string>\n  <string name=\"apply\">Cuir i bhfeidhm</string>\n  <string name=\"help\">Cabhair</string>\n  <string name=\"back\">Ar ais</string>\n  <string name=\"warning\">Rabhadh</string>\n  <string name=\"add\">Cuir leis</string>\n  <string name=\"enable\">Cumasaigh</string>\n  <string name=\"disable\">Díchumasaigh</string>\n  <string name=\"close\">Dún</string>\n  <string name=\"clear\">Glan</string>\n  <string name=\"system\">Córas</string>\n  <string name=\"light\">Éadrom</string>\n  <string name=\"dark\">Dorcha</string>\n  <string name=\"appearance\">Dealramh</string>\n  <string name=\"networking\">Líonrú</string>\n  <string name=\"allow_metered_networks\">Ceadaigh líonraí méadraithe</string>\n  <string name=\"allow_metered_networks_description\">Ceadaíonn sé nuashonruithe uathoibríocha ar líonraí méadraithe.\nD’fhéadfadh an feidhmchlár rabhadh a thabhairt fós faoi líonraí méadraithe le haghaidh oibríochtaí láimhe.</string>\n  <string name=\"downloaded_apps\">Aipeanna íoslódáilte</string>\n  <string name=\"process_runtime\">Rith Paisteálaí i bpróiseas eile (turgnamhach)</string>\n  <string name=\"process_runtime_description\">Tá sé seo níos tapúla agus ligeann sé don Pháisteálaí níos mó cuimhne a úsáid</string>\n  <string name=\"process_runtime_memory_limit\">Teorainn cuimhne próisis Paisteálaí</string>\n  <string name=\"process_runtime_memory_limit_description\">An uasmhéid cuimhne is féidir leis an bpróiseas Paisteálaí a úsáid</string>\n  <string name=\"debug_logs_export\">Easpórtáil logaí dífhabhtaithe</string>\n  <string name=\"debug_logs_export_read_failed\">Theip ar na logaí a léamh (cód scoir %d)</string>\n  <string name=\"debug_logs_export_failed\">Theip ar logaí a easpórtáil</string>\n  <string name=\"debug_logs_export_success\">Logaí easpórtáilte</string>\n  <string name=\"api_url\">URL API</string>\n  <string name=\"api_url_description\">An API a úsáidtear chun comhaid riachtanacha a íoslódáil</string>\n  <string name=\"api_url_dialog_title\">Athraigh URL API</string>\n  <string name=\"api_url_dialog_description\">Athraigh URL API ReVanced Manager. Úsáideann ReVanced Manager an API chun paistí agus nuashonruithe a íoslódáil.</string>\n  <string name=\"api_url_dialog_warning\">Ceanglaíonn ReVanced Manager leis an API chun paistí agus nuashonruithe a íoslódáil. Bí cinnte go bhfuil muinín agat as.</string>\n  <string name=\"api_url_dialog_save\">Socraigh</string>\n  <string name=\"api_url_dialog_reset\">Athshocraigh URL API</string>\n  <string name=\"device\">Gléas</string>\n  <string name=\"device_android_version\">Leagan Android</string>\n  <string name=\"device_model\">Samhail</string>\n  <string name=\"device_architectures\">Ailtireachtaí LAP</string>\n  <string name=\"device_memory_limit\">Teorainneacha cuimhne</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Gnáth) - %2$dMB (Mór)</string>\n  <string name=\"patches_force_download\">Éigean-íoslódáil gach paiste</string>\n  <string name=\"patches_reset\">Athshocraigh paistí</string>\n  <string name=\"reset_onboarding\">Athshocraigh an clárú</string>\n  <string name=\"reset_onboarding_description\">Taispeáin an scáileán bordála ar an gcéad seoladh aip eile</string>\n  <string name=\"patching\">Paisteáil</string>\n  <string name=\"signing\">Síniú</string>\n  <string name=\"storage\">Stóráil</string>\n  <string name=\"no_patch_found\">Ní féidir aon paiste a aimsiú. Seiceáil do phaistí</string>\n  <string name=\"tab_apps\">Aipeanna</string>\n  <string name=\"tab_patches\">Paistí</string>\n  <string name=\"delete\">Scrios</string>\n  <string name=\"refresh\">Athnuaigh</string>\n  <string name=\"continue_anyways\">Lean ar aghaidh ar aon nós</string>\n  <string name=\"download_another_version\">Íoslódáil leagan eile</string>\n  <string name=\"download_app\">Íoslódáil aip</string>\n  <string name=\"download_apk\">Íoslódáil comhad APK</string>\n  <string name=\"patches_download_fail\">Theip ar íoslódáil paistí: %s</string>\n  <string name=\"api_not_working_title\">Tá seirbhís API síos faoi láthair</string>\n  <string name=\"api_not_working_description\">D\\'fhéadfadh tionchar a bheith ar roinnt gnéithe. Seiceáil do nasc nó URL API sna socruithe.</string>\n  <string name=\"patches_replace_fail\">Theip ar iompórtáil paistí: %s</string>\n  <string name=\"no_patched_apps_found\">Níor aimsíodh aon aipeanna paisteáilte</string>\n  <string name=\"no_patched_apps_description\">Níl aon aipeanna paisteáilte agat faoi láthair a bhfuil eolas againn orthu. Athraigh é sin trí do chéad aip a phaisteáil!</string>\n  <string name=\"patched_apps_section_title\">Aipeanna paisteáilte</string>\n  <string name=\"patchable_apps_section_title\">Aipeanna is féidir a phaisteáil</string>\n  <string name=\"no_patches_found\">Níor aimsíodh aon paistí</string>\n  <string name=\"no_patches_description\">Níl aon paistí agat fós. Cuir paistí leis trí tapáil ar an gcnaipe thíos!</string>\n  <string name=\"tap_on_patches\">Beartaigh ar na paistí chun tuilleadh eolais a fháil fúthu</string>\n  <string name=\"patches_selected\">%s roghnaithe</string>\n  <string name=\"incompatible_patches\">Paistí neamh-chomhoiriúnacha</string>\n  <string name=\"universal_patches\">Paistí uilíoch</string>\n  <string name=\"patch_selection_reset_toast\">Athshocraíodh roghnú paiste agus roghanna chuig na réamhshocruithe molta</string>\n  <string name=\"patch_options_reset_toast\">Athshocraíodh roghanna paiste</string>\n  <string name=\"non_suggested_version_warning_title\">Leagan neamh-mholta</string>\n  <string name=\"non_suggested_version_warning_description\">Ní hionann leagan an aip atá roghnaithe agat agus an leagan molta.\nÚsáid an leagan molta: %s\n\nChun leanúint ar aghaidh ar aon nós, díchumasaigh \\\"Éiligh leagan molta den aip\\\" sna socruithe ardleibhéil.</string>\n  <string name=\"selection_warning_title\">Stop a chur le húsáid réamhshocruithe?</string>\n  <string name=\"selection_warning_description\">Moltar an rogha agus na roghanna paiste réamhshocraithe a úsáid. D’fhéadfadh fadhbanna gan choinne a bheith mar thoradh ar iad a athrú.\n\nNí mór duit \\\"Ceadaigh athrú rogha agus roghanna paiste\\\" a chasadh air sna socruithe ardleibhéil sula ndéanann tú paistí a athrú.</string>\n  <string name=\"universal_patch_warning_description\">Tá úsáid níos ginearálta ag paistí uilíocha agus ní oibríonn siad chomh hiontaofa le paistí atá dírithe ar aipeanna sonracha. D’fhéadfadh fadhbanna teacht ort agus tú á n-úsáid.\n\nNí mór duit \\\"Ceadaigh paistí uilíocha a úsáid\\\" a chasadh air sna socruithe ardleibhéil sula n-úsáideann tú paistí uilíocha.</string>\n  <string name=\"this_version\">An leagan seo</string>\n  <string name=\"universal\">Aon aip</string>\n  <string name=\"search_patches\">Cuardaigh paistí</string>\n  <string name=\"app_version_not_compatible\">Níl an paiste seo comhoiriúnach leis an leagan den aip roghnaithe (%1$s)\n\nNíl sé comhoiriúnach ach leis an leagan(acha) seo a leanas: %2$s</string>\n  <string name=\"continue_with_version\">An leanfaidh tú ar aghaidh leis an leagan seo?</string>\n  <string name=\"version_not_compatible\">Níl gach paiste comhoiriúnach leis an leagan seo (%s). An bhfuil tú ag iarraidh leanúint ar aghaidh ar aon nós?</string>\n  <string name=\"download_application\">Íoslódáil an feidhmchlár?</string>\n  <string name=\"app_not_installed\">Níl an aip a roghnaigh tú suiteáilte. An bhfuil tú ag iarraidh é a íoslódáil?</string>\n  <string name=\"failed_to_load_apk\">Theip ar an APK a luchtú</string>\n  <string name=\"split_apk_not_supported\">Ní féidir paistí a dhéanamh ar APKanna scoilte</string>\n  <string name=\"loading\">Ag lódáil…</string>\n  <string name=\"not_installed\">Gan suiteáilte</string>\n  <string name=\"installed\">Suiteáilte</string>\n  <string name=\"app_info\">Eolas aipe</string>\n  <string name=\"uninstall\">Díshuiteáil</string>\n  <string name=\"unpatch\">Dí-paistigh</string>\n  <string name=\"repatch\">Ath-paistigh</string>\n  <string name=\"install_type\">Cineál suiteála</string>\n  <string name=\"package_name\">Ainm an phacáiste</string>\n  <string name=\"original_package_name\">Ainm bunaidh an phacáiste</string>\n  <string name=\"applied_patches\">Paistí curtha i bhfeidhm</string>\n  <string name=\"view_applied_patches\">Féach ar phaistí curtha i bhfeidhm</string>\n  <string name=\"default_install\">Réamhshocraithe</string>\n  <string name=\"mount_install\">Gléas</string>\n  <string name=\"mounted\">Gléasta</string>\n  <string name=\"not_mounted\">Gan gléasta</string>\n  <string name=\"mount\">Gléas</string>\n  <string name=\"unmount\">Díghléas</string>\n  <string name=\"failed_to_mount\">Theip ar an ngléas: %s</string>\n  <string name=\"failed_to_unmount\">Theip ar an díghléas: %s</string>\n  <string name=\"unpatch_app\">Díphaistigh an aip?</string>\n  <string name=\"unpatch_description\">An bhfuil tú cinnte gur mhaith leat an aip seo a dhíphaistigh?</string>\n  <string name=\"downloader_invalid_version\">Níor fuair an íoslódálaí an leagan ceart</string>\n  <string name=\"downloader_app_not_found\">Níor aimsigh an íoslódálaí an aip</string>\n  <string name=\"downloader_error\">Earráid íoslódálaí: %s</string>\n  <string name=\"no_downloaders_installed\">Níl aon íoslódálaithe aipeanna suiteáilte!</string>\n  <string name=\"no_downloaders_trusted\">Níl muinín curtha in aon íoslódálaithe aipeanna! Seiceáil do shocruithe le do thoil.</string>\n  <string name=\"already_patched\">Paistithe cheana féin</string>\n  <string name=\"patch_selector_sheet_filter_title\">Scagaire</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Comhoiriúnacht</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Pacáistí</string>\n  <string name=\"patch_selector_sheet_actions_title\">Gníomhartha</string>\n  <string name=\"restore_default_selection\">Athchóirigh an rogha réamhshocraithe</string>\n  <string name=\"deselect_all\">Díroghnaigh gach rud</string>\n  <string name=\"invert_selection\">Inbhéartaigh an rogha</string>\n  <string name=\"deselect_all_except\">Díroghnaigh gach rud seachas %s</string>\n  <string name=\"scope_dialog_title\">Cuir i bhfeidhm ar</string>\n  <string name=\"scope_all_patches\">Gach paiste</string>\n  <string name=\"scope_bundle_patches\">%s amháin</string>\n  <string name=\"string_option_menu_description\">Tuilleadh roghanna</string>\n  <string name=\"option_preset_custom_value\">Luach saincheaptha</string>\n  <string name=\"path_selector\">Roghnaigh ó stóráil</string>\n  <string name=\"path_selector_parent_dir\">Fillteán roimhe seo</string>\n  <string name=\"path_selector_dirs\">Fillteáin</string>\n  <string name=\"path_selector_files\">Comhaid</string>\n  <string name=\"show_password_field\">Taispeáin pasfhocal</string>\n  <string name=\"hide_password_field\">Folaigh pasfhocal</string>\n  <string name=\"installer\">Suiteálaí</string>\n  <string name=\"install_app\">Suiteáil</string>\n  <string name=\"install_app_success\">Aip suiteáilte</string>\n  <string name=\"install_app_fail\">Theip ar an aip a shuiteáil: %s</string>\n  <string name=\"reinstall_app_fail\">Theip ar an aip a athshuiteáil: %s</string>\n  <string name=\"uninstall_app_fail\">Theip ar an aip a dhíshuiteáil: %s</string>\n  <string name=\"open_app\">Oscail</string>\n  <string name=\"save_apk\">Sábháil APK</string>\n  <string name=\"save_apk_success\">APK Sábháilte</string>\n  <string name=\"sign_fail\">Theip ar an APK a shíniú: %s</string>\n  <string name=\"save_logs\">Sábháil logaí</string>\n  <string name=\"save_as_file\">Sábháil chuig comhaid</string>\n  <string name=\"export_patcher_logs\">Easpórtáil logaí paistí</string>\n  <string name=\"save_logs_success\">Logaí sábháilte</string>\n  <string name=\"downloader_activity_dialog_body\">Teastaíonn idirghníomhú úsáideora chun dul ar aghaidh leis an íoslódálaí seo.</string>\n  <string name=\"select_install_type\">Roghnaigh cineál suiteála</string>\n  <string name=\"patcher_step_group_preparing\">Ag ullmhú</string>\n  <string name=\"patcher_step_load_patches\">Luchtaigh paistí</string>\n  <string name=\"patcher_step_unpack\">Ullmhaigh an paisteálaí</string>\n  <string name=\"patcher_step_group_patching\">Ag paisteáil</string>\n  <string name=\"patcher_step_group_saving\">Ag sábháil</string>\n  <string name=\"patcher_step_write_patched\">Scríobh comhad APK paistithe</string>\n  <string name=\"patcher_step_sign_apk\">Sínigh comhad APK paistithe</string>\n  <string name=\"patcher_notification_title\">Paisteáil ar siúl…</string>\n  <string name=\"patcher_notification_text\">Tapáil chun filleadh ar an bpaisteálaí</string>\n  <string name=\"patcher_stop_confirm_title\">Stop paisteálaí</string>\n  <string name=\"patcher_stop_confirm_description\">An bhfuil tú cinnte gur mhaith leat an próiseas paisteála a stopadh?</string>\n  <string name=\"patcher_install_in_progress\">Tá an tsuiteáil ar siúl. Fan, le do thoil.</string>\n  <string name=\"execute_patches\">Forghníomhaigh paistí</string>\n  <string name=\"executing_patch\">Forghníomhaigh %s</string>\n  <string name=\"failed_to_execute_patch\">Theip ar %s a fhorghníomhú</string>\n  <string name=\"step_completed\">críochnaithe</string>\n  <string name=\"step_failed\">theip</string>\n  <string name=\"step_running\">ag rith</string>\n  <string name=\"step_waiting\">ag fanacht</string>\n  <string name=\"expand_content\">leathnú</string>\n  <string name=\"collapse_content\">laghdú</string>\n  <string name=\"drag_handle\">athordú</string>\n  <string name=\"more\">Tuilleadh</string>\n  <string name=\"less\">Níos lú</string>\n  <string name=\"continue_\">Lean ar aghaidh</string>\n  <string name=\"dismiss\">Díbhe</string>\n  <string name=\"view_announcement\">Amharc ar fhógra</string>\n  <string name=\"permanent_dismiss\">Ná taispeáin seo arís</string>\n  <string name=\"donate\">Tabhair Síntiús</string>\n  <string name=\"website\">Suíomh Gréasáin</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Teagmháil</string>\n  <string name=\"license\">Ceadúnas</string>\n  <string name=\"source\">Foinse</string>\n  <string name=\"repository\">Stór</string>\n  <string name=\"bundle_information_by_author\">Le %1$s</string>\n  <string name=\"version\">Leagan</string>\n  <string name=\"version_compatibility_warning\">B’fhéidir nach bhfuil an leagan roghnaithe comhoiriúnach leis na paistí roghnaithe</string>\n  <string name=\"submit_feedback\">Cuir saincheist nó aiseolas isteach</string>\n  <string name=\"submit_feedback_description\">Cabhraigh linn an feidhmchlár seo a fheabhsú</string>\n  <string name=\"developer_options\">Roghanna forbróra</string>\n  <string name=\"developer_options_description\">Roghanna le haghaidh fabhtanna a dhífhabhtú</string>\n  <string name=\"patches_update_success\">Nuashonrú rathúil</string>\n  <string name=\"patches_update_unavailable\">Níl aon nuashonrú ar fáil</string>\n  <string name=\"view_patches\">Féach ar phaistí</string>\n  <string name=\"patches_view_any_version\">Aon leagan</string>\n  <string name=\"patches_view_any_package\">Aon phacáiste</string>\n  <string name=\"patches_delete_single_dialog_description\">An bhfuil tú cinnte gur mhaith leat \\\"%s\\\" a scriosadh?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">An bhfuil tú cinnte gur mhaith leat na paistí roghnaithe a scriosadh?</string>\n  <string name=\"announcements\">Fógraí</string>\n  <string name=\"archive\">Cartlann</string>\n  <string name=\"about_revanced_manager\">Maidir le ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">Is feidhmchlár Android é ReVanced Manager a úsáideann ReVanced Patcher chun aipeanna Android a phaisteáil. Ligeann sé duit aipeanna a íoslódáil agus a phaisteáil le paistí saincheaptha, agus an próiseas paisteála a bhainistiú.</string>\n  <string name=\"developer_options_taps\">%d sconna fágtha</string>\n  <string name=\"developer_options_enabled\">Roghanna forbróra cumasaithe</string>\n  <string name=\"developer_options_already_enabled\">Tá roghanna forbróra cumasaithe cheana féin</string>\n  <string name=\"update_available\">Tá nuashonrú ar fáil</string>\n  <string name=\"current_version\">Leagan reatha: %s</string>\n  <string name=\"new_version\">Leagan nua: %s</string>\n  <string name=\"ready_to_install_update\">Réidh chun nuashonrú a shuiteáil</string>\n  <string name=\"update_completed\">Nuashonrú suiteáilte</string>\n  <string name=\"install_update_manager_failed\">Theip ar an nuashonrú a shuiteáil</string>\n  <string name=\"manual_update_check\">Seiceáil le haghaidh nuashonruithe</string>\n  <string name=\"view_update\">Féach ar an nuashonrú</string>\n  <string name=\"manual_update_check_description\">Seiceáil de láimh le haghaidh nuashonruithe</string>\n  <string name=\"update_checking_manager\">Seiceáil le haghaidh nuashonruithe ar sheoladh</string>\n  <string name=\"update_checking_manager_description\">Seiceáil le haghaidh leaganacha nua de ReVanced Manager nuair a thosaíonn an feidhmchlár</string>\n  <string name=\"update_checking_downloader\">Seiceáil le haghaidh nuashonruithe ar Íoslódálaithe ReVanced nuair a seoltar é</string>\n  <string name=\"update_checking_downloader_description\">Seiceáil le haghaidh nuashonruithe ar Íoslódálaithe ReVanced suiteáilte nuair a thosaíonn an feidhmchlár</string>\n  <string name=\"manager_prereleases\">Úsáid réamh-eisiúintí</string>\n  <string name=\"manager_prereleases_description\">Bain úsáid as leaganacha réamh-eisiúna de ReVanced Manager</string>\n  <string name=\"prereleases_warning\">D\\'fhéadfadh leaganacha réamheisiúna a bheith éagobhsaí agus fabhtanna a bheith iontu. D\\'fhéadfá teacht ar thuairteanna, caillteanas sonraí, nó saincheisteanna gan choinne eile. Ná cumasaigh é seo ach amháin má tá tú sásta leis na rioscaí seo.</string>\n  <string name=\"changelog\">Féach ar an loga athraithe</string>\n  <string name=\"changelog_loading\">Ag luchtú log athraithe</string>\n  <string name=\"changelog_download_fail\">Theip ar log athraithe a íoslódáil: %s</string>\n  <string name=\"changelog_description\">Féach ar na hathruithe is déanaí sa nuashonrú seo</string>\n  <string name=\"battery_optimization_notification\">Ní mór optamaithe ceallraí a mhúchadh chun go n-oibreoidh ReVanced Manager i gceart sa chúlra. Cliceáil anseo chun optamaithe a mhúchadh.</string>\n  <string name=\"installing_manager_update\">Ag suiteáil nuashonrú…</string>\n  <string name=\"downloading_manager_update\">Ag íoslódáil nuashonrú…</string>\n  <string name=\"download_manager_failed\">Theip ar an nuashonrú a íoslódáil: %s</string>\n  <string name=\"cancel\">Cealaigh</string>\n  <string name=\"save\">Sábháil</string>\n  <string name=\"save_with_count\">Sábháil (%1$s)</string>\n  <string name=\"update\">Nuashonraigh</string>\n  <string name=\"empty\">Folamh</string>\n  <string name=\"installing_message\">Beartaigh ar <b>Nuashonraigh</b> nuair a spreagtar thú.\nDúnfaidh ReVanced Manager nuair a bheidh sé ag nuashonrú.</string>\n  <string name=\"no_changelogs_found\">Níor aimsíodh aon logaí athraithe</string>\n  <string name=\"just_now\">Díreach anois</string>\n  <string name=\"minutes_ago\">%sn ó shin</string>\n  <string name=\"hours_ago\">%su ó shin</string>\n  <string name=\"days_ago\">%sl ó shin</string>\n  <string name=\"invalid_date\">Dáta neamhbhailí</string>\n  <string name=\"disable_battery_optimization\">Díchumasaigh optamú ceallraí</string>\n  <string name=\"input_dialog_value_invalid\">Luach neamhbhailí</string>\n  <string name=\"option_required\">Teastaíonn an rogha seo</string>\n  <string name=\"required_options_screen\">Roghanna riachtanacha</string>\n  <string name=\"failed_to_check_updates\">Theip ar sheiceáil le haghaidh nuashonruithe: %s</string>\n  <string name=\"no_update_available\">Níl aon nuashonrú ar fáil</string>\n  <string name=\"no_announcements_found\">Ní bhfuarthas aon fhógraí</string>\n  <string name=\"update_check\">Ag seiceáil le haghaidh nuashonruithe…</string>\n  <string name=\"dismiss_temporary\">Ní anois</string>\n  <string name=\"update_available_dialog_description\">Tá leagan nua de ReVanced Manager (%s) ar fáil.</string>\n  <string name=\"failed_to_download_update\">Theip ar an nuashonrú a íoslódáil: %s</string>\n  <string name=\"download\">Íoslódáil</string>\n  <string name=\"download_confirmation_metered\">Tá tú ar nasc méadraithe faoi láthair, agus d\\'fhéadfadh táillí sonraí ón soláthraí seirbhíse a bheith i bhfeidhm.\n\nAn dteastaíonn uait leanúint ar aghaidh fós?</string>\n  <string name=\"download_update_confirmation\">Íoslódáil nuashonrú?</string>\n  <string name=\"no_contributors_found\">Níor aimsíodh aon rannpháirtí</string>\n  <string name=\"select\">Roghnaigh</string>\n  <string name=\"select_deselect_all\">Roghnaigh nó díroghnaigh gach ceann</string>\n  <string name=\"select_patches_type_dialog_description\">Cuir paistí nua leis ó URL nó ó chomhaid áitiúla</string>\n  <string name=\"local_patches_description\">Cuir paistí leis ó stóráil áitiúil.</string>\n  <string name=\"remote_patches_description\">Cuir paistí leis ó URL. Is féidir paistí a nuashonrú go huathoibríoch.</string>\n  <string name=\"recommended\">Molta</string>\n  <string name=\"installation_failed_dialog_title\">Theip ar an tsuiteáil</string>\n  <string name=\"installation_cancelled_dialog_title\">Suiteáil curtha ar ceal</string>\n  <string name=\"installation_blocked_dialog_title\">Suiteáil blocáilte</string>\n  <string name=\"installation_conflict_dialog_title\">Coimhlint suiteála</string>\n  <string name=\"installation_incompatible_dialog_title\">Suiteáil neamh-chomhoiriúnach</string>\n  <string name=\"installation_invalid_dialog_title\">Suiteáil neamhbhailí</string>\n  <string name=\"installation_storage_issue_dialog_title\">Gan dóthain stórála</string>\n  <string name=\"installation_timeout_dialog_title\">Theip ar an tsuiteáil in am</string>\n  <string name=\"installation_failed_description\">Theip ar an tsuiteáil de bharr cúis anaithnid. Bain triail eile as?</string>\n  <string name=\"installation_aborted_description\">Cuireadh an tsuiteáil ar ceal de láimh. Bain triail eile as?</string>\n  <string name=\"installation_blocked_description\">Blocáladh an tsuiteáil. Athbhreithnigh do shocruithe slándála gléis agus bain triail eile as.</string>\n  <string name=\"installation_conflict_description\">Chuir suiteáil atá ann cheana den aip cosc ar an tsuiteáil. Díshuiteáil an aip suiteáilte agus bain triail eile as?</string>\n  <string name=\"installation_incompatible_description\">Níl an aip comhoiriúnach leis an ngléas seo. Úsáid APK atá comhoiriúnach leis an ngléas seo agus bain triail eile as.</string>\n  <string name=\"installation_invalid_description\">Tá an aip neamhbhailí. Díshuiteáil an aip agus bain triail eile as?</string>\n  <string name=\"installation_storage_issue_description\">Níorbh fhéidir an aip a shuiteáil mar gheall ar easpa stórála. Glan spás éigin agus bain triail eile as.</string>\n  <string name=\"installation_timeout_description\">Thóg an tsuiteáil rófhada. Bain triail eile as?</string>\n  <string name=\"reinstall\">Athshuiteáil</string>\n  <string name=\"show\">Taispeáin</string>\n  <string name=\"debugging\">Dífhabhtú</string>\n  <string name=\"about_device\">Maidir leis an ngléas</string>\n  <string name=\"enter_url\">Iontráil URL</string>\n  <string name=\"next\">Ar Aghaidh</string>\n  <string name=\"auto_update\">Nuashonrú uathoibríoch</string>\n  <string name=\"add_patches\">Cuir paistí leis</string>\n  <string name=\"auto_update_description\">Nuashonraigh go huathoibríoch nuair a bhíonn leagan nua ar fáil</string>\n  <string name=\"patches_prereleases\">Úsáid réamh-eisiúintí</string>\n  <string name=\"patches_prereleases_description\">Úsáid leaganacha réamh-eisiúna de %s</string>\n  <string name=\"patches_url\">URL na bPaistí</string>\n  <string name=\"incompatible_patches_dialog\">Níl na paistí seo comhoiriúnach leis an leagan aip roghnaithe (%1$s).\n\nCliceáil ar na paistí chun tuilleadh sonraí a fheiceáil.</string>\n  <string name=\"incompatible_patch\">Paiste neamh-chomhoiriúnach</string>\n  <string name=\"any_version\">Aon</string>\n  <string name=\"never_show_again\">Ná taispeáin arís riamh</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Taispeáin teachtaireacht nuashonraithe ar sheoladh</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Taispeáin fógra aníos nuair a bhíonn nuashonrú nua ar fáil ar sheoladh</string>\n  <string name=\"failed_to_import_keystore\">Theip ar an stóras eochair a iompórtáil</string>\n  <string name=\"export\">Easpórtáil</string>\n  <string name=\"confirm\">Deimhnigh</string>\n  <string name=\"new_announcement\">Fógra nua:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d paiste</item>\n    <item quantity=\"two\">%d paistí</item>\n    <item quantity=\"few\">%d paistí</item>\n    <item quantity=\"many\">%d paistí</item>\n    <item quantity=\"other\">%d paistí</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Rith %d paiste</item>\n    <item quantity=\"two\">Rith %d paistÍ</item>\n    <item quantity=\"few\">Rith %d paistÍ</item>\n    <item quantity=\"many\">Rith %d paistÍ</item>\n    <item quantity=\"other\">Rith %d paistÍ</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d roghnaithe</item>\n    <item quantity=\"two\">%d roghnaithe</item>\n    <item quantity=\"few\">%d roghnaithe</item>\n    <item quantity=\"many\">%d roghnaithe</item>\n    <item quantity=\"other\">%d roghnaithe</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-gl-rES/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">Parcheador</string>\n  <string name=\"onboarding_welcome_to\">Benvido a</string>\n  <string name=\"onboarding_welcome_back\">Ola! É o novo</string>\n  <string name=\"onboarding_apps_subtitle\">Podes seleccionar unha aplicación para parchear agora ou facelo máis tarde</string>\n  <string name=\"onboarding_updates_subtitle\">Configura as actualizacións automáticas para manter ReVanced Manager e os parches actualizados</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager conectarase a %s para descargar as versións iniciais se o teu dispositivo está conectado a internet.</string>\n  <string name=\"retry\">Reintentar</string>\n  <string name=\"onboarding_skip\">Omitir por agora</string>\n  <string name=\"onboarding_recommended_version\">Versión recomendada: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Omitir permisos?</string>\n  <string name=\"onboarding_permissions_skip_description\">Sen os permisos necesarios, algunhas funcións poden non funcionar correctamente. Podes concedelos máis tarde na configuración da aplicación.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Omitir de todos os xeitos</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager necesita algúns permisos para funcionar correctamente</string>\n  <string name=\"permission_install_apps\">Instalar aplicacións descoñecidas</string>\n  <string name=\"permission_install_apps_description\">Necesario para instalar aplicacións parcheadas</string>\n  <string name=\"permission_notifications\">Notificacións</string>\n  <string name=\"permission_battery\">Optimización da batería</string>\n  <string name=\"permission_battery_description\">Evita que o parcheado sexa interrompido en segundo plano</string>\n  <string name=\"permission_grant\">Conceder</string>\n  <string name=\"downloader_host_permission_label\">Servidor de descarga de ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Utilízase para controlar o acceso aos descargadores de ReVanced Manager. Só ReVanced Manager ten isto.</string>\n  <string name=\"fab_patch_app\">Parchear unha aplicación</string>\n  <string name=\"fab_add_patches\">Engadir parches</string>\n  <string name=\"new_downloader_notification\">Hai novos descargadores dispoñibles. Fai clic aquí para configuralos.</string>\n  <string name=\"patches_not_downloaded\">Os parches non se descargaron.</string>\n  <string name=\"app_source_dialog_option_auto_description\">Usar a aplicación instalada, logo o APK descargado, logo os descargadores dispoñibles</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Non se atopou ningunha aplicación compatible nin descargadores dispoñibles</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">As aplicacións montadas non se poden parchear de novo sen acceso root</string>\n  <string name=\"patch_selector_item\">Seleccionar parches</string>\n  <string name=\"patch_selector_item_description\">%d parches seleccionados</string>\n  <string name=\"patch_selection_changed_warning\">A selección de parches cambiouse</string>\n  <string name=\"apk_source_selector_item\">Seleccionar fonte do APK</string>\n  <string name=\"apk_source_auto\">Automático</string>\n  <string name=\"apk_source_auto_installed\">Automático · Usando o APK instalado</string>\n  <string name=\"apk_source_auto_downloaded\">Automático · Usando o APK descargado</string>\n  <string name=\"apk_source_auto_downloader\">Automático · Usando descargadores dispoñibles</string>\n  <string name=\"apk_source_auto_storage\">Automático · Seleccionar desde o almacenamento</string>\n  <string name=\"apk_source_downloaded\">Xa descargado</string>\n  <string name=\"auto_updates_dialog_description\">Queres que ReVanced Manager comprobe periodicamente as actualizacións dos seguintes compoñentes?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Parches de ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Descargadores</string>\n  <string name=\"auto_updates_dialog_note\">Estes axustes pódense cambiar máis tarde.\n\n    ReVanced Manager conectarase a %s para descargar as versións iniciais se o teu dispositivo está conectado a internet.</string>\n  <string name=\"announcements_filter_tag\">Filtrar por etiqueta</string>\n  <string name=\"announcements_show_archived\">Mostrar arquivados</string>\n  <string name=\"updates_description\">Comprobar actualizacións e ver o rexistro de cambios</string>\n  <string name=\"downloads_description\">Descargadores e aplicacións descargadas</string>\n  <string name=\"safeguards_toggled_warning\">As salvagardas cambiaron o seu estado.</string>\n  <string name=\"about_app_name\">Acerca de %1$s</string>\n  <string name=\"search_languages\">Buscar idiomas…</string>\n  <string name=\"keystore\">Almacén de claves</string>\n  <string name=\"patches_selections\">Seleccións de parches</string>\n  <string name=\"select_bundle_for_import\">Seleccionar paquete para importar</string>\n  <string name=\"select_bundle_for_export\">Seleccionar paquete para exportar</string>\n  <string name=\"patch_selection_packages\">Aplicacións con seleccións gardadas</string>\n  <string name=\"patch_selection_entries\">Total de parches seleccionados</string>\n  <string name=\"reset_configuration\">Restablecer configuración</string>\n  <string name=\"reset_patch_selection\">Seleccións de parches</string>\n  <string name=\"reset_patch_options\">Opcións de parche</string>\n  <string name=\"downloaders\">Descargadores</string>\n  <string name=\"downloader_prereleases\">Usar versións preliminares</string>\n  <string name=\"downloader_prereleases_description\">Usar versións preliminares do descargador principal</string>\n  <string name=\"downloader_state_loaded\">Cargado</string>\n  <string name=\"downloader_state_failed\">Erro ao cargar. Prema para obter máis detalles</string>\n  <string name=\"downloader_state_missing\">Falta</string>\n  <string name=\"downloader_delete_apps_title\">Eliminar aplicacións seleccionadas</string>\n  <string name=\"downloader_delete_apps_description\">Está seguro de que quere eliminar as aplicacións seleccionadas?</string>\n  <string name=\"downloader_delete_single_description\">Seguro que queres eliminar \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps_description\">As aplicacións descargadas a través de ReVanced Manager aparecerán aquí.</string>\n  <string name=\"downloader_url\">URL do descargador</string>\n  <string name=\"downloader_add\">Engadir descargador</string>\n  <string name=\"select_downloader_type_dialog_description\">Engadir novos descargadores desde URL ou ficheiros locais</string>\n  <string name=\"local_downloaders_description\">Engadir descargadores desde o almacenamento local.</string>\n  <string name=\"remote_downloaders_description\">Engadir descargadores desde URL. Pódense actualizar automaticamente.</string>\n  <string name=\"install_revanced_downloaders\">Instala descargadores para obter aplicacións directamente dentro de ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Instalar descargadores de ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Cancelar instalación de descargadores?</string>\n  <string name=\"cancel_downloader_install_description\">Unha instalación de descargadores está en progreso. Se saes agora, a descarga cancelarase.</string>\n  <string name=\"downloader_sources_unavailable_title\">Faltan estes descargadores</string>\n  <string name=\"downloader_sources_unavailable_description\">Fai clic no botón de actualizar para corrixilo.</string>\n  <string name=\"downloader_update_failed\">Fallou a actualización do descargador: %s</string>\n  <string name=\"downloader_replace_fail\">Fallou a importación do descargador: %s</string>\n  <string name=\"select_from_storage_description\">Selecciona un ficheiro APK do almacenamento usando o selector de ficheiros</string>\n  <string name=\"enable\">Activar</string>\n  <string name=\"disable\">Desactivar</string>\n  <string name=\"process_runtime_memory_limit_description\">A cantidade máxima de memoria que o proceso Patcher pode usar</string>\n  <string name=\"reset_onboarding\">Restablecer a benvida</string>\n  <string name=\"reset_onboarding_description\">Mostrar a pantalla de benvida no seguinte inicio da aplicación</string>\n  <string name=\"api_not_working_title\">O servizo da API non está dispoñible actualmente</string>\n  <string name=\"api_not_working_description\">Algunhas funcionalidades poden verse afectadas. Comprobe a súa conexión ou o URL da API na configuración.</string>\n  <string name=\"no_patched_apps_found\">Non se atoparon aplicacións parcheadas</string>\n  <string name=\"no_patched_apps_description\">Actualmente non tes ningunha aplicación parcheada que coñezamos. Cambia iso parcheando a túa primeira aplicación!</string>\n  <string name=\"patched_apps_section_title\">Aplicacións parcheadas</string>\n  <string name=\"patchable_apps_section_title\">Aplicacións que se poden parchear</string>\n  <string name=\"no_patches_found\">Non se atoparon parches</string>\n  <string name=\"no_patches_description\">Aínda non tes parches. Engade parches tocando o botón de abaixo!</string>\n  <string name=\"split_apk_not_supported\">Os APKs divididos non se poden parchear</string>\n  <string name=\"no_downloaders_installed\">Non hai descargadores de aplicacións instalados!</string>\n  <string name=\"no_downloaders_trusted\">Non se confiou en ningún descargador de aplicacións! Comproba a túa configuración.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paquetes</string>\n  <string name=\"patch_selector_sheet_actions_title\">Accións</string>\n  <string name=\"restore_default_selection\">Restaurar selección predeterminada</string>\n  <string name=\"deselect_all\">Desmarcar todo</string>\n  <string name=\"invert_selection\">Inverter selección</string>\n  <string name=\"deselect_all_except\">Desmarcar todo excepto %s</string>\n  <string name=\"scope_dialog_title\">Aplicar a</string>\n  <string name=\"scope_all_patches\">Todos os parches</string>\n  <string name=\"scope_bundle_patches\">Só %s</string>\n  <string name=\"save_as_file\">Gardar en ficheiros</string>\n  <string name=\"export_patcher_logs\">Exportar rexistros do parcheador</string>\n  <string name=\"save_logs_success\">Rexistros gardados</string>\n  <string name=\"downloader_activity_dialog_body\">Requírese a interacción do usuario para continuar con este descargador.</string>\n  <string name=\"patcher_step_unpack\">Preparar parcheador</string>\n  <string name=\"view_announcement\">Ver anuncio</string>\n  <string name=\"license\">Licenza</string>\n  <string name=\"source\">Orixe</string>\n  <string name=\"repository\">Repositorio</string>\n  <string name=\"bundle_information_by_author\">Por %1$s</string>\n  <string name=\"version_compatibility_warning\">A versión seleccionada pode ser incompatible cos parches seleccionados</string>\n  <string name=\"announcements\">Anuncios</string>\n  <string name=\"archive\">Arquivo</string>\n  <string name=\"view_update\">Ver actualización</string>\n  <string name=\"update_checking_downloader\">Comprobar actualizacións dos descargadores de ReVanced no inicio</string>\n  <string name=\"update_checking_downloader_description\">Comprobar actualizacións dos descargadores de ReVanced instalados cando a aplicación se inicia</string>\n  <string name=\"prereleases_warning\">As versións preliminares poden ser inestables e conter erros. Podes experimentar fallos, perda de datos ou outros problemas inesperados. Activa isto só se te sentes cómodo con estes riscos.</string>\n  <string name=\"changelog\">Ver rexistro de cambios</string>\n  <string name=\"no_announcements_found\">Non se atoparon anuncios</string>\n  <string name=\"new_announcement\">Novo anuncio:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d parche</item>\n    <item quantity=\"other\">%d parches</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Executar %d parche</item>\n    <item quantity=\"other\">Executar %d parches</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d seleccionado</item>\n    <item quantity=\"other\">%d seleccionados</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-gu-rIN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">પૅચર</string>\n  <string name=\"onboarding_welcome_to\">માં આપનું સ્વાગત છે</string>\n  <string name=\"onboarding_welcome_back\">હાય! તે નવું છે</string>\n  <string name=\"onboarding_apps_subtitle\">તમે અત્યારે જ પેચ કરવા માટે કોઈ એપ્લિકેશન પસંદ કરી શકો છો અથવા પછીથી કરી શકો છો</string>\n  <string name=\"onboarding_apps_network_error\">નેટવર્ક અનુપલબ્ધ અથવા અસ્થિર હોવાને કારણે પેચ લોડ કરી શકાયા નથી. સ્થિર નેટવર્કથી કનેક્ટ થાઓ અને ફરી પ્રયાસ કરો.</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager અને પેચને અપ ટુ ડેટ રાખવા માટે સ્વચાલિત અપડેટ્સ ગોઠવો</string>\n  <string name=\"banner_sources_not_downloaded_description\">સેટઅપ દરમિયાન પેચ અને ડાઉનલોડર ડાઉનલોડ કરી શકાયા નથી. તેમને ડાઉનલોડ કરવા માટે અપડેટ પર ટેપ કરો.</string>\n  <string name=\"onboarding_updates_note\">જો તમારું ઉપકરણ ઇન્ટરનેટથી કનેક્ટેડ હોય તો પ્રારંભિક સંસ્કરણો ડાઉનલોડ કરવા માટે ReVanced Manager %s થી કનેક્ટ થશે.</string>\n  <string name=\"retry\">ફરીથી પ્રયાસ કરો</string>\n  <string name=\"onboarding_skip\">અત્યારે છોડો</string>\n  <string name=\"onboarding_recommended_version\">ભલામણ કરેલ સંસ્કરણ: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">પરવાનગીઓ છોડવી?</string>\n  <string name=\"onboarding_permissions_skip_description\">જરૂરી પરવાનગીઓ વિના, કેટલીક સુવિધાઓ યોગ્ય રીતે કામ ન કરી શકે. તમે તેમને પછીથી ઍપ સેટિંગ્સમાં આપી શકો છો.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">કોઈપણ રીતે છોડો</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager ને યોગ્ય રીતે કામ કરવા માટે થોડી પરવાનગીઓની જરૂર છે</string>\n  <string name=\"permission_install_apps\">અજાણી ઍપ ઇન્સ્ટોલ કરો</string>\n  <string name=\"permission_install_apps_description\">પેચ કરેલી એપ્લિકેશનો ઇન્સ્ટોલ કરવા માટે જરૂરી છે</string>\n  <string name=\"permission_notifications\">સૂચનાઓ</string>\n  <string name=\"permission_notifications_description\">બેકગ્રાઉન્ડમાં અવિરત પેચિંગની પરવાનગી આપે છે</string>\n  <string name=\"permission_battery\">બૅટરી ઑપ્ટિમાઇઝેશન</string>\n  <string name=\"permission_battery_description\">પૃષ્ઠભૂમિમાં પેચિંગને વિક્ષેપિત થતું અટકાવે છે</string>\n  <string name=\"permission_grant\">મંજૂર કરો</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager ડાઉનલોડર હોસ્ટ</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager ડાઉનલોડર્સને ઍક્સેસ કરવા માટે વપરાય છે. ફક્ત ReVanced Manager પાસે આ છે.</string>\n  <string name=\"fab_patch_app\">ઍપને પેચ કરો</string>\n  <string name=\"fab_add_patches\">પેચ ઉમેરો</string>\n  <string name=\"new_downloader_notification\">નવા ડાઉનલોડર(ઓ) ઉપલબ્ધ છે. તેમને ગોઠવવા માટે અહીં ક્લિક કરો.</string>\n  <string name=\"patches_not_downloaded\">પેચ ડાઉનલોડ થયા નથી.</string>\n  <string name=\"app_source_dialog_option_auto_description\">ઇન્સ્ટોલ કરેલી એપ્લિકેશનનો ઉપયોગ કરો, પછી ડાઉનલોડ કરેલ APK, પછી ઉપલબ્ધ ડાઉનલોડર્સ</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">કોઈ સુસંગત એપ્લિકેશન અથવા ડાઉનલોડર ઉપલબ્ધ નથી</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">માઉન્ટ કરેલી એપ્સને રૂટ એક્સેસ વિના ફરીથી પેચ કરી શકાતી નથી</string>\n  <string name=\"patch_selector_item\">પેચ પસંદ કરો</string>\n  <string name=\"patch_selector_item_description\">%d પેચ પસંદ કર્યા</string>\n  <string name=\"patch_selection_changed_warning\">પેચની પસંદગી બદલવામાં આવી છે</string>\n  <string name=\"apk_source_selector_item\">APK સ્રોત પસંદ કરો</string>\n  <string name=\"apk_source_auto\">સ્વચાલિત</string>\n  <string name=\"apk_source_auto_installed\">સ્વચાલિત · ઇન્સ્ટોલ કરેલા APK નો ઉપયોગ કરીને</string>\n  <string name=\"apk_source_auto_downloaded\">સ્વચાલિત · ડાઉનલોડ કરેલા APK નો ઉપયોગ કરીને</string>\n  <string name=\"apk_source_auto_downloader\">આપમેળે · ઉપલબ્ધ ડાઉનલોડર્સનો ઉપયોગ કરીને</string>\n  <string name=\"apk_source_auto_storage\">આપમેળે · સ્ટોરેજમાંથી પસંદ કરો</string>\n  <string name=\"apk_source_downloaded\">પહેલેથી જ ડાઉનલોડ થયેલ છે</string>\n  <string name=\"auto_updates_dialog_description\">શું તમે ReVanced Manager ને નીચેના ઘટકો માટે અપડેટ્સ માટે સમયાંતરે તપાસ કરવા માંગો છો?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced પેચિસ</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: ડાઉનલોડર</string>\n  <string name=\"auto_updates_dialog_note\">આ સેટિંગ્સ પછીથી બદલી શકાય છે.\n\n    જો તમારું ઉપકરણ ઇન્ટરનેટથી કનેક્ટેડ હોય તો પ્રારંભિક સંસ્કરણો ડાઉનલોડ કરવા માટે ReVanced Manager %s થી કનેક્ટ થશે.</string>\n  <string name=\"announcements_filter_tag\">ટૅગ દ્વારા ફિલ્ટર કરો</string>\n  <string name=\"announcements_show_archived\">આર્કાઇવ કરેલા બતાવો</string>\n  <string name=\"updates_description\">અપડેટ્સ માટે તપાસો અને ચેન્જલોગ જુઓ</string>\n  <string name=\"downloads_description\">ડાઉનલોડર્સ અને ડાઉનલોડ કરેલી એપ્લિકેશનો</string>\n  <string name=\"safeguards_toggled_warning\">સેફગાર્ડ્સ ટૉગલ કરવામાં આવ્યા છે</string>\n  <string name=\"about_app_name\">%1$s વિશે</string>\n  <string name=\"search_languages\">ભાષાઓ શોધો…</string>\n  <string name=\"keystore\">કીસ્ટોર</string>\n  <string name=\"patches_selections\">પેચની પસંદગીઓ</string>\n  <string name=\"select_bundle_for_import\">આયાત કરવા માટે બંડલ પસંદ કરો</string>\n  <string name=\"select_bundle_for_export\">નિકાસ કરવા માટે બંડલ પસંદ કરો</string>\n  <string name=\"patch_selection_packages\">સાચવેલી પસંદગીઓવાળી ઍપ્સ</string>\n  <string name=\"patch_selection_entries\">કુલ પસંદ કરેલા પેચ</string>\n  <string name=\"reset_configuration\">ગોઠવણી રીસેટ કરો</string>\n  <string name=\"reset_patch_selection\">પેચ પસંદગીઓ</string>\n  <string name=\"reset_patch_options\">પેચ વિકલ્પો</string>\n  <string name=\"downloaders\">ડાઉનલોડર્સ</string>\n  <string name=\"downloader_prereleases\">પૂર્વ-રિલીઝનો ઉપયોગ કરો</string>\n  <string name=\"downloader_prereleases_description\">મુખ્ય ડાઉનલોડરના પૂર્વ-રિલીઝ સંસ્કરણોનો ઉપયોગ કરો</string>\n  <string name=\"downloader_state_loaded\">લોડ થયું</string>\n  <string name=\"downloader_state_failed\">લોડ કરવામાં નિષ્ફળ. વધુ વિગતો માટે ક્લિક કરો</string>\n  <string name=\"downloader_state_missing\">ગુમ થયેલ</string>\n  <string name=\"downloader_delete_apps_title\">પસંદ કરેલી એપ્લિકેશનો કાઢી નાખો</string>\n  <string name=\"downloader_delete_apps_description\">શું તમે પસંદ કરેલી એપ્લિકેશનો કાઢી નાખવા માંગો છો?</string>\n  <string name=\"downloader_delete_single_description\">શું તમે \\\"%s\\\" ને કાઢી નાખવા માંગો છો તેની ખાતરી છે?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager દ્વારા ડાઉનલોડ થયેલી ઍપ્સ અહીં દેખાશે.</string>\n  <string name=\"downloader_url\">ડાઉનલોડર URL</string>\n  <string name=\"downloader_add\">ડાઉનલોડર ઉમેરો</string>\n  <string name=\"select_downloader_type_dialog_description\">URL અથવા સ્થાનિક ફાઇલોમાંથી નવા ડાઉનલોડર્સ ઉમેરો</string>\n  <string name=\"local_downloaders_description\">સ્થાનિક સ્ટોરેજમાંથી ડાઉનલોડર્સ ઉમેરો.</string>\n  <string name=\"remote_downloaders_description\">URL માંથી ડાઉનલોડર્સ ઉમેરો. આપમેળે અપડેટ કરી શકાય છે.</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager માં સીધી ઍપ્સ મેળવવા માટે ડાઉનલોડર્સ ઇન્સ્ટોલ કરો.</string>\n  <string name=\"install_revanced_downloader\">ReVanced ડાઉનલોડર્સ ઇન્સ્ટોલ કરો</string>\n  <string name=\"cancel_downloader_install_title\">ડાઉનલોડર્સ ઇન્સ્ટોલ રદ કરવું?</string>\n  <string name=\"cancel_downloader_install_description\">ડાઉનલોડર્સ ઇન્સ્ટોલ પ્રગતિમાં છે. જો તમે અત્યારે છોડી દેશો, તો ડાઉનલોડ રદ થઈ જશે.</string>\n  <string name=\"downloader_sources_unavailable_title\">આ ડાઉનલોડર્સ ગુમ થયેલ છે</string>\n  <string name=\"downloader_sources_unavailable_description\">તેને ઠીક કરવા માટે અપડેટ બટન પર ક્લિક કરો.</string>\n  <string name=\"downloader_update_failed\">ડાઉનલોડર અપડેટ કરવામાં નિષ્ફળ: %s</string>\n  <string name=\"downloader_replace_fail\">ડાઉનલોડર આયાત કરવામાં નિષ્ફળ: %s</string>\n  <string name=\"select_from_storage_description\">ફાઇલ પિકરનો ઉપયોગ કરીને સ્ટોરેજમાંથી APK ફાઇલ પસંદ કરો</string>\n  <string name=\"enable\">સક્ષમ કરો</string>\n  <string name=\"disable\">અક્ષમ કરો</string>\n  <string name=\"process_runtime_memory_limit_description\">પેચર પ્રક્રિયા ઉપયોગ કરી શકે તેવી મેમરીની મહત્તમ માત્રા</string>\n  <string name=\"reset_onboarding\">ઑનબોર્ડિંગ રીસેટ કરો</string>\n  <string name=\"reset_onboarding_description\">આગલી ઍપ લૉન્ચ પર ઑનબોર્ડિંગ સ્ક્રીન બતાવો</string>\n  <string name=\"api_not_working_title\">API સેવા હાલમાં બંધ છે.</string>\n  <string name=\"api_not_working_description\">કેટલીક સુવિધાઓ પ્રભાવિત થઈ શકે છે. સેટિંગ્સમાં તમારું કનેક્શન અથવા API URL તપાસો.</string>\n  <string name=\"no_patched_apps_found\">કોઈ પેચ કરેલી ઍપ મળી નથી</string>\n  <string name=\"no_patched_apps_description\">અમારી જાણકારી મુજબ તમારી પાસે હાલમાં કોઈ પેચ કરેલી ઍપ નથી. તમારી પ્રથમ ઍપને પેચ કરીને તેમાં ફેરફાર કરો!</string>\n  <string name=\"patched_apps_section_title\">પેચ કરેલી એપ્સ</string>\n  <string name=\"patchable_apps_section_title\">પેચ કરી શકાય તેવી એપ્સ</string>\n  <string name=\"no_patches_found\">કોઈ પેચ મળ્યા નથી</string>\n  <string name=\"no_patches_description\">તમારી પાસે હજુ સુધી કોઈ પેચ નથી. નીચેના બટનને ટૅપ કરીને પેચ ઉમેરો!</string>\n  <string name=\"split_apk_not_supported\">સ્પ્લિટ APKs પેચ કરી શકાતા નથી</string>\n  <string name=\"no_downloaders_installed\">કોઈ ઍપ ડાઉનલોડર્સ ઇન્સ્ટોલ કરેલા નથી!</string>\n  <string name=\"no_downloaders_trusted\">કોઈ ઍપ ડાઉનલોડર્સ પર વિશ્વાસ કરવામાં આવ્યો નથી! કૃપા કરીને તમારા સેટિંગ્સ તપાસો.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">પેકેજો</string>\n  <string name=\"patch_selector_sheet_actions_title\">ક્રિયાઓ</string>\n  <string name=\"restore_default_selection\">ડિફૉલ્ટ પસંદગી પુનઃસ્થાપિત કરો</string>\n  <string name=\"deselect_all\">બધું નાપસંદ કરો</string>\n  <string name=\"invert_selection\">પસંદગી ઉલટાવો</string>\n  <string name=\"deselect_all_except\">%s સિવાય બધું અનસિલેક્ટ કરો</string>\n  <string name=\"scope_dialog_title\">આના પર લાગુ કરો</string>\n  <string name=\"scope_all_patches\">બધા પૅચ</string>\n  <string name=\"scope_bundle_patches\">ફક્ત %s</string>\n  <string name=\"save_as_file\">ફાઇલોમાં સાચવો</string>\n  <string name=\"export_patcher_logs\">પેચર લૉગ્સ નિકાસ કરો</string>\n  <string name=\"save_logs_success\">લૉગ્સ સાચવ્યા</string>\n  <string name=\"downloader_activity_dialog_body\">આ ડાઉનલોડર સાથે આગળ વધવા માટે વપરાશકર્તાની ક્રિયાપ્રતિક્રિયા જરૂરી છે.</string>\n  <string name=\"patcher_step_unpack\">પેચર તૈયાર કરો</string>\n  <string name=\"view_announcement\">જાહેરાત જુઓ</string>\n  <string name=\"license\">લાઇસન્સ</string>\n  <string name=\"source\">સ્રોત</string>\n  <string name=\"repository\">રીપોઝીટરી</string>\n  <string name=\"bundle_information_by_author\">%1$s દ્વારા</string>\n  <string name=\"version_compatibility_warning\">પસંદ કરેલ વર્ઝન પસંદ કરેલ પેચિસ સાથે અસંગત હોઈ શકે છે</string>\n  <string name=\"announcements\">જાહેરાતો</string>\n  <string name=\"archive\">આર્કાઇવ</string>\n  <string name=\"view_update\">અપડેટ જુઓ</string>\n  <string name=\"update_checking_downloader\">લૉન્ચ પર ReVanced ડાઉનલોડર્સ અપડેટ્સ માટે તપાસો</string>\n  <string name=\"update_checking_downloader_description\">એપ્લિકેશન શરૂ થાય ત્યારે ઇન્સ્ટોલ કરેલા ReVanced ડાઉનલોડર્સના અપડેટ્સ માટે તપાસો</string>\n  <string name=\"prereleases_warning\">પ્રી-રીલીઝ સંસ્કરણો અસ્થિર હોઈ શકે છે અને તેમાં બગ્સ હોઈ શકે છે. તમને ક્રેશ, ડેટા ગુમ થવા અથવા અન્ય અનપેક્ષિત સમસ્યાઓનો અનુભવ થઈ શકે છે. જો તમે આ જોખમોથી પરિચિત હોવ તો જ આને સક્ષમ કરો.</string>\n  <string name=\"changelog\">ચેન્જલોગ જુઓ</string>\n  <string name=\"no_announcements_found\">કોઈ ઘોષણાઓ મળી નથી</string>\n  <string name=\"new_announcement\">નવી ઘોષણા:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d પેચ</item>\n    <item quantity=\"other\">%d પેચ</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d પેચ એક્ઝિક્યુટ કરો</item>\n    <item quantity=\"other\">%d પેચ એક્ઝિક્યુટ કરો</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d પસંદ કરેલ</item>\n    <item quantity=\"other\">%d પસંદ કરેલ</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hi-rIN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">पैचर</string>\n  <string name=\"onboarding_welcome_to\">में आपका स्वागत है</string>\n  <string name=\"onboarding_welcome_back\">नमस्ते! यह नया है</string>\n  <string name=\"onboarding_apps_subtitle\">आप अभी पैच करने के लिए एक ऐप चुन सकते हैं या इसे बाद में कर सकते हैं।</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager और पैच को अप-टू-डेट रखने के लिए स्वचालित अपडेट कॉन्फ़िगर करें।</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager प्रारंभिक संस्करण डाउनलोड करने के लिए %s से कनेक्ट होगा यदि आपका डिवाइस इंटरनेट से कनेक्ट है।</string>\n  <string name=\"retry\">पुनः प्रयास करें</string>\n  <string name=\"onboarding_skip\">अभी के लिए छोड़ें</string>\n  <string name=\"onboarding_recommended_version\">अनुशंसित संस्करण: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">अनुमतियाँ छोड़ें?</string>\n  <string name=\"onboarding_permissions_skip_description\">आवश्यक अनुमतियों के बिना, कुछ सुविधाएँ सही ढंग से काम नहीं कर सकती हैं। आप उन्हें बाद में ऐप सेटिंग में प्रदान कर सकते हैं।</string>\n  <string name=\"onboarding_permissions_skip_anyway\">फिर भी छोड़ें</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager को ठीक से काम करने के लिए कुछ अनुमतियों की आवश्यकता है</string>\n  <string name=\"permission_install_apps\">अज्ञात ऐप स्थापित करें</string>\n  <string name=\"permission_install_apps_description\">पैच किए गए एप्लिकेशन स्थापित करने के लिए आवश्यक है</string>\n  <string name=\"permission_notifications\">सूचनाएं</string>\n  <string name=\"permission_battery\">बैटरी ऑप्टिमाइज़ेशन</string>\n  <string name=\"permission_battery_description\">पृष्ठभूमि में पैचिंग को बाधित होने से रोकता है</string>\n  <string name=\"permission_grant\">अनुमति दें</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager डाउनलोडर होस्ट</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager डाउनलोडर तक पहुंच को नियंत्रित करने के लिए उपयोग किया जाता है। यह केवल ReVanced Manager के पास है।</string>\n  <string name=\"select_app\">कोई ऐप चुने</string>\n  <string name=\"fab_patch_app\">एक ऐप पैच करें</string>\n  <string name=\"fab_add_patches\">पैच जोड़ें</string>\n  <string name=\"new_downloader_notification\">नए डाउनलोडर उपलब्ध हैं। उन्हें कॉन्फ़िगर करने के लिए यहां क्लिक करें।</string>\n  <string name=\"patches_not_downloaded\">पैच डाउनलोड नहीं किए गए हैं।</string>\n  <string name=\"app_source_dialog_option_auto_description\">इंस्टॉल किए गए ऐप का उपयोग करें, फिर डाउनलोड किए गए APK, फिर उपलब्ध डाउनलोडर</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">कोई संगत ऐप या डाउनलोडर उपलब्ध नहीं है</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">माउंट किए गए ऐप को रूट एक्सेस के बिना फिर से पैच नहीं किया जा सकता</string>\n  <string name=\"patch_selector_item\">पैच चुनें</string>\n  <string name=\"patch_selector_item_description\">%d पैच चुने गए</string>\n  <string name=\"patch_selection_changed_warning\">पैच का चयन बदल दिया गया है</string>\n  <string name=\"apk_source_selector_item\">APK स्रोत चुनें</string>\n  <string name=\"apk_source_auto\">ऑटो</string>\n  <string name=\"apk_source_auto_installed\">ऑटो · इंस्टॉल किए गए APK का उपयोग कर रहा है</string>\n  <string name=\"apk_source_auto_downloaded\">ऑटो · डाउनलोड किए गए APK का उपयोग कर रहा है</string>\n  <string name=\"apk_source_auto_downloader\">स्वचालित · उपलब्ध डाउनलोडर का उपयोग करके</string>\n  <string name=\"apk_source_auto_storage\">स्वचालित · स्टोरेज से चुनें</string>\n  <string name=\"apk_source_downloaded\">पहले ही डाउनलोड किया गया</string>\n  <string name=\"auto_updates_dialog_description\">क्या आप चाहते हैं कि ReVanced Manager निम्नलिखित घटकों के लिए समय-समय पर अपडेट की जाँच करे?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced पैच</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: डाउनलोडर</string>\n  <string name=\"auto_updates_dialog_note\">ये सेटिंग्स बाद में बदली जा सकती हैं।\n\n    ReVanced Manager प्रारंभिक संस्करण डाउनलोड करने के लिए %s से कनेक्ट होगा यदि आपका डिवाइस इंटरनेट से कनेक्ट है।</string>\n  <string name=\"announcements_filter_tag\">टैग द्वारा फ़िल्टर करें</string>\n  <string name=\"announcements_show_archived\">संग्रहीत दिखाएँ</string>\n  <string name=\"updates_description\">अपडेट के लिए जाँच करें और चैंजलॉग देखें</string>\n  <string name=\"downloads_description\">डाउनलोडर और डाउनलोड किए गए ऐप</string>\n  <string name=\"safeguards_toggled_warning\">सुरक्षा उपाय बदल दिए गए हैं</string>\n  <string name=\"about_app_name\">%1$s के बारे में</string>\n  <string name=\"search_languages\">भाषाएँ खोजें…</string>\n  <string name=\"keystore\">कीस्टोर</string>\n  <string name=\"patches_selections\">पैच चयन</string>\n  <string name=\"select_bundle_for_import\">आयात करने के लिए बंडल चुनें</string>\n  <string name=\"select_bundle_for_export\">निर्यात करने के लिए बंडल चुनें</string>\n  <string name=\"patch_selection_packages\">सहेजे गए चयन वाले ऐप</string>\n  <string name=\"patch_selection_entries\">कुल चयनित पैच</string>\n  <string name=\"reset_configuration\">कॉन्फ़िगरेशन रीसेट करें</string>\n  <string name=\"reset_patch_selection\">पैच चयन</string>\n  <string name=\"reset_patch_options\">पैच विकल्प</string>\n  <string name=\"downloaders\">डाउनलोडर</string>\n  <string name=\"downloader_prereleases\">प्री-रिलीज़ का उपयोग करें</string>\n  <string name=\"downloader_prereleases_description\">मुख्य डाउनलोडर के प्री-रिलीज़ संस्करणों का उपयोग करें</string>\n  <string name=\"downloader_state_loaded\">लोड किया गया</string>\n  <string name=\"downloader_state_failed\">लोड करने में विफल। अधिक विवरण के लिए क्लिक करें</string>\n  <string name=\"downloader_state_missing\">लापता</string>\n  <string name=\"downloader_delete_apps_title\">चयनित ऐप हटाएँ</string>\n  <string name=\"downloader_delete_apps_description\">क्या आप निश्चित रूप से चयनित ऐप हटाना चाहते हैं?</string>\n  <string name=\"downloader_delete_single_description\">क्या आप वाकई \\\"%s\\\" हटाना चाहते हैं?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager के माध्यम से डाउनलोड किए गए ऐप यहां दिखाई देंगे।</string>\n  <string name=\"downloader_url\">डाउनलोडर यूआरएल</string>\n  <string name=\"downloader_add\">डाउनलोडर जोड़ें</string>\n  <string name=\"select_downloader_type_dialog_description\">यूआरएल या स्थानीय फ़ाइलों से नए डाउनलोडर जोड़ें</string>\n  <string name=\"local_downloaders_description\">स्थानीय स्टोरेज से डाउनलोडर जोड़ें।</string>\n  <string name=\"remote_downloaders_description\">यूआरएल से डाउनलोडर जोड़ें। यह स्वचालित रूप से अपडेट हो सकते हैं।</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager के भीतर सीधे ऐप प्राप्त करने के लिए डाउनलोडर स्थापित करें।</string>\n  <string name=\"install_revanced_downloader\">ReVanced डाउनलोडर स्थापित करें</string>\n  <string name=\"cancel_downloader_install_title\">डाउनलोडर इंस्टॉलेशन रद्द करें?</string>\n  <string name=\"cancel_downloader_install_description\">एक डाउनलोडर इंस्टॉलेशन प्रगति पर है। यदि आप अभी छोड़ते हैं, तो डाउनलोड रद्द कर दिया जाएगा।</string>\n  <string name=\"downloader_sources_unavailable_title\">ये डाउनलोडर लापता हैं</string>\n  <string name=\"downloader_sources_unavailable_description\">इसे ठीक करने के लिए अपडेट बटन पर क्लिक करें।</string>\n  <string name=\"downloader_update_failed\">डाउनलोडर अपडेट करने में विफल: %s</string>\n  <string name=\"downloader_replace_fail\">डाउनलोडर आयात करने में विफल: %s</string>\n  <string name=\"select_from_storage_description\">फाइल पिकर का उपयोग करके स्टोरेज से एक APK फ़ाइल चुनें</string>\n  <string name=\"enable\">सक्षम करें</string>\n  <string name=\"disable\">अक्षम करें</string>\n  <string name=\"system\">सिस्टम</string>\n  <string name=\"process_runtime_memory_limit_description\">पैचर प्रक्रिया द्वारा उपयोग की जा सकने वाली अधिकतम मेमोरी</string>\n  <string name=\"reset_onboarding\">ऑनबोर्डिंग रीसेट करें</string>\n  <string name=\"reset_onboarding_description\">अगले ऐप लॉन्च पर ऑनबोर्डिंग स्क्रीन दिखाएं</string>\n  <string name=\"api_not_working_title\">एपीआई सेवा वर्तमान में बंद है</string>\n  <string name=\"api_not_working_description\">कुछ सुविधाएँ प्रभावित हो सकती हैं। अपना कनेक्शन या सेटिंग्स में एपीआई यूआरएल जांचें।</string>\n  <string name=\"no_patched_apps_found\">कोई पैच किए गए ऐप नहीं मिले</string>\n  <string name=\"no_patched_apps_description\">हमारे पास आपकी कोई पैच किया गया ऐप नहीं है। अपना पहला ऐप पैच करके इसे बदलें!</string>\n  <string name=\"patched_apps_section_title\">पैच किए गए ऐप</string>\n  <string name=\"patchable_apps_section_title\">पैच किए जा सकने वाले ऐप</string>\n  <string name=\"no_patches_found\">कोई पैच नहीं मिला</string>\n  <string name=\"no_patches_description\">आपके पास अभी तक कोई पैच नहीं है। नीचे दिए गए बटन पर टैप करके पैच जोड़ें!</string>\n  <string name=\"split_apk_not_supported\">स्प्लिट APKs को पैच नहीं किया जा सकता</string>\n  <string name=\"no_downloaders_installed\">कोई ऐप डाउनलोडर स्थापित नहीं है!</string>\n  <string name=\"no_downloaders_trusted\">किसी भी ऐप डाउनलोडर पर भरोसा नहीं किया गया है! कृपया अपनी सेटिंग जांचें।</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">पैकेजेस</string>\n  <string name=\"patch_selector_sheet_actions_title\">कार्रवाइयां</string>\n  <string name=\"restore_default_selection\">डिफ़ॉल्ट चयन पुनर्स्थापित करें</string>\n  <string name=\"deselect_all\">सभी का चयन रद्द करें</string>\n  <string name=\"invert_selection\">चयन उलटा करें</string>\n  <string name=\"deselect_all_except\">%s को छोड़कर सभी का चयन रद्द करें</string>\n  <string name=\"scope_dialog_title\">लागू करें</string>\n  <string name=\"scope_all_patches\">सभी पैच</string>\n  <string name=\"scope_bundle_patches\">केवल %s</string>\n  <string name=\"save_as_file\">फ़ाइलों में सहेजें</string>\n  <string name=\"export_patcher_logs\">पैचर लॉग निर्यात करें</string>\n  <string name=\"save_logs_success\">लॉग सहेजे गए</string>\n  <string name=\"downloader_activity_dialog_body\">इस डाउनलोडर के साथ आगे बढ़ने के लिए उपयोगकर्ता इंटरैक्शन आवश्यक है।</string>\n  <string name=\"patcher_step_unpack\">पैचर तैयार करें</string>\n  <string name=\"view_announcement\">घोषणा देखें</string>\n  <string name=\"license\">लाइसेंस</string>\n  <string name=\"source\">स्रोत</string>\n  <string name=\"repository\">रिपॉजिटरी</string>\n  <string name=\"bundle_information_by_author\">%1$s द्वारा</string>\n  <string name=\"version_compatibility_warning\">चयनित संस्करण चयनित पैच के साथ असंगत हो सकता है</string>\n  <string name=\"patches_view_any_version\">कोई भी वर्जिन</string>\n  <string name=\"announcements\">घोषणाएँ</string>\n  <string name=\"archive\">संग्रह</string>\n  <string name=\"view_update\">अपडेट देखें</string>\n  <string name=\"update_checking_downloader\">लॉन्च पर ReVanced डाउनलोडर अपडेट के लिए जाँच करें</string>\n  <string name=\"update_checking_downloader_description\">एप्लिकेशन शुरू होने पर स्थापित ReVanced डाउनलोडर के अपडेट के लिए जाँच करें</string>\n  <string name=\"prereleases_warning\">प्री-रिलीज़ संस्करण अस्थिर हो सकते हैं और उनमें बग हो सकते हैं। आपको क्रैश, डेटा हानि या अन्य अप्रत्याशित समस्याओं का अनुभव हो सकता है। इसे तभी सक्षम करें जब आप इन जोखिमों से सहज हों।</string>\n  <string name=\"changelog\">चैंजलॉग देखें</string>\n  <string name=\"no_announcements_found\">कोई घोषणाएँ नहीं मिलीं</string>\n  <string name=\"new_announcement\">नई घोषणा:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d पैच</item>\n    <item quantity=\"other\">%d पैच</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d पैच निष्पादित करें</item>\n    <item quantity=\"other\">%d पैच निष्पादित करें</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d चयनित</item>\n    <item quantity=\"other\">%d चयनित</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hr-rHR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Patcher</string>\n  <string name=\"patches\">Patchevi</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Manager</string>\n  <string name=\"onboarding_welcome_to\">Dobrodošli u</string>\n  <string name=\"onboarding_welcome_back\">Bok! Ovo je novi</string>\n  <string name=\"onboarding_apps_subtitle\">Aplikaciju na koju želite primijeniti patch možete odabrati sada ili kasnije</string>\n  <string name=\"onboarding_updates_subtitle\">Konfigurirajte automatska ažuriranja kako bi ReVanced Manager i patchevi ostali ažurni</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager će se povezati s %s kako bi preuzeo početne verzije ako je vaš uređaj spojen na internet.</string>\n  <string name=\"retry\">Pokušaj ponovno</string>\n  <string name=\"onboarding_skip\">Preskoči za sada</string>\n  <string name=\"onboarding_recommended_version\">Preporučena verzija: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Preskočiti dopuštenja?</string>\n  <string name=\"onboarding_permissions_skip_description\">Bez potrebnih dopuštenja, neke značajke možda neće ispravno raditi. Možete ih odobriti kasnije u postavkama aplikacije.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Svejedno preskoči</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager treba nekoliko dopuštenja za ispravan rad</string>\n  <string name=\"permission_install_apps\">Instaliraj nepoznate aplikacije</string>\n  <string name=\"permission_install_apps_description\">Potrebno za instaliranje aplikacija s patchevima</string>\n  <string name=\"permission_notifications\">Obavijesti</string>\n  <string name=\"permission_battery\">Optimizacija baterije</string>\n  <string name=\"permission_battery_description\">Sprječava prekid primjenjivanja patcheva u pozadini</string>\n  <string name=\"permission_grant\">Dopusti</string>\n  <string name=\"downloader_host_permission_label\">Poslužitelj za preuzimanje ReVanced Managera</string>\n  <string name=\"downloader_host_permission_description\">Koristi se za kontrolu pristupa preuzimateljima ReVanced Managera. Samo ReVanced Manager ima ovo.</string>\n  <string name=\"toast_copied_to_clipboard\">Kopirano!</string>\n  <string name=\"copy_to_clipboard\">Kopiraj u međuspremnik</string>\n  <string name=\"dashboard\">Upravljačka ploča</string>\n  <string name=\"settings\">Postavke</string>\n  <string name=\"select_app\">Odaberite aplikaciju</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d odabrano</string>\n  <string name=\"fab_patch_app\">Primijeni patch na aplikaciju</string>\n  <string name=\"fab_add_patches\">Dodaj patcheve</string>\n  <string name=\"new_downloader_notification\">Dostupni su novi preuzimatelji. Kliknite ovdje da biste ih konfigurirali.</string>\n  <string name=\"unsupported_architecture_warning\">Primjenjivanje patcheva na ovoj arhitekturi uređaja nije podržano i najvjerojatnije neće uspjeti.</string>\n  <string name=\"import_\">Uvezi</string>\n  <string name=\"import_patches\">Uvezi patcheve</string>\n  <string name=\"file_field_set\">Odabrano</string>\n  <string name=\"file_field_not_set\">Nije odabrano</string>\n  <string name=\"field_not_set\">Nije postavljeno</string>\n  <string name=\"patches_missing\">Nedostaje</string>\n  <string name=\"patches_error\">Greška</string>\n  <string name=\"patches_error_description\">Patchevi se nisu mogli učitati. Kliknite za prikaz pogreške</string>\n  <string name=\"patches_not_downloaded\">Patchevi nisu preuzeti.</string>\n  <string name=\"patches_name_default\">Patchevi</string>\n  <string name=\"patches_name_fallback\">Neimenovano</string>\n  <string name=\"android_11_bug_dialog_title\">Greška Androida 11</string>\n  <string name=\"app_source_dialog_option_auto\">Automatski</string>\n  <string name=\"app_source_dialog_option_auto_description\">Koristite instaliranu aplikaciju, zatim preuzeti APK, a zatim dostupne programe za preuzimanje</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Nije pronađena kompatibilna aplikacija ili preuzimatelj</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Na montirane aplikacije se ne mogu ponovno primijeniti patchevi bez root pristupa</string>\n  <string name=\"patch_selector_item\">Odaberi patcheve</string>\n  <string name=\"patch_selector_item_description\">%d patcheva odabrano</string>\n  <string name=\"patch_selection_changed_warning\">Odabir patcheva je promijenjen</string>\n  <string name=\"apk_source_selector_item\">Odaberi izvor APK-ova</string>\n  <string name=\"apk_source_auto\">Automatski</string>\n  <string name=\"apk_source_auto_installed\">Automatski · Pomoću instaliranog APK-a</string>\n  <string name=\"apk_source_auto_downloaded\">Automatski · Pomoću preuzetog APK-a</string>\n  <string name=\"apk_source_auto_downloader\">Automatski · Pomoću dostupnih preuzimatelja</string>\n  <string name=\"apk_source_auto_storage\">Automatski · Odabir iz pohrane</string>\n  <string name=\"apk_source_downloaded\">Već preuzeto</string>\n  <string name=\"auto_updates_dialog_description\">Želite li da ReVanced Manager povremeno provjerava ažuriranja za sljedeće komponente?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced patchevi</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Preuzimatelji</string>\n  <string name=\"auto_updates_dialog_note\">Ove postavke se mogu promijeniti kasnije.\n\n    ReVanced Manager će se povezati s %s kako bi preuzeo početne verzije ako je vaš uređaj spojen na internet.</string>\n  <string name=\"announcements_filter_tag\">Filtriraj po oznakama</string>\n  <string name=\"announcements_show_archived\">Prikaži arhivirano</string>\n  <string name=\"general\">Općenito</string>\n  <string name=\"updates_description\">Provjerite ažuriranja i pogledajte dnevnik promjena</string>\n  <string name=\"downloads_description\">Preuzimatelji i preuzete aplikacije</string>\n  <string name=\"safeguards_toggled_warning\">Mjere zaštite su promijenjene</string>\n  <string name=\"about\">O aplikaciji</string>\n  <string name=\"about_app_name\">O %1$s</string>\n  <string name=\"search_languages\">Pretraži jezike…</string>\n  <string name=\"keystore\">Keystore</string>\n  <string name=\"patches_selections\">Odabiri patcheva</string>\n  <string name=\"import_keystore_dialog_button\">Uvezi</string>\n  <string name=\"select_bundle_for_import\">Odaberite paket za uvoz</string>\n  <string name=\"select_bundle_for_export\">Odaberite paket za izvoz</string>\n  <string name=\"patch_selection_packages\">Aplikacije sa spremljenim odabirima</string>\n  <string name=\"patch_selection_entries\">Ukupno odabranih patcheva</string>\n  <string name=\"reset_configuration\">Ponovno postavi konfiguraciju</string>\n  <string name=\"reset_patch_selection\">Odabiri patcheva</string>\n  <string name=\"reset_patch_options\">Opcije patcha</string>\n  <string name=\"downloaders\">Preuzimatelji</string>\n  <string name=\"downloader_prereleases\">Koristi predizdanja</string>\n  <string name=\"downloader_prereleases_description\">Koristi predizdanja glavnog preuzimatelja</string>\n  <string name=\"downloader_state_loaded\">Učitano</string>\n  <string name=\"downloader_state_failed\">Učitavanje nije uspjelo. Kliknite za više detalja</string>\n  <string name=\"downloader_state_missing\">Nedostaje</string>\n  <string name=\"downloader_delete_apps_title\">Izbriši odabrane aplikacije</string>\n  <string name=\"downloader_delete_apps_description\">Jeste li sigurni da želite izbrisati odabrane aplikacije?</string>\n  <string name=\"downloader_delete_single_description\">Jeste li sigurni da želite izbrisati \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps_description\">Aplikacije preuzete putem ReVanced Managera pojavit će se ovdje.</string>\n  <string name=\"downloader_url\">URL preuzimatelja</string>\n  <string name=\"downloader_add\">Dodaj preuzimatelja</string>\n  <string name=\"select_downloader_type_dialog_description\">Dodajte nove preuzimatelje s URL-a ili lokalnih datoteka</string>\n  <string name=\"local_downloaders_description\">Dodajte preuzimatelje iz lokalne pohrane.</string>\n  <string name=\"remote_downloaders_description\">Dodajte preuzimatelje s URL-a. Mogu se automatski ažurirati.</string>\n  <string name=\"install_revanced_downloaders\">Instalirajte preuzimatelje kako biste aplikacije nabavili izravno unutar ReVanced Managera.</string>\n  <string name=\"install_revanced_downloader\">Instaliraj ReVanced preuzimatelje</string>\n  <string name=\"cancel_downloader_install_title\">Otkazati instalaciju preuzimatelja?</string>\n  <string name=\"cancel_downloader_install_description\">Instalacija preuzimatelja je u tijeku. Ako sada izađete, preuzimanje će biti otkazano.</string>\n  <string name=\"downloader_sources_unavailable_title\">Ovi preuzimatelji nedostaju</string>\n  <string name=\"downloader_sources_unavailable_description\">Kliknite na gumb za ažuriranje kako biste to popravili.</string>\n  <string name=\"downloader_update_failed\">Ažuriranje preuzimatelja nije uspjelo: %s</string>\n  <string name=\"downloader_replace_fail\">Uvoz preuzimatelja nije uspio: %s</string>\n  <string name=\"reset\">Ponovno postavi</string>\n  <string name=\"select_from_storage_description\">Odaberite APK datoteku iz pohrane pomoću alata za odabir datoteka</string>\n  <string name=\"enable\">Omogući</string>\n  <string name=\"disable\">Onemogući</string>\n  <string name=\"light\">Svijetlo</string>\n  <string name=\"process_runtime_memory_limit_description\">Maksimalna količina memorije koju proces Patcher može koristiti</string>\n  <string name=\"api_url_dialog_title\">Promijeni URL API-ja</string>\n  <string name=\"reset_onboarding\">Ponovno postavi uvodni zaslon</string>\n  <string name=\"reset_onboarding_description\">Prikaži uvodni zaslon pri sljedećem pokretanju aplikacije</string>\n  <string name=\"delete\">Izbriši</string>\n  <string name=\"api_not_working_title\">API usluga trenutačno nije dostupna</string>\n  <string name=\"api_not_working_description\">Neke značajke mogu biti pogođene. Provjerite vezu ili URL API-ja u postavkama.</string>\n  <string name=\"no_patched_apps_found\">Nisu pronađene aplikacije s patchevima</string>\n  <string name=\"no_patched_apps_description\">Trenutno nemate nijednu aplikaciju s patchevima za koju znamo. Promijenite to primjenjivanjem patcheva na svoju prvu aplikaciju!</string>\n  <string name=\"patched_apps_section_title\">Aplikacije s patchevima</string>\n  <string name=\"patchable_apps_section_title\">Aplikacije na koje se mogu primijeniti patchevi</string>\n  <string name=\"no_patches_found\">Nema pronađenih patcheva</string>\n  <string name=\"no_patches_description\">Još nemate nijednan patch. Dodajte patcheve klikom na gumb ispod!</string>\n  <string name=\"split_apk_not_supported\">Na podijeljene APK-ove se ne mogu primijeniti patchevi</string>\n  <string name=\"default_install\">Zadano</string>\n  <string name=\"no_downloaders_installed\">Nema instaliranih preuzimatelja aplikacija!</string>\n  <string name=\"no_downloaders_trusted\">Nijedan preuzimatelj aplikacija nije pouzdan! Provjerite svoje postavke.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paketi</string>\n  <string name=\"patch_selector_sheet_actions_title\">Radnje</string>\n  <string name=\"restore_default_selection\">Vrati zadani odabir</string>\n  <string name=\"deselect_all\">Odznači sve</string>\n  <string name=\"invert_selection\">Obrni odabir</string>\n  <string name=\"deselect_all_except\">Odznači sve osim %s</string>\n  <string name=\"scope_dialog_title\">Primijeni na</string>\n  <string name=\"scope_all_patches\">Svi patchevi</string>\n  <string name=\"scope_bundle_patches\">Samo %s</string>\n  <string name=\"save_as_file\">Spremi u datoteke</string>\n  <string name=\"export_patcher_logs\">Izvezi zapisnike patchera</string>\n  <string name=\"save_logs_success\">Zapisnici spremljeni</string>\n  <string name=\"downloader_activity_dialog_body\">Za nastavak rada s ovim preuzimateljem potrebna je interakcija korisnika.</string>\n  <string name=\"patcher_step_unpack\">Pripremi patcher</string>\n  <string name=\"continue_\">Nastavi</string>\n  <string name=\"dismiss\">Odbaci</string>\n  <string name=\"view_announcement\">Prikaži obavijest</string>\n  <string name=\"license\">Licenca</string>\n  <string name=\"source\">Izvor</string>\n  <string name=\"repository\">Repozitorij</string>\n  <string name=\"bundle_information_by_author\">Autor: %1$s</string>\n  <string name=\"version_compatibility_warning\">Odabrana verzija možda nije kompatibilna s odabranim patchevima</string>\n  <string name=\"announcements\">Obavijesti</string>\n  <string name=\"archive\">Arhiva</string>\n  <string name=\"view_update\">Prikaži ažuriranje</string>\n  <string name=\"update_checking_downloader\">Provjerite ažuriranja za ReVanced preuzimatelje prilikom pokretanja</string>\n  <string name=\"update_checking_downloader_description\">Provjerite ažuriranja za instalirane ReVanced preuzimatelje kada se aplikacija pokrene</string>\n  <string name=\"prereleases_warning\">Predizdanja mogu biti nestabilna i sadržavati greške. Može doći do rušenja aplikacije, gubitka podataka ili drugih neočekivanih problema. Omogućite ovo samo ako ste svjesni tih rizika.</string>\n  <string name=\"changelog\">Prikaži dnevnik promjena</string>\n  <string name=\"save\">Spremi</string>\n  <string name=\"no_announcements_found\">Nema pronađenih obavijesti</string>\n  <string name=\"export\">Izvezi</string>\n  <string name=\"new_announcement\">Nova obavijest:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d patch</item>\n    <item quantity=\"few\">%d patcha</item>\n    <item quantity=\"other\">%d patcheva</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Izvrši %d patch</item>\n    <item quantity=\"few\">Izvrši %d patcha</item>\n    <item quantity=\"other\">Izvrši %d patcheva</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d odabrana</item>\n    <item quantity=\"few\">%d odabrane</item>\n    <item quantity=\"other\">%d odabranih</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hu-rHU/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Javítóprogram</string>\n  <string name=\"patches\">Javítások</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Manager</string>\n  <string name=\"onboarding_welcome_to\">Üdvözöljük a</string>\n  <string name=\"onboarding_welcome_back\">Szia! Ez az új</string>\n  <string name=\"onboarding_apps_subtitle\">Most vagy később is kiválaszthatja a javítandó alkalmazást</string>\n  <string name=\"onboarding_apps_network_error\">Nem sikerült betölteni a javításokat, mert a hálózat nem elérhető vagy instabil. Csatlakozzon egy stabil hálózathoz, és próbálja újra.</string>\n  <string name=\"onboarding_updates_subtitle\">Konfigurálja az automatikus frissítéseket, hogy a ReVanced Manager és a javítások naprakészek maradjanak</string>\n  <string name=\"banner_sources_not_downloaded_description\">A javítások és letöltők nem tölthetők le a beállítás során. Koppintson a frissítésre a letöltésükhöz.</string>\n  <string name=\"onboarding_updates_note\">A ReVanced Manager csatlakozni fog a(z) %s-hez, hogy letöltse a kezdeti verziókat, amennyiben az eszköze csatlakozik az internethez.</string>\n  <string name=\"retry\">Újrapróbálkozás</string>\n  <string name=\"onboarding_skip\">Most kihagyom</string>\n  <string name=\"onboarding_recommended_version\">Ajánlott verzió: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Engedélyek kihagyása?</string>\n  <string name=\"onboarding_permissions_skip_description\">A szükséges engedélyek nélkül egyes funkciók nem működhetnek megfelelően. Később megadhatja őket az alkalmazásbeállításokban.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Akárhogy is kihagyom</string>\n  <string name=\"onboarding_permissions_subtitle\">A ReVanced Managernek néhány engedélyre van szüksége a megfelelő működéshez</string>\n  <string name=\"permission_install_apps\">Ismeretlen alkalmazások telepítése</string>\n  <string name=\"permission_install_apps_description\">Szükséges a javított alkalmazások telepítéséhez</string>\n  <string name=\"permission_notifications\">Értesítések</string>\n  <string name=\"permission_notifications_description\">Lehetővé teszi a zavartalan javítást a háttérben</string>\n  <string name=\"permission_battery\">Akkumulátor-optimalizálás</string>\n  <string name=\"permission_battery_description\">Megakadályozza a javítás megszakítását a háttérben</string>\n  <string name=\"permission_grant\">Megadás</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager letöltő gazdagép</string>\n  <string name=\"downloader_host_permission_description\">A ReVanced Manager letöltők hozzáférésének szabályozására szolgál. Csak a ReVanced Manager rendelkezik ezzel.</string>\n  <string name=\"toast_copied_to_clipboard\">Másolva!</string>\n  <string name=\"copy_to_clipboard\">Másolás vágólapra</string>\n  <string name=\"dashboard\">Vezérlőpult</string>\n  <string name=\"settings\">Beállítások</string>\n  <string name=\"select_app\">Válasszon alkalmazást</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d kiválasztva</string>\n  <string name=\"fab_patch_app\">Alkalmazás javítása</string>\n  <string name=\"fab_add_patches\">Javítások hozzáadása</string>\n  <string name=\"new_downloader_notification\">Új letöltő(k) érhető(k) el. Kattintson ide a konfigurálásukhoz.</string>\n  <string name=\"unsupported_architecture_warning\">A javítás ezen az eszközarchitektúrán nem támogatott, és valószínűleg sikertelen lesz.</string>\n  <string name=\"import_\">Importálás</string>\n  <string name=\"import_patches\">Javítások importálása</string>\n  <string name=\"file_field_set\">Kiválasztva</string>\n  <string name=\"file_field_not_set\">Nincs kiválasztva</string>\n  <string name=\"field_not_set\">Nincs beállítva</string>\n  <string name=\"patches_missing\">Hiányzik</string>\n  <string name=\"patches_error\">Hiba</string>\n  <string name=\"patches_error_description\">A javítások betöltése sikertelen. Kattintson a hibák megtekintéséhez.</string>\n  <string name=\"patches_not_downloaded\">A javítások nincsenek letöltve.</string>\n  <string name=\"patches_name_default\">Javítások</string>\n  <string name=\"patches_name_fallback\">Névtelen</string>\n  <string name=\"android_11_bug_dialog_title\">Android 11 hiba</string>\n  <string name=\"android_11_bug_dialog_description\">Az alkalmazástelepítési engedélyt előre meg kell adni, hogy elkerülhető legyen egy Android 11 rendszerhiba, amely negatívan befolyásolná a felhasználói élményt.</string>\n  <string name=\"no_network_toast\">Nincs elérhető internetkapcsolat</string>\n  <string name=\"selected_app_meta_any_version\">Bármely elérhető verzió</string>\n  <string name=\"app_source_dialog_title\">Forrás kiválasztása</string>\n  <string name=\"app_source_dialog_option_auto\">Automatikus</string>\n  <string name=\"app_source_dialog_option_auto_description\">Használja a telepített alkalmazást, majd a letöltött APK-t, majd az elérhető letöltőket</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Nincs kompatibilis alkalmazás vagy letöltő elérhető</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">A csatlakoztatott alkalmazások nem foltozhatók újra root hozzáférés nélkül</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">A(z) %s verzió nem egyezik a javasolt verzióval</string>\n  <string name=\"patch_item_description\">Alkalmazás javításának indítása</string>\n  <string name=\"patch_selector_item\">Javítások kiválasztása</string>\n  <string name=\"patch_selector_item_description\">%d javítás kiválasztva</string>\n  <string name=\"patch_selection_changed_warning\">A javítások kiválasztása megváltozott</string>\n  <string name=\"no_patches_selected\">Nincs kiválasztott javítás</string>\n  <string name=\"network_unavailable_warning\">Eszköze nincs csatlakozva az internethez. A letöltés később sikertelen lesz.</string>\n  <string name=\"network_metered_warning\">Jelenleg korlátozott adatforgalmú kapcsolaton van. Szolgáltatója adatforgalmi díjat számíthat fel.</string>\n  <string name=\"apk_source_selector_item\">APK forrás kiválasztása</string>\n  <string name=\"apk_source_auto\">Automatikus</string>\n  <string name=\"apk_source_auto_installed\">Automatikus · Telepített APK használata</string>\n  <string name=\"apk_source_auto_downloaded\">Automatikus · Letöltött APK használata</string>\n  <string name=\"apk_source_auto_downloader\">Automatikus · Elérhető letöltőket használva</string>\n  <string name=\"apk_source_auto_storage\">Automatikus · Kiválasztás tárolóból</string>\n  <string name=\"apk_source_downloader\">A(z) %s használata</string>\n  <string name=\"apk_source_installed\">Telepített APK használata</string>\n  <string name=\"apk_source_local\">Helyi APK fájl használata</string>\n  <string name=\"apk_source_downloaded\">Már letöltve</string>\n  <string name=\"legacy_import_failed\">A régi beállítások importálása sikertelen</string>\n  <string name=\"auto_updates_dialog_title\">Frissítések konfigurálása</string>\n  <string name=\"auto_updates_dialog_description\">Szeretné, hogy a ReVanced Manager rendszeresen ellenőrizze a következő komponensek frissítéseit?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced javítások</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Letöltők</string>\n  <string name=\"auto_updates_dialog_note\">Ezek a beállítások később módosíthatók.\n\n    A ReVanced Manager csatlakozni fog a(z) %s-hez, hogy letöltse a kezdeti verziókat, amennyiben az eszköze csatlakozik az internethez.</string>\n  <string name=\"announcements_filter_tag\">Szűrés címke szerint</string>\n  <string name=\"announcements_show_archived\">Archiváltak megjelenítése</string>\n  <string name=\"general\">Általános</string>\n  <string name=\"general_description\">Nyelv, téma, dinamikus szín</string>\n  <string name=\"updates\">Frissítések</string>\n  <string name=\"updates_description\">Frissítések keresése és változási napló megtekintése</string>\n  <string name=\"downloads\">Letöltések</string>\n  <string name=\"downloads_description\">Letöltők és letöltött alkalmazások</string>\n  <string name=\"import_export\">Importálás &amp; exportálás</string>\n  <string name=\"import_export_description\">Kulcstároló, javítási opciók és kiválasztás</string>\n  <string name=\"advanced\">Haladó</string>\n  <string name=\"advanced_description\">API URL, memóriakorlát, hibakeresés</string>\n  <string name=\"safeguards_toggled_warning\">A biztosítékok állapota megváltozott</string>\n  <string name=\"about\">Névjegy</string>\n  <string name=\"about_app_name\">A %1$s névjegye</string>\n  <string name=\"opensource_licenses\">Nyílt forráskódú licencek</string>\n  <string name=\"opensource_licenses_description\">Tekintse meg az alkalmazás elkészítéséhez használt összes könyvtárat</string>\n  <string name=\"contributors\">Közreműködők</string>\n  <string name=\"contributors_description\">Tekintse meg a ReVanced közreműködőit</string>\n  <string name=\"dynamic_color\">Dinamikus szín</string>\n  <string name=\"dynamic_color_description\">Színek adaptálása a háttérképhez</string>\n  <string name=\"pure_black_theme\">Tiszta fekete téma</string>\n  <string name=\"pure_black_theme_description\">Használjon tiszta fekete hátteret a sötét témához</string>\n  <string name=\"theme\">Téma</string>\n  <string name=\"theme_description\">Válasszon világos vagy sötét téma közül</string>\n  <string name=\"language\">Nyelv</string>\n  <string name=\"language_description\">Válassza ki az alkalmazás megjelenítési nyelvét</string>\n  <string name=\"language_system_default\">Rendszer alapértelmezett</string>\n  <string name=\"search_languages\">Nyelvek keresése…</string>\n  <string name=\"safeguards\">Biztonsági intézkedések</string>\n  <string name=\"patch_compat_check\">Verziókompatibilitási ellenőrzés letiltása</string>\n  <string name=\"patch_compat_check_description\">Ne korlátozza a javításokat kompatibilis alkalmazásverziókra</string>\n  <string name=\"patch_compat_check_confirmation\">Inkompatibilis javítások kiválasztása hibás alkalmazáshoz vezethet.\\n\\nFolytatni szeretné mégis?</string>\n  <string name=\"suggested_version_safeguard\">Javasolt alkalmazásverzió megkövetelése</string>\n  <string name=\"suggested_version_safeguard_description\">A javasolt alkalmazásverzió kiválasztásának kényszerítése</string>\n  <string name=\"suggested_version_safeguard_confirmation\">A nem javasolt verziójú alkalmazás kiválasztása váratlan problémákat okozhat.\\n\\nFolytatni szeretné mégis?</string>\n  <string name=\"patch_selection_safeguard\">Javítás kiválasztásának és opcióinak módosításának engedélyezése</string>\n  <string name=\"patch_selection_safeguard_description\">Ne akadályozza meg a javítások kiválasztását vagy törlését, valamint az opciók testreszabását</string>\n  <string name=\"patch_selection_safeguard_confirmation\">A javítások kiválasztásának módosítása váratlan problémákat okozhat.\\n\\nEngedélyezi mégis?</string>\n  <string name=\"universal_patches_safeguard\">Univerzális javítások használatának engedélyezése</string>\n  <string name=\"universal_patches_safeguard_description\">Ne akadályozza meg az univerzális javítások használatát</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Az univerzális javítások nincsenek olyan jól tesztelve, mint azok, amelyek specifikus alkalmazásokat céloznak.\\n\\nEngedélyezi mégis?</string>\n  <string name=\"keystore\">Kulcstároló</string>\n  <string name=\"patches_selections\">Javítások kiválasztásai</string>\n  <string name=\"import_keystore\">Kulcstároló importálása</string>\n  <string name=\"import_keystore_description\">Egyéni kulcstároló importálása</string>\n  <string name=\"import_keystore_dialog_title\">Kulcstároló hitelesítő adatok megadása</string>\n  <string name=\"import_keystore_dialog_description\">Meg kell adnia a kulcstároló hitelesítő adatait az importáláshoz.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Felhasználónév (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Jelszó</string>\n  <string name=\"import_keystore_dialog_button\">Importálás</string>\n  <string name=\"import_keystore_wrong_credentials\">Helytelen kulcstároló hitelesítő adatok</string>\n  <string name=\"import_keystore_success\">Importált kulcstároló</string>\n  <string name=\"export_keystore\">Kulcstároló exportálása</string>\n  <string name=\"export_keystore_description\">Az aktuális kulcstároló exportálása</string>\n  <string name=\"export_keystore_unavailable\">Nincs exportálható kulcstároló</string>\n  <string name=\"export_keystore_success\">Exportált kulcstároló</string>\n  <string name=\"regenerate_keystore\">Kulcstároló újragenerálása</string>\n  <string name=\"regenerate_keystore_description\">Új kulcstároló generálása</string>\n  <string name=\"regenerate_keystore_dialog_description\">Készül az újragenerálására a kulcstárolónak, amelyet a kezelő a javítási folyamat során fog használni.\\n\\nKorábban telepített alkalmazásokat ebből a forrásból már nem tudja frissíteni.</string>\n  <string name=\"regenerate_keystore_success\">A kulcstároló sikeresen lecserélve</string>\n  <string name=\"import_patch_selection\">Javítás kiválasztásának importálása</string>\n  <string name=\"import_patch_selection_description\">Javítás kiválasztásának importálása JSON fájlból</string>\n  <string name=\"import_patch_selection_fail\">Nem sikerült importálni a javítás kiválasztását: %s</string>\n  <string name=\"import_patch_selection_success\">Importált javítás kiválasztás</string>\n  <string name=\"select_bundle_for_import\">Válasszon csomagot az importáláshoz</string>\n  <string name=\"export_patch_selection\">Javítás kiválasztásának exportálása</string>\n  <string name=\"export_patch_selection_description\">Javítás kiválasztásának exportálása JSON fájlba</string>\n  <string name=\"export_patch_selection_fail\">Nem sikerült exportálni a javítás kiválasztását: %s</string>\n  <string name=\"export_patch_selection_success\">Exportált javítás kiválasztás</string>\n  <string name=\"select_bundle_for_export\">Válasszon csomagot az exportáláshoz</string>\n  <string name=\"patch_selection_packages\">Mentett kiválasztásokkal rendelkező alkalmazások</string>\n  <string name=\"patch_selection_entries\">Összes kiválasztott javítás</string>\n  <string name=\"reset_configuration\">Konfiguráció visszaállítása</string>\n  <string name=\"reset_patch_selection\">Javítási kiválasztások</string>\n  <string name=\"reset_patch_selection_description\">A tárolt javítás kiválasztásának visszaállítása</string>\n  <string name=\"reset_patch_options\">Javítási opciók</string>\n  <string name=\"reset_patch_options_description\">A tárolt javítási opciók visszaállítása</string>\n  <string name=\"reset_patch_selection_success\">A javítás kiválasztása visszaállítva</string>\n  <string name=\"patch_selection_reset_all\">Javítás kiválasztásának globális visszaállítása</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Készül az összes javítás kiválasztásának visszaállítására. Ezután manuálisan kell újra kiválasztania minden egyes javítást.</string>\n  <string name=\"patch_selection_reset_all_description\">Visszaállítja az összes javítás kiválasztását</string>\n  <string name=\"patch_selection_reset_package\">Javítás kiválasztásának visszaállítása alkalmazáshoz</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Készül a(z) „%s” alkalmazás javítás kiválasztásának visszaállítására. Ezután manuálisan kell újra kiválasztania minden egyes javítást.</string>\n  <string name=\"patch_selection_reset_package_description\">Visszaállítja a javítás kiválasztását egyetlen alkalmazáshoz</string>\n  <string name=\"patch_selection_reset_patches\">Javításválasztás visszaállítása (egyszeri)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Visszaállítja a \\\"%s\\\" javításválasztását. Minden javítást manuálisan kell majd újra kiválasztania.</string>\n  <string name=\"patch_selection_reset_patches_description\">Visszaállítja a javításválasztást egy adott javításgyűjteményhez</string>\n  <string name=\"patch_options_reset_package\">Javítási opciók visszaállítása az alkalmazáshoz</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Visszaállítja a javítási opciókat a(z) \\\"%s\\\" alkalmazáshoz. Minden opciót manuálisan kell majd újra alkalmaznia.</string>\n  <string name=\"patch_options_reset_package_description\">Visszaállítja a javítási opciókat egyetlen alkalmazáshoz</string>\n  <string name=\"patch_options_reset_patches\">Javítási opciók visszaállítása (egyszeri)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Visszaállítja a javítási opciókat a(z) \\\"%s\\\" alkalmazáshoz. Minden opciót manuálisan kell majd újra alkalmaznia.</string>\n  <string name=\"patch_options_reset_patches_description\">Visszaállítja a javítási opciókat egy adott javításgyűjteményhez</string>\n  <string name=\"patch_options_reset_all\">Javítási opciók globális visszaállítása</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Minden javítási opciót visszaállít. Minden opciót manuálisan kell majd újra alkalmaznia.</string>\n  <string name=\"patch_options_reset_all_description\">Minden javítási opciót visszaállít</string>\n  <string name=\"downloaders\">Letöltők</string>\n  <string name=\"downloader_prereleases\">Előzetes verziók használata</string>\n  <string name=\"downloader_prereleases_description\">A fő letöltő előzetes verzióinak használata</string>\n  <string name=\"downloader_state_loaded\">Betöltve</string>\n  <string name=\"downloader_state_failed\">Sikertelen betöltés. Kattintson a további részletekért</string>\n  <string name=\"downloader_state_missing\">Hiányzik</string>\n  <string name=\"downloader_delete_apps_title\">Kijelölt alkalmazások törlése</string>\n  <string name=\"downloader_delete_apps_description\">Biztosan törölni szeretné a kijelölt alkalmazásokat?</string>\n  <string name=\"downloader_delete_single_description\">Biztosan törölni szeretné a(z) „%s” elemet?</string>\n  <string name=\"downloader_settings_no_apps\">Nincsenek letöltött alkalmazások.</string>\n  <string name=\"downloader_settings_no_apps_description\">A ReVanced Manageren keresztül letöltött alkalmazások itt fognak megjelenni.</string>\n  <string name=\"downloader_url\">Letöltő URL</string>\n  <string name=\"downloader_add\">Letöltő hozzáadása</string>\n  <string name=\"select_downloader_type_dialog_description\">Új letöltők hozzáadása URL-ről vagy helyi fájlokból</string>\n  <string name=\"local_downloaders_description\">Letöltők hozzáadása helyi tárhelyről.</string>\n  <string name=\"remote_downloaders_description\">Letöltők hozzáadása URL-ről. Automatikusan frissíthető.</string>\n  <string name=\"install_revanced_downloaders\">Telepítsen letöltőket, hogy közvetlenül a ReVanced Manageren belül szerezzen be alkalmazásokat.</string>\n  <string name=\"install_revanced_downloader\">ReVanced letöltők telepítése</string>\n  <string name=\"cancel_downloader_install_title\">Letöltők telepítésének megszakítása?</string>\n  <string name=\"cancel_downloader_install_description\">Letöltők telepítése folyamatban van. Ha most elhagyja, a letöltés megszakad.</string>\n  <string name=\"downloader_sources_unavailable_title\">Ezek a letöltők hiányoznak</string>\n  <string name=\"downloader_sources_unavailable_description\">Kattintson a frissítés gombra a javításhoz.</string>\n  <string name=\"downloader_update_failed\">Nem sikerült frissíteni a letöltőt: %s</string>\n  <string name=\"downloader_replace_fail\">Nem sikerült importálni a letöltőt: %s</string>\n  <string name=\"search_apps\">Alkalmazások keresése…</string>\n  <string name=\"loading_body\">Betöltés…</string>\n  <string name=\"downloading_patches\">Javítások letöltése…</string>\n  <string name=\"options\">Opciók</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Igen</string>\n  <string name=\"no\">Nem</string>\n  <string name=\"edit\">Szerkesztés</string>\n  <string name=\"dialog_input_placeholder\">Érték</string>\n  <string name=\"reset\">Visszaállítás</string>\n  <string name=\"share\">Megosztás</string>\n  <string name=\"patch\">Javítás</string>\n  <string name=\"select_from_storage\">Kiválasztás tárolóból</string>\n  <string name=\"select_from_storage_description\">Válasszon egy APK fájlt a tárhelyről fájlválasztóval</string>\n  <string name=\"suggested_version_info\">Javasolt verzió: %s</string>\n  <string name=\"type_anything\">Írjon be valamit a folytatáshoz</string>\n  <string name=\"search\">Javítások keresése…</string>\n  <string name=\"apply\">Alkalmaz</string>\n  <string name=\"help\">Segítség</string>\n  <string name=\"back\">Vissza</string>\n  <string name=\"warning\">Figyelmeztetés</string>\n  <string name=\"add\">Hozzáadás</string>\n  <string name=\"enable\">Engedélyezés</string>\n  <string name=\"disable\">Letiltás</string>\n  <string name=\"close\">Bezárás</string>\n  <string name=\"clear\">Törlés</string>\n  <string name=\"system\">Rendszer</string>\n  <string name=\"light\">Világos</string>\n  <string name=\"dark\">Sötét</string>\n  <string name=\"appearance\">Megjelenés</string>\n  <string name=\"networking\">Hálózat</string>\n  <string name=\"allow_metered_networks\">Engedélyezze a korlátozott adatforgalmú hálózatokat</string>\n  <string name=\"allow_metered_networks_description\">Engedélyezi az automatikus frissítéseket korlátozott adatforgalmú hálózatokon.\\nAz alkalmazás továbbra is figyelmeztethet a korlátozott adatforgalmú hálózatokra manuális műveletek esetén.</string>\n  <string name=\"downloaded_apps\">Letöltött alkalmazások</string>\n  <string name=\"process_runtime\">Futtassa a Javítót egy másik folyamatban (kísérleti)</string>\n  <string name=\"process_runtime_description\">Ez gyorsabb, és lehetővé teszi a Javító számára, hogy több memóriát használjon</string>\n  <string name=\"process_runtime_memory_limit\">Javító folyamat memóriakorlátja</string>\n  <string name=\"process_runtime_memory_limit_description\">A Patcher folyamat által használható maximális memória mennyisége</string>\n  <string name=\"debug_logs_export\">Hibakeresési naplók exportálása</string>\n  <string name=\"debug_logs_export_read_failed\">Nem sikerült elolvasni a naplókat (kilépési kód: %d)</string>\n  <string name=\"debug_logs_export_failed\">Nem sikerült exportálni a naplókat</string>\n  <string name=\"debug_logs_export_success\">Exportált naplók</string>\n  <string name=\"api_url\">API URL</string>\n  <string name=\"api_url_description\">A szükséges fájlok letöltéséhez használt API</string>\n  <string name=\"api_url_dialog_title\">API URL módosítása</string>\n  <string name=\"api_url_dialog_description\">Módosítsa a ReVanced Manager API URL-jét. A ReVanced Manager az API-t használja a javítások és frissítések letöltésére.</string>\n  <string name=\"api_url_dialog_warning\">A ReVanced Manager csatlakozik az API-hoz a javítások és frissítések letöltéséhez. Győződjön meg róla, hogy megbízik benne.</string>\n  <string name=\"api_url_dialog_save\">Beállítás</string>\n  <string name=\"api_url_dialog_reset\">API URL visszaállítása</string>\n  <string name=\"device\">Eszköz</string>\n  <string name=\"device_android_version\">Android verzió</string>\n  <string name=\"device_model\">Modell</string>\n  <string name=\"device_architectures\">CPU architektúrák</string>\n  <string name=\"device_memory_limit\">Memóriakorlátok</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (normál) - %2$dMB (nagy)</string>\n  <string name=\"patches_force_download\">Minden javítás letöltésének kényszerítése</string>\n  <string name=\"patches_reset\">Javítások visszaállítása</string>\n  <string name=\"reset_onboarding\">Kezdőútmutató visszaállítása</string>\n  <string name=\"reset_onboarding_description\">A kezdőútmutató képernyő megjelenítése a következő alkalmazásindításkor</string>\n  <string name=\"patching\">Javítás</string>\n  <string name=\"signing\">Aláírás</string>\n  <string name=\"storage\">Tárhely</string>\n  <string name=\"no_patch_found\">Nincs javítás található. Ellenőrizze a javításokat</string>\n  <string name=\"tab_apps\">Alkalmazások</string>\n  <string name=\"tab_patches\">Javítások</string>\n  <string name=\"delete\">Törlés</string>\n  <string name=\"refresh\">Frissítés</string>\n  <string name=\"continue_anyways\">Folytatás mindenképpen</string>\n  <string name=\"download_another_version\">Másik verzió letöltése</string>\n  <string name=\"download_app\">Alkalmazás letöltése</string>\n  <string name=\"download_apk\">APK fájl letöltése</string>\n  <string name=\"patches_download_fail\">Nem sikerült letölteni a javításokat: %s</string>\n  <string name=\"api_not_working_title\">Az API szolgáltatás jelenleg nem elérhető</string>\n  <string name=\"api_not_working_description\">Egyes funkciók érintettek lehetnek. Ellenőrizze a kapcsolatot vagy az API URL-t a beállításokban.</string>\n  <string name=\"patches_replace_fail\">Nem sikerült importálni a javításokat: %s</string>\n  <string name=\"no_patched_apps_found\">Nincsenek javított alkalmazások</string>\n  <string name=\"no_patched_apps_description\">Jelenleg nincs tudomásunk javított alkalmazásáról. Változtassa meg ezt az első alkalmazás javításával!</string>\n  <string name=\"patched_apps_section_title\">Javított alkalmazások</string>\n  <string name=\"patchable_apps_section_title\">Javítható alkalmazások</string>\n  <string name=\"no_patches_found\">Nincsenek javítások</string>\n  <string name=\"no_patches_description\">Még nincsenek javításai. Adjon hozzá javításokat az alábbi gombra koppintva!</string>\n  <string name=\"tap_on_patches\">Koppintson a javításokra, hogy további információkat kapjon róluk</string>\n  <string name=\"patches_selected\">%s kiválasztva</string>\n  <string name=\"incompatible_patches\">Inkompatibilis javítások</string>\n  <string name=\"universal_patches\">Univerzális javítások</string>\n  <string name=\"patch_selection_reset_toast\">A javításválasztás és az opciók visszaállítva az ajánlott alapértelmezésekre</string>\n  <string name=\"patch_options_reset_toast\">A javítási opciók visszaállítva</string>\n  <string name=\"non_suggested_version_warning_title\">Nem javasolt verzió</string>\n  <string name=\"non_suggested_version_warning_description\">A kiválasztott alkalmazás verziója nem egyezik a javasolt verzióval.\\nKérjük, használja a javasolt verziót: %s\\n\\nA folytatáshoz kapcsolja ki az „Ajánlott alkalmazásverzió megkövetelése” opciót a speciális beállításokban.</string>\n  <string name=\"selection_warning_title\">Leállítja az alapértelmezések használatát?</string>\n  <string name=\"selection_warning_description\">Ajánlott az alapértelmezett javításválasztást és opciókat használni. Ezek módosítása váratlan problémákhoz vezethet.\\n\\nA javítások váltása előtt be kell kapcsolnia az „Engedélyezze a javításválasztás és az opciók módosítását” opciót a speciális beállításokban.</string>\n  <string name=\"universal_patch_warning_description\">Az univerzális javítások általánosabban használhatók, és nem működnek olyan megbízhatóan, mint a specifikus alkalmazásokat célzó javítások. Használatuk során problémákba ütközhet.\\n\\nAz univerzális javítások használata előtt be kell kapcsolnia az „Engedélyezze az univerzális javítások használatát” opciót a speciális beállításokban.</string>\n  <string name=\"this_version\">Ez a verzió</string>\n  <string name=\"universal\">Bármely alkalmazás</string>\n  <string name=\"search_patches\">Javítások keresése</string>\n  <string name=\"app_version_not_compatible\">Ez a javítás nem kompatibilis a kiválasztott alkalmazásverzióval (%1$s)\\n\\nCsak a következő verzió(k)kal kompatibilis: %2$s</string>\n  <string name=\"continue_with_version\">Folytatja ezzel a verzióval?</string>\n  <string name=\"version_not_compatible\">Nem minden javítás kompatibilis ezzel a verzióval (%s). Folytatni szeretné mindenképpen?</string>\n  <string name=\"download_application\">Letölti az alkalmazást?</string>\n  <string name=\"app_not_installed\">A kiválasztott alkalmazás nincs telepítve. Le szeretné tölteni?</string>\n  <string name=\"failed_to_load_apk\">Nem sikerült betölteni az APK-t</string>\n  <string name=\"split_apk_not_supported\">Osztott APK-k nem javíthatók</string>\n  <string name=\"loading\">Betöltés…</string>\n  <string name=\"not_installed\">Nincs telepítve</string>\n  <string name=\"installed\">Telepítve</string>\n  <string name=\"app_info\">Alkalmazás információ</string>\n  <string name=\"uninstall\">Eltávolítás</string>\n  <string name=\"unpatch\">Javítás eltávolítása</string>\n  <string name=\"repatch\">Újrajavítás</string>\n  <string name=\"install_type\">Telepítés típusa</string>\n  <string name=\"package_name\">Csomagnév</string>\n  <string name=\"original_package_name\">Eredeti csomagnév</string>\n  <string name=\"applied_patches\">Alkalmazott javítások</string>\n  <string name=\"view_applied_patches\">Alkalmazott javítások megtekintése</string>\n  <string name=\"default_install\">Alapértelmezett</string>\n  <string name=\"mount_install\">Felszerelés</string>\n  <string name=\"mounted\">Felszerelve</string>\n  <string name=\"not_mounted\">Nincs felszerelve</string>\n  <string name=\"mount\">Felszerel</string>\n  <string name=\"unmount\">Leválaszt</string>\n  <string name=\"failed_to_mount\">Sikertelen felszerelés: %s</string>\n  <string name=\"failed_to_unmount\">Sikertelen leválasztás: %s</string>\n  <string name=\"unpatch_app\">Alkalmazás javításának visszavonása?</string>\n  <string name=\"unpatch_description\">Biztosan vissza szeretné vonni az alkalmazás javítását?</string>\n  <string name=\"downloader_invalid_version\">A letöltő nem a megfelelő verziót töltötte le</string>\n  <string name=\"downloader_app_not_found\">A letöltő nem találta az alkalmazást</string>\n  <string name=\"downloader_error\">Letöltési hiba: %s</string>\n  <string name=\"no_downloaders_installed\">Nincsenek alkalmazásletöltők telepítve!</string>\n  <string name=\"no_downloaders_trusted\">Nincsenek megbízható alkalmazásletöltők! Kérjük, ellenőrizze a beállításait.</string>\n  <string name=\"already_patched\">Már javítva</string>\n  <string name=\"patch_selector_sheet_filter_title\">Szűrő</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Kompatibilitás</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Csomagok</string>\n  <string name=\"patch_selector_sheet_actions_title\">Műveletek</string>\n  <string name=\"restore_default_selection\">Alapértelmezett kijelölés visszaállítása</string>\n  <string name=\"deselect_all\">Összes kijelölés megszüntetése</string>\n  <string name=\"invert_selection\">Kijelölés megfordítása</string>\n  <string name=\"deselect_all_except\">Minden kijelölés törlése, kivéve: %s</string>\n  <string name=\"scope_dialog_title\">Alkalmazás a következőre</string>\n  <string name=\"scope_all_patches\">Összes javítás</string>\n  <string name=\"scope_bundle_patches\">Csak %s</string>\n  <string name=\"string_option_menu_description\">További lehetőségek</string>\n  <string name=\"option_preset_custom_value\">Egyéni érték</string>\n  <string name=\"path_selector\">Kiválasztás a tárhelyről</string>\n  <string name=\"path_selector_parent_dir\">Előző könyvtár</string>\n  <string name=\"path_selector_dirs\">Könyvtárak</string>\n  <string name=\"path_selector_files\">Fájlok</string>\n  <string name=\"show_password_field\">Jelszó megjelenítése</string>\n  <string name=\"hide_password_field\">Jelszó elrejtése</string>\n  <string name=\"installer\">Telepítő</string>\n  <string name=\"install_app\">Telepítés</string>\n  <string name=\"install_app_success\">Alkalmazás telepítve</string>\n  <string name=\"install_app_fail\">Sikertelen alkalmazástelepítés: %s</string>\n  <string name=\"reinstall_app_fail\">Sikertelen alkalmazás újratelepítés: %s</string>\n  <string name=\"uninstall_app_fail\">Sikertelen alkalmazás eltávolítás: %s</string>\n  <string name=\"open_app\">Megnyitás</string>\n  <string name=\"save_apk\">APK mentése</string>\n  <string name=\"save_apk_success\">APK elmentve</string>\n  <string name=\"sign_fail\">Sikertelen APK aláírás: %s</string>\n  <string name=\"save_logs\">Naplók mentése</string>\n  <string name=\"save_as_file\">Mentés fájlokba</string>\n  <string name=\"export_patcher_logs\">Patcher naplók exportálása</string>\n  <string name=\"save_logs_success\">Naplók mentve</string>\n  <string name=\"downloader_activity_dialog_body\">A letöltő folytatásához felhasználói beavatkozás szükséges.</string>\n  <string name=\"select_install_type\">Telepítési típus kiválasztása</string>\n  <string name=\"patcher_step_group_preparing\">Előkészítés</string>\n  <string name=\"patcher_step_load_patches\">Javítások betöltése</string>\n  <string name=\"patcher_step_unpack\">Javítóprogram előkészítése</string>\n  <string name=\"patcher_step_group_patching\">Javítás</string>\n  <string name=\"patcher_step_group_saving\">Mentés</string>\n  <string name=\"patcher_step_write_patched\">Javított APK fájl írása</string>\n  <string name=\"patcher_step_sign_apk\">Javított APK fájl aláírása</string>\n  <string name=\"patcher_notification_title\">Javítás folyamatban…</string>\n  <string name=\"patcher_notification_text\">Érintse meg a javítóhoz való visszatéréshez</string>\n  <string name=\"patcher_stop_confirm_title\">Javító leállítása</string>\n  <string name=\"patcher_stop_confirm_description\">Biztosan le szeretné állítani a javítási folyamatot?</string>\n  <string name=\"patcher_install_in_progress\">A telepítés folyamatban van. Kérjük, várjon.</string>\n  <string name=\"execute_patches\">Javítások végrehajtása</string>\n  <string name=\"executing_patch\">Végrehajtás: %s</string>\n  <string name=\"failed_to_execute_patch\">Sikertelen végrehajtás: %s</string>\n  <string name=\"step_completed\">befejeződött</string>\n  <string name=\"step_failed\">sikertelen</string>\n  <string name=\"step_running\">fut</string>\n  <string name=\"step_waiting\">várakozás</string>\n  <string name=\"expand_content\">kibontás</string>\n  <string name=\"collapse_content\">összecsukás</string>\n  <string name=\"drag_handle\">átrendezés</string>\n  <string name=\"more\">Több</string>\n  <string name=\"less\">Kevesebb</string>\n  <string name=\"continue_\">Folytatás</string>\n  <string name=\"dismiss\">Elvetés</string>\n  <string name=\"view_announcement\">Bejelentés megtekintése</string>\n  <string name=\"permanent_dismiss\">Ne mutassa újra</string>\n  <string name=\"donate\">Adományozás</string>\n  <string name=\"website\">Weboldal</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Kapcsolat</string>\n  <string name=\"license\">Licenc</string>\n  <string name=\"source\">Forrás</string>\n  <string name=\"repository\">Adattár</string>\n  <string name=\"bundle_information_by_author\">Szerző: %1$s</string>\n  <string name=\"version\">Verzió</string>\n  <string name=\"version_compatibility_warning\">A kiválasztott verzió inkompatibilis lehet a kiválasztott javításokkal.</string>\n  <string name=\"submit_feedback\">Probléma vagy visszajelzés küldése</string>\n  <string name=\"submit_feedback_description\">Segítsen nekünk az alkalmazás fejlesztésében</string>\n  <string name=\"developer_options\">Fejlesztői beállítások</string>\n  <string name=\"developer_options_description\">Beállítások a hibakereséshez</string>\n  <string name=\"patches_update_success\">Sikeres frissítés</string>\n  <string name=\"patches_update_unavailable\">Nincs elérhető frissítés</string>\n  <string name=\"view_patches\">Javítások megtekintése</string>\n  <string name=\"patches_view_any_version\">Bármely verzió</string>\n  <string name=\"patches_view_any_package\">Bármely csomag</string>\n  <string name=\"patches_delete_single_dialog_description\">Biztosan törölni szeretné a(z) „%s” elemet?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Biztosan törölni szeretné a kiválasztott javításokat?</string>\n  <string name=\"announcements\">Bejelentések</string>\n  <string name=\"archive\">Archívum</string>\n  <string name=\"about_revanced_manager\">A ReVanced Manager névjegye</string>\n  <string name=\"revanced_manager_description\">A ReVanced Manager egy Android alkalmazás, amely a ReVanced Patcher segítségével javítja az Android alkalmazásokat. Lehetővé teszi alkalmazások letöltését és javítását egyéni javításokkal, valamint a javítási folyamat kezelését.</string>\n  <string name=\"developer_options_taps\">%d érintés maradt</string>\n  <string name=\"developer_options_enabled\">Fejlesztői beállítások engedélyezve</string>\n  <string name=\"developer_options_already_enabled\">A fejlesztői beállítások már engedélyezve vannak</string>\n  <string name=\"update_available\">Frissítés érhető el</string>\n  <string name=\"current_version\">Jelenlegi verzió: %s</string>\n  <string name=\"new_version\">Új verzió: %s</string>\n  <string name=\"ready_to_install_update\">Készen áll a frissítés telepítésére</string>\n  <string name=\"update_completed\">Frissítés telepítve</string>\n  <string name=\"install_update_manager_failed\">Sikertelen frissítéstelepítés</string>\n  <string name=\"manual_update_check\">Frissítések keresése</string>\n  <string name=\"view_update\">Frissítés megtekintése</string>\n  <string name=\"manual_update_check_description\">Kézi frissítéskeresés</string>\n  <string name=\"update_checking_manager\">Frissítések keresése indításkor</string>\n  <string name=\"update_checking_manager_description\">Ellenőrizze a ReVanced Manager új verzióit az alkalmazás indításakor</string>\n  <string name=\"update_checking_downloader\">ReVanced letöltők frissítéseinek ellenőrzése indításkor</string>\n  <string name=\"update_checking_downloader_description\">Az összes telepített ReVanced letöltő frissítéseinek ellenőrzése az alkalmazás indításakor</string>\n  <string name=\"manager_prereleases\">Előzetes kiadások használata</string>\n  <string name=\"manager_prereleases_description\">A ReVanced Manager előzetes kiadásainak használata</string>\n  <string name=\"prereleases_warning\">Az előzetes verziók instabilak lehetnek és hibákat tartalmazhatnak. Lehetnek összeomlások, adatvesztés vagy más váratlan problémák. Csak akkor engedélyezze ezt, ha tisztában van ezekkel a kockázatokkal.</string>\n  <string name=\"changelog\">Változási napló megtekintése</string>\n  <string name=\"changelog_loading\">Változásnapló betöltése</string>\n  <string name=\"changelog_download_fail\">Sikertelen változásnapló letöltés: %s</string>\n  <string name=\"changelog_description\">Nézze meg a legújabb változásokat ebben a frissítésben</string>\n  <string name=\"battery_optimization_notification\">Az akkumulátor optimalizálásokat ki kell kapcsolni ahhoz, hogy a ReVanced Manager megfelelően működjön a háttérben. Kattintson ide az optimalizálások kikapcsolásához.</string>\n  <string name=\"installing_manager_update\">Frissítés telepítése…</string>\n  <string name=\"downloading_manager_update\">Frissítés letöltése…</string>\n  <string name=\"download_manager_failed\">Sikertelen frissítésletöltés: %s</string>\n  <string name=\"cancel\">Mégse</string>\n  <string name=\"save\">Mentés</string>\n  <string name=\"save_with_count\">Mentés (%1$s)</string>\n  <string name=\"update\">Frissítés</string>\n  <string name=\"empty\">Üres</string>\n  <string name=\"installing_message\">Érintse meg a <b>Frissítés</b> gombot, amikor a rendszer kéri.\nA ReVanced Manager bezárul a frissítés során.</string>\n  <string name=\"no_changelogs_found\">Nincs változásnapló található</string>\n  <string name=\"just_now\">Épp most</string>\n  <string name=\"minutes_ago\">%s perce</string>\n  <string name=\"hours_ago\">%s órája</string>\n  <string name=\"days_ago\">%s napja</string>\n  <string name=\"invalid_date\">Érvénytelen dátum</string>\n  <string name=\"disable_battery_optimization\">Akkumulátor-optimalizálás kikapcsolása</string>\n  <string name=\"input_dialog_value_invalid\">Érvénytelen érték</string>\n  <string name=\"option_required\">Ez az opció kötelező</string>\n  <string name=\"required_options_screen\">Kötelező opciók</string>\n  <string name=\"failed_to_check_updates\">Sikertelen frissítésellenőrzés: %s</string>\n  <string name=\"no_update_available\">Nincs elérhető frissítés</string>\n  <string name=\"no_announcements_found\">Nincs hirdetmény</string>\n  <string name=\"update_check\">Frissítések keresése…</string>\n  <string name=\"dismiss_temporary\">Most nem</string>\n  <string name=\"update_available_dialog_description\">Elérhető a ReVanced Manager (%s) új verziója.</string>\n  <string name=\"failed_to_download_update\">Sikertelen frissítésletöltés: %s</string>\n  <string name=\"download\">Letöltés</string>\n  <string name=\"download_confirmation_metered\">Jelenleg díjköteles kapcsolaton van, és a szolgáltatója díjat számíthat fel az adatforgalomért.\n\nFolytatni szeretné?</string>\n  <string name=\"download_update_confirmation\">Frissítés letöltése?</string>\n  <string name=\"no_contributors_found\">Nincs közreműködő található</string>\n  <string name=\"select\">Kiválasztás</string>\n  <string name=\"select_deselect_all\">Mindent kiválaszt vagy kijelölés megszüntetése</string>\n  <string name=\"select_patches_type_dialog_description\">Új javítások hozzáadása URL-ről vagy helyi fájlokból</string>\n  <string name=\"local_patches_description\">Javítások hozzáadása a helyi tárhelyről.</string>\n  <string name=\"remote_patches_description\">Javítások hozzáadása URL-ről. A javítások automatikusan frissülhetnek.</string>\n  <string name=\"recommended\">Ajánlott</string>\n  <string name=\"installation_failed_dialog_title\">Telepítés sikertelen</string>\n  <string name=\"installation_cancelled_dialog_title\">Telepítés megszakítva</string>\n  <string name=\"installation_blocked_dialog_title\">Telepítés blokkolva</string>\n  <string name=\"installation_conflict_dialog_title\">Telepítési ütközés</string>\n  <string name=\"installation_incompatible_dialog_title\">Telepítés nem kompatibilis</string>\n  <string name=\"installation_invalid_dialog_title\">Telepítés érvénytelen</string>\n  <string name=\"installation_storage_issue_dialog_title\">Nincs elegendő tárhely</string>\n  <string name=\"installation_timeout_dialog_title\">Telepítés időtúllépés</string>\n  <string name=\"installation_failed_description\">A telepítés ismeretlen okból sikertelen volt. Megpróbálja újra?</string>\n  <string name=\"installation_aborted_description\">A telepítés manuálisan lett megszakítva. Megpróbálja újra?</string>\n  <string name=\"installation_blocked_description\">A telepítés blokkolva lett. Ellenőrizze az eszköz biztonsági beállításait, és próbálja újra.</string>\n  <string name=\"installation_conflict_description\">A telepítést az alkalmazás már meglévő telepítése megakadályozta. Távolítsa el a telepített alkalmazást, és próbálja újra?</string>\n  <string name=\"installation_incompatible_description\">Az alkalmazás nem kompatibilis ezzel az eszközzel. Használjon olyan APK-t, amely kompatibilis ezzel az eszközzel, és próbálja újra.</string>\n  <string name=\"installation_invalid_description\">Az alkalmazás érvénytelen. Távolítsa el az alkalmazást, és próbálja újra?</string>\n  <string name=\"installation_storage_issue_description\">Az alkalmazást nem lehetett telepíteni elegendő tárhely hiánya miatt. Szabadítson fel némi helyet, és próbálja újra.</string>\n  <string name=\"installation_timeout_description\">A telepítés túl sokáig tartott. Megpróbálja újra?</string>\n  <string name=\"reinstall\">Újratelepítés</string>\n  <string name=\"show\">Megjelenítés</string>\n  <string name=\"debugging\">Hibakeresés</string>\n  <string name=\"about_device\">Az eszközről</string>\n  <string name=\"enter_url\">URL megadása</string>\n  <string name=\"next\">Következő</string>\n  <string name=\"auto_update\">Automatikus frissítés</string>\n  <string name=\"add_patches\">Javítások hozzáadása</string>\n  <string name=\"auto_update_description\">Automatikus frissítés, ha új verzió érhető el</string>\n  <string name=\"patches_prereleases\">Előzetes kiadások használata</string>\n  <string name=\"patches_prereleases_description\">A(z) %s előzetes kiadásainak használata</string>\n  <string name=\"patches_url\">Javítások URL-je</string>\n  <string name=\"incompatible_patches_dialog\">Ezek a javítások nem kompatibilisek a kiválasztott alkalmazásverzióval (%1$s).\n\nKattintson a javításokra a további részletekért.</string>\n  <string name=\"incompatible_patch\">Nem kompatibilis javítás</string>\n  <string name=\"any_version\">Bármelyik</string>\n  <string name=\"never_show_again\">Soha többé ne mutassa</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Frissítési üzenet megjelenítése indításkor</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Felugró értesítés megjelenítése, ha új frissítés érhető el indításkor</string>\n  <string name=\"failed_to_import_keystore\">Sikertelen kulcstároló importálás</string>\n  <string name=\"export\">Exportálás</string>\n  <string name=\"confirm\">Megerősítés</string>\n  <string name=\"new_announcement\">Új hirdetmény:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d javítás</item>\n    <item quantity=\"other\">%d javítás</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d javítás végrehajtása</item>\n    <item quantity=\"other\">%d javítás végrehajtása</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d kiválasztva</item>\n    <item quantity=\"other\">%d kiválasztva</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-hy-rAM/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Կարկատող</string>\n  <string name=\"patches\">Պատչեր</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Մենեջեր</string>\n  <string name=\"onboarding_welcome_to\">Բարի գալուստ</string>\n  <string name=\"onboarding_welcome_back\">Ողջույն։ Սա նորն է</string>\n  <string name=\"onboarding_apps_subtitle\">Դուք կարող եք ընտրել հավելվածը հիմա կարկատելու համար կամ անել դա ավելի ուշ</string>\n  <string name=\"onboarding_apps_network_error\">Հնարավոր չեղավ բեռնել թարմացումները, քանի որ ցանցը հասանելի չէ կամ անկայուն է։ Միացեք կայուն ցանցի և նորից փորձեք։</string>\n  <string name=\"onboarding_updates_subtitle\">Կարգավորեք ավտոմատ թարմացումները՝ ReVanced Manager-ը և կարկատանները թարմ պահելու համար</string>\n  <string name=\"banner_sources_not_downloaded_description\">Կարգավորման ընթացքում թարմացումները և ներբեռնողները հնարավոր չեղավ ներբեռնել։ Հպեք «թարմացնել»՝ դրանք ներբեռնելու համար։</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager-ը կմիանա %s-ին՝ սկզբնական տարբերակները ներբեռնելու համար, եթե Ձեր սարքը միացված է ինտերնետին։</string>\n  <string name=\"retry\">Կրկին փորձել</string>\n  <string name=\"onboarding_skip\">Առայժմ բաց թողնել</string>\n  <string name=\"onboarding_recommended_version\">Առաջարկվող տարբերակը՝ %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Բաց թողնել թույլտվությունները:</string>\n  <string name=\"onboarding_permissions_skip_description\">Առանց պահանջվող թույլտվությունների, որոշ գործառույթներ կարող են ճիշտ չաշխատել: Դուք կարող եք դրանք տրամադրել ավելի ուշ հավելվածի կարգավորումներում:</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Ամեն դեպքում բաց թողնել</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager-ին անհրաժեշտ են մի քանի թույլտվություններ՝ ճիշտ աշխատելու համար</string>\n  <string name=\"permission_install_apps\">Տեղադրել անհայտ հավելվածներ</string>\n  <string name=\"permission_install_apps_description\">Անհրաժեշտ է կարկատված հավելվածներ տեղադրելու համար</string>\n  <string name=\"permission_notifications\">Ծանուցումներ</string>\n  <string name=\"permission_notifications_description\">Թույլ է տալիս անխափան թարմացումներ կատարել հետին պլանում</string>\n  <string name=\"permission_battery\">Մարտկոցի օպտիմալացում</string>\n  <string name=\"permission_battery_description\">Կանխում է կարկատման ընդհատումը հետին պլանում</string>\n  <string name=\"permission_grant\">Տրամադրել</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager ներբեռնողի հոսթ</string>\n  <string name=\"downloader_host_permission_description\">Օգտագործվում է ReVanced Manager-ի ներբեռնողների մուտքը կառավարելու համար։ Միայն ReVanced Manager-ն ունի սա։</string>\n  <string name=\"toast_copied_to_clipboard\">Պատճենված է։</string>\n  <string name=\"copy_to_clipboard\">Պատճենել սեղմատախտակին</string>\n  <string name=\"dashboard\">Վահանակ</string>\n  <string name=\"settings\">Կարգավորումներ</string>\n  <string name=\"select_app\">Ընտրել հավելված</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d ընտրված է</string>\n  <string name=\"fab_patch_app\">Կարկատել հավելվածը</string>\n  <string name=\"fab_add_patches\">Ավելացնել կարկատաններ</string>\n  <string name=\"new_downloader_notification\">Նոր ներբեռնող(ներ) հասանելի է/են: Սեղմեք այստեղ՝ դրանք կարգավորելու համար:</string>\n  <string name=\"unsupported_architecture_warning\">Կարկատումը այս սարքի ճարտարապետության վրա չի աջակցվում և ամենայն հավանականությամբ կձախողվի։</string>\n  <string name=\"import_\">Ներմուծել</string>\n  <string name=\"import_patches\">Ներմուծել կարկատաններ</string>\n  <string name=\"file_field_set\">Ընտրված է</string>\n  <string name=\"file_field_not_set\">Ընտրված չէ</string>\n  <string name=\"field_not_set\">Սահմանված չէ</string>\n  <string name=\"patches_missing\">Բացակայում է</string>\n  <string name=\"patches_error\">Սխալ</string>\n  <string name=\"patches_error_description\">Կարկատանները չհաջողվեց բեռնել։ Կտտացրեք՝ սխալը դիտելու համար</string>\n  <string name=\"patches_not_downloaded\">Կարկատանները չեն ներբեռնվել։</string>\n  <string name=\"patches_name_default\">Կարկատաններ</string>\n  <string name=\"patches_name_fallback\">Անանուն</string>\n  <string name=\"android_11_bug_dialog_title\">Android 11-ի սխալ</string>\n  <string name=\"android_11_bug_dialog_description\">Հավելվածի տեղադրման թույլտվությունը պետք է տրվի նախապես՝ խուսափելու համար Android 11 համակարգի սխալից, որը բացասաբար կազդի օգտագործողի փորձի վրա։</string>\n  <string name=\"no_network_toast\">Ինտերնետ կապ չկա</string>\n  <string name=\"selected_app_meta_any_version\">Ցանկացած առկա տարբերակ</string>\n  <string name=\"app_source_dialog_title\">Ընտրել աղբյուր</string>\n  <string name=\"app_source_dialog_option_auto\">Ավտոմատ</string>\n  <string name=\"app_source_dialog_option_auto_description\">Օգտագործել տեղադրված հավելվածը, ապա ներբեռնված APK-ը, ապա հասանելի ներբեռնիչները</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Համատեղելի հավելված կամ ներբեռնիչներ առկա չեն</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Մոնտաժված հավելվածները հնարավոր չէ նորից կարկատել առանց root մուտքի</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Տարբերակը %s չի համապատասխանում առաջարկվող տարբերակին</string>\n  <string name=\"patch_item_description\">Սկսել հավելվածի կարկատումը</string>\n  <string name=\"patch_selector_item\">Ընտրել կարկատաններ</string>\n  <string name=\"patch_selector_item_description\">%d կարկատան ընտրված է</string>\n  <string name=\"patch_selection_changed_warning\">Կարկատանների ընտրությունը փոփոխվել է։</string>\n  <string name=\"no_patches_selected\">Կարկատաններ ընտրված չեն</string>\n  <string name=\"network_unavailable_warning\">Ձեր սարքը միացված չէ ինտերնետին։ Ներբեռնումը հետագայում կձախողվի։</string>\n  <string name=\"network_metered_warning\">Դուք այժմ օգտագործում եք չափազանցված կապ։ Կարող են կիրառվել տվյալների վճարներ ձեր ծառայություն մատուցողից։</string>\n  <string name=\"apk_source_selector_item\">Ընտրել APK աղբյուրը</string>\n  <string name=\"apk_source_auto\">Ավտո</string>\n  <string name=\"apk_source_auto_installed\">Ավտո · Օգտագործելով տեղադրված APK-ը</string>\n  <string name=\"apk_source_auto_downloaded\">Ավտո · Օգտագործելով ներբեռնված APK-ը</string>\n  <string name=\"apk_source_auto_downloader\">Ավտոմատ · Օգտագործելով առկա ներբեռնիչները</string>\n  <string name=\"apk_source_auto_storage\">Ավտոմատ · Ընտրել պահեստից</string>\n  <string name=\"apk_source_downloader\">Օգտագործելով %s</string>\n  <string name=\"apk_source_installed\">Օգտագործելով տեղադրված APK-ն</string>\n  <string name=\"apk_source_local\">Օգտագործելով տեղական APK ֆայլ</string>\n  <string name=\"apk_source_downloaded\">Արդեն ներբեռնված է</string>\n  <string name=\"legacy_import_failed\">Հնարավոր չէր ներմուծել հին կարգավորումները</string>\n  <string name=\"auto_updates_dialog_title\">Կարգավորել թարմացումները</string>\n  <string name=\"auto_updates_dialog_description\">Ցանկանու՞մ եք, որ ReVanced Manager-ը պարբերաբար ստուգի թարմացումները հետևյալ բաղադրիչների համար:</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Կարկատաններ</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Ներբեռնողներ</string>\n  <string name=\"auto_updates_dialog_note\">Այս կարգավորումները հետագայում կարող են փոփոխվել:\n\n    ReVanced Manager-ը կմիանա %s-ին՝ սկզբնական տարբերակները ներբեռնելու համար, եթե Ձեր սարքը միացված է ինտերնետին։</string>\n  <string name=\"announcements_filter_tag\">Ֆիլտրել ըստ պիտակի</string>\n  <string name=\"announcements_show_archived\">Ցուցադրել արխիվացվածը</string>\n  <string name=\"general\">Ընդհանուր</string>\n  <string name=\"general_description\">Լեզու, թեմա, դինամիկ գույն</string>\n  <string name=\"updates\">Թարմացումներ</string>\n  <string name=\"updates_description\">Ստուգել թարմացումները և դիտել փոփոխությունների մատյանը</string>\n  <string name=\"downloads\">Ներբեռնումներ</string>\n  <string name=\"downloads_description\">Ներբեռնողներ և ներբեռնված հավելվածներ</string>\n  <string name=\"import_export\">Ներմուծում և արտահանում</string>\n  <string name=\"import_export_description\">Բանալիի պահեստ, կարկատման ընտրանքներ և ընտրություն</string>\n  <string name=\"advanced\">Ընդլայնված</string>\n  <string name=\"advanced_description\">API URL, հիշողության սահմանափակում, կարգաբերում</string>\n  <string name=\"safeguards_toggled_warning\">Պաշտպանիչ միջոցները միացվել/անջատվել են։</string>\n  <string name=\"about\">Մեր մասին</string>\n  <string name=\"about_app_name\">%1$s-ի մասին</string>\n  <string name=\"opensource_licenses\">Բաց կոդով լիցենզիաներ</string>\n  <string name=\"opensource_licenses_description\">Դիտել այս հավելվածը ստեղծելու համար օգտագործված բոլոր գրադարանները</string>\n  <string name=\"contributors\">Ներդրողներ</string>\n  <string name=\"contributors_description\">Դիտել ReVanced-ի ներդրողներին</string>\n  <string name=\"dynamic_color\">Դինամիկ գույն</string>\n  <string name=\"dynamic_color_description\">Հարմարեցնել գույները պաստառին</string>\n  <string name=\"pure_black_theme\">Մաքուր սև թեմա</string>\n  <string name=\"pure_black_theme_description\">Օգտագործել մաքուր սև ֆոներ մութ թեմայի համար</string>\n  <string name=\"theme\">Թեմա</string>\n  <string name=\"theme_description\">Ընտրեք բաց կամ մութ թեմայի միջև</string>\n  <string name=\"language\">Լեզու</string>\n  <string name=\"language_description\">Ընտրեք հավելվածի ցուցադրման լեզուն</string>\n  <string name=\"language_system_default\">Համակարգի լռելյայն</string>\n  <string name=\"search_languages\">Որոնել լեզուներ…</string>\n  <string name=\"safeguards\">Ապահովիչներ</string>\n  <string name=\"patch_compat_check\">Անջատել տարբերակի համատեղելիության ստուգումը</string>\n  <string name=\"patch_compat_check_description\">Մի սահմանափակեք կարկատանները համատեղելի հավելվածի տարբերակներով</string>\n  <string name=\"patch_compat_check_confirmation\">Անհամատեղելի կարկատաններ ընտրելը կարող է հանգեցնել հավելվածի խափանմանը։\n\nՑանկանու՞մ եք, այնուամենայնիվ, շարունակել։</string>\n  <string name=\"suggested_version_safeguard\">Պահանջել առաջարկվող հավելվածի տարբերակը</string>\n  <string name=\"suggested_version_safeguard_description\">Պարտադրել առաջարկվող հավելվածի տարբերակի ընտրությունը</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Հավելվածի ոչ առաջարկվող տարբերակն ընտրելը կարող է անսպասելի խնդիրներ առաջացնել։\n\nՑանկանու՞մ եք, այնուամենայնիվ, շարունակել։</string>\n  <string name=\"patch_selection_safeguard\">Թույլատրել փոխել կարկատանների ընտրությունն ու ընտրանքները</string>\n  <string name=\"patch_selection_safeguard_description\">Մի կանխարգելեք կարկատանների ընտրությունը կամ չընտրությունը և ընտրանքների հարմարեցումը</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Կարկատանների ընտրության փոփոխումը կարող է անսպասելի խնդիրներ առաջացնել։\n\nՄիացնե՞լ, այնուամենայնիվ։</string>\n  <string name=\"universal_patches_safeguard\">Թույլատրել համընդհանուր կարկատանների օգտագործումը</string>\n  <string name=\"universal_patches_safeguard_description\">Մի կանխարգելեք համընդհանուր կարկատանների օգտագործումը</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Համընդհանուր կարկատանները այնքան լավ փորձարկված չեն, որքան հատուկ հավելվածների համար նախատեսվածները։\n\nՄիացնե՞լ, այնուամենայնիվ։</string>\n  <string name=\"keystore\">Գաղտնաբանալիների պահոց</string>\n  <string name=\"patches_selections\">Կարկատանների ընտրանքներ</string>\n  <string name=\"import_keystore\">Ներմուծել բանալիի պահեստ</string>\n  <string name=\"import_keystore_description\">Ներմուծել անհատական բանալիի պահեստ</string>\n  <string name=\"import_keystore_dialog_title\">Մուտքագրեք բանալիի պահեստի հավատարմագրերը</string>\n  <string name=\"import_keystore_dialog_description\">Այն ներմուծելու համար անհրաժեշտ է մուտքագրել բանալիի պահեստի հավատարմագրերը։</string>\n  <string name=\"import_keystore_dialog_alias_field\">Օգտվողի անուն (Մականուն)</string>\n  <string name=\"import_keystore_dialog_password_field\">Գաղտնաբառ</string>\n  <string name=\"import_keystore_dialog_button\">Ներմուծել</string>\n  <string name=\"import_keystore_wrong_credentials\">Սխալ բանալիի պահեստի հավատարմագրեր</string>\n  <string name=\"import_keystore_success\">Ներմուծված բանալիի պահեստ</string>\n  <string name=\"export_keystore\">Արտահանել բանալիի պահեստ</string>\n  <string name=\"export_keystore_description\">Արտահանել ընթացիկ բանալիի պահեստը</string>\n  <string name=\"export_keystore_unavailable\">Արտահանելու բանալիի պահեստ չկա</string>\n  <string name=\"export_keystore_success\">Արտահանված բանալիի պահեստ</string>\n  <string name=\"regenerate_keystore\">Վերստեղծել բանալիի պահեստ</string>\n  <string name=\"regenerate_keystore_description\">Ստեղծել նոր բանալիի պահեստ</string>\n  <string name=\"regenerate_keystore_dialog_description\">Դուք պատրաստվում եք վերստեղծել ձեր բանալիի պահեստը, որը մենեջերը կօգտագործի կարկատման գործընթացում։\n\nԴուք չեք կարողանա թարմացնել նախկինում տեղադրված հավելվածները այս աղբյուրից։</string>\n  <string name=\"regenerate_keystore_success\">Բանալիի պահեստը հաջողությամբ փոխարինվել է</string>\n  <string name=\"import_patch_selection\">Ներմուծել կարկատանների ընտրություն</string>\n  <string name=\"import_patch_selection_description\">Ներմուծել կարկատանների ընտրություն JSON ֆայլից</string>\n  <string name=\"import_patch_selection_fail\">Հնարավոր չէր ներմուծել կարկատանների ընտրությունը՝ %s</string>\n  <string name=\"import_patch_selection_success\">Ներմուծված կարկատանների ընտրություն</string>\n  <string name=\"select_bundle_for_import\">Ընտրել փաթեթը՝ ներմուծելու համար</string>\n  <string name=\"export_patch_selection\">Արտահանել կարկատանների ընտրություն</string>\n  <string name=\"export_patch_selection_description\">Արտահանել կարկատանների ընտրություն JSON ֆայլ</string>\n  <string name=\"export_patch_selection_fail\">Հնարավոր չէր արտահանել կարկատանների ընտրությունը՝ %s</string>\n  <string name=\"export_patch_selection_success\">Արտահանված կարկատանների ընտրություն</string>\n  <string name=\"select_bundle_for_export\">Ընտրել փաթեթը՝ արտահանելու համար</string>\n  <string name=\"patch_selection_packages\">Հավելվածներ պահպանված ընտրանքներով</string>\n  <string name=\"patch_selection_entries\">Ընդհանուր ընտրված կարկատաններ</string>\n  <string name=\"reset_configuration\">Վերակայել կազմաձևումը</string>\n  <string name=\"reset_patch_selection\">Կարկատանների ընտրանքներ</string>\n  <string name=\"reset_patch_selection_description\">Վերականգնել պահված կարկատանների ընտրությունը</string>\n  <string name=\"reset_patch_options\">Կարկատման ընտրանքներ</string>\n  <string name=\"reset_patch_options_description\">Վերականգնել պահված կարկատանների ընտրանքները</string>\n  <string name=\"reset_patch_selection_success\">Կարկատանների ընտրությունը վերականգնվել է</string>\n  <string name=\"patch_selection_reset_all\">Գլոբալ վերականգնել կարկատանների ընտրությունը</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Դուք պատրաստվում եք վերականգնել բոլոր կարկատանների ընտրությունները։ Ձեզ հարկավոր կլինի ձեռքով նորից ընտրել յուրաքանչյուր կարկատան։</string>\n  <string name=\"patch_selection_reset_all_description\">Վերականգնում է բոլոր կարկատանների ընտրությունները</string>\n  <string name=\"patch_selection_reset_package\">Վերականգնել կարկատանների ընտրությունը հավելվածի համար</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Դուք պատրաստվում եք վերականգնել կարկատանների ընտրությունը «%s» հավելվածի համար։ Ձեզ հարկավոր կլինի ձեռքով նորից ընտրել յուրաքանչյուր կարկատան։</string>\n  <string name=\"patch_selection_reset_package_description\">Վերականգնում է կարկատանների ընտրությունը մեկ հավելվածի համար</string>\n  <string name=\"patch_selection_reset_patches\">Վերակայել կարկատանների ընտրությունը (մեկ)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Դուք պատրաստվում եք վերակայել կարկատանների ընտրությունը «%s»-ի համար։ Դուք ստիպված կլինեք յուրաքանչյուր կարկատան ընտրել ձեռքով։</string>\n  <string name=\"patch_selection_reset_patches_description\">Վերակայում է կարկատանների ընտրությունը կարկատանների որոշակի հավաքածուի համար</string>\n  <string name=\"patch_options_reset_package\">Վերակայել հավելվածի կարկատանների ընտրանքները</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Դուք պատրաստվում եք վերակայել կարկատանների ընտրանքները «%s» հավելվածի համար։ Դուք ստիպված կլինեք յուրաքանչյուր ընտրանք կրկին կիրառել։</string>\n  <string name=\"patch_options_reset_package_description\">Վերակայում է կարկատանների ընտրանքները մեկ հավելվածի համար</string>\n  <string name=\"patch_options_reset_patches\">Վերակայել կարկատանների ընտրանքները (մեկ)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Դուք պատրաստվում եք վերակայել կարկատանների ընտրանքները «%s»-ի համար։ Դուք ստիպված կլինեք յուրաքանչյուր ընտրանք կրկին կիրառել։</string>\n  <string name=\"patch_options_reset_patches_description\">Վերակայում է կարկատանների ընտրանքները կարկատանների որոշակի հավաքածուի համար</string>\n  <string name=\"patch_options_reset_all\">Վերակայել կարկատանների ընտրանքները գլոբալ կերպով</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Դուք պատրաստվում եք վերակայել բոլոր կարկատանների ընտրանքները։ Դուք ստիպված կլինեք յուրաքանչյուր ընտրանք կրկին կիրառել։</string>\n  <string name=\"patch_options_reset_all_description\">Վերակայում է կարկատանների բոլոր ընտրանքները</string>\n  <string name=\"downloaders\">Ներբեռնողներ</string>\n  <string name=\"downloader_prereleases\">Օգտագործել նախաթողարկումները</string>\n  <string name=\"downloader_prereleases_description\">Օգտագործել հիմնական ներբեռնողի նախաթողարկման տարբերակները</string>\n  <string name=\"downloader_state_loaded\">Բեռնված</string>\n  <string name=\"downloader_state_failed\">Բեռնումը ձախողվեց։ Սեղմեք՝ ավելին իմանալու համար</string>\n  <string name=\"downloader_state_missing\">Բացակայում է</string>\n  <string name=\"downloader_delete_apps_title\">Ջնջել ընտրված հավելվածները</string>\n  <string name=\"downloader_delete_apps_description\">Վստա՞հ եք, որ ցանկանում եք ջնջել ընտրված հավելվածները:</string>\n  <string name=\"downloader_delete_single_description\">Վստա՞հ եք, որ ցանկանում եք ջնջել «%s»-ը:</string>\n  <string name=\"downloader_settings_no_apps\">Ներբեռնված հավելվածներ չեն գտնվել։</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager-ի միջոցով ներբեռնված հավելվածները կհայտնվեն այստեղ:</string>\n  <string name=\"downloader_url\">Ներբեռնողի URL</string>\n  <string name=\"downloader_add\">Ավելացնել Ներբեռնող</string>\n  <string name=\"select_downloader_type_dialog_description\">Ավելացնել նոր ներբեռնողներ URL-ից կամ տեղական ֆայլերից</string>\n  <string name=\"local_downloaders_description\">Ավելացնել ներբեռնողներ տեղական պահեստից։</string>\n  <string name=\"remote_downloaders_description\">Ավելացնել ներբեռնողներ URL-ից։ Կարող են ավտոմատ կերպով թարմացվել։</string>\n  <string name=\"install_revanced_downloaders\">Տեղադրել ներբեռնողներ՝ հավելվածներն անմիջապես ReVanced Manager-ի ներսում ստանալու համար:</string>\n  <string name=\"install_revanced_downloader\">Տեղադրել ReVanced Ներբեռնողներ</string>\n  <string name=\"cancel_downloader_install_title\">Չեղարկե՞լ ներբեռնողների տեղադրումը:</string>\n  <string name=\"cancel_downloader_install_description\">Ներբեռնողների տեղադրումը ընթացքի մեջ է: Եթա հիմա հեռանաք, ներբեռնումը կչեղարկվի:</string>\n  <string name=\"downloader_sources_unavailable_title\">Այս ներբեռնողները բացակայում են</string>\n  <string name=\"downloader_sources_unavailable_description\">Սեղմեք թարմացման կոճակը՝ այն շտկելու համար։</string>\n  <string name=\"downloader_update_failed\">Չհաջողվեց թարմացնել ներբեռնողը՝ %s</string>\n  <string name=\"downloader_replace_fail\">Չհաջողվեց ներմուծել ներբեռնողը՝ %s</string>\n  <string name=\"search_apps\">Որոնել հավելվածներ…</string>\n  <string name=\"loading_body\">Բեռնվում է…</string>\n  <string name=\"downloading_patches\">Ներբեռնվում են կարկատանները…</string>\n  <string name=\"options\">Ընտրանքներ</string>\n  <string name=\"ok\">Լա՛վ</string>\n  <string name=\"yes\">Այո՛</string>\n  <string name=\"no\">Ոչ</string>\n  <string name=\"edit\">Խմբագրել</string>\n  <string name=\"dialog_input_placeholder\">Արժեք</string>\n  <string name=\"reset\">Վերակայել</string>\n  <string name=\"share\">Կիսվել</string>\n  <string name=\"patch\">Կարկատան</string>\n  <string name=\"select_from_storage\">Ընտրել պահեստից</string>\n  <string name=\"select_from_storage_description\">Ընտրեք APK ֆայլ պահեստից՝ ֆայլի ընտրիչի միջոցով</string>\n  <string name=\"suggested_version_info\">Առաջարկվող տարբերակը՝ %s</string>\n  <string name=\"type_anything\">Շարունակելու համար մուտքագրեք որևէ բան</string>\n  <string name=\"search\">Որոնել կարկատաններ…</string>\n  <string name=\"apply\">Կիրառել</string>\n  <string name=\"help\">Օգնություն</string>\n  <string name=\"back\">Հետ</string>\n  <string name=\"warning\">Զգուշացում</string>\n  <string name=\"add\">Ավելացնել</string>\n  <string name=\"enable\">Միացնել</string>\n  <string name=\"disable\">Անջատել</string>\n  <string name=\"close\">Փակել</string>\n  <string name=\"clear\">Մաքրել</string>\n  <string name=\"system\">Համակարգ</string>\n  <string name=\"light\">Բաց</string>\n  <string name=\"dark\">Մուգ</string>\n  <string name=\"appearance\">Տեսք</string>\n  <string name=\"networking\">Ցանց</string>\n  <string name=\"allow_metered_networks\">Թույլատրել սահմանափակ ցանցերը</string>\n  <string name=\"allow_metered_networks_description\">Թույլ է տալիս ավտոմատ թարմացումները սահմանափակ ցանցերում:\\n    Հավելվածը կարող է դեռ զգուշացնել սահմանափակ ցանցերի մասին ձեռքով գործողությունների համար։</string>\n  <string name=\"downloaded_apps\">Ներբեռնված հավելվածներ</string>\n  <string name=\"process_runtime\">Գործարկել Patcher-ը այլ պրոցեսում (փորձարարական)</string>\n  <string name=\"process_runtime_description\">Սա ավելի արագ է և թույլ է տալիս Patcher-ին ավելի շատ հիշողություն օգտագործել</string>\n  <string name=\"process_runtime_memory_limit\">Patcher պրոցեսի հիշողության սահմանափակում</string>\n  <string name=\"process_runtime_memory_limit_description\">Հիշողության առավելագույն քանակը, որը կարող է օգտագործել կարկատիչի գործընթացը</string>\n  <string name=\"debug_logs_export\">Արտահանել վրիպազերծման մատյանները</string>\n  <string name=\"debug_logs_export_read_failed\">Չհաջողվեց կարդալ մատյանները (ելքի կոդը՝ %d)</string>\n  <string name=\"debug_logs_export_failed\">Չհաջողվեց արտահանել մատյանները</string>\n  <string name=\"debug_logs_export_success\">Արտահանված մատյաններ</string>\n  <string name=\"api_url\">API հասցե</string>\n  <string name=\"api_url_description\">API-ն, որն օգտագործվում է անհրաժեշտ ֆայլերը ներբեռնելու համար</string>\n  <string name=\"api_url_dialog_title\">Փոխել API հասցեն</string>\n  <string name=\"api_url_dialog_description\">Փոխեք ReVanced Manager-ի API հասցեն։ ReVanced Manager-ն օգտագործում է API-ն՝ կարկատաններ և թարմացումներ ներբեռնելու համար։</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager-ը միանում է API-ին՝ կարկատաններ և թարմացումներ ներբեռնելու համար։ Համոզվեք, որ վստահում եք դրան։</string>\n  <string name=\"api_url_dialog_save\">Սահմանել</string>\n  <string name=\"api_url_dialog_reset\">Վերակայել API հասցեն</string>\n  <string name=\"device\">Սարք</string>\n  <string name=\"device_android_version\">Android տարբերակ</string>\n  <string name=\"device_model\">Մոդել</string>\n  <string name=\"device_architectures\">CPU ճարտարապետություններ</string>\n  <string name=\"device_memory_limit\">Հիշողության սահմանափակումներ</string>\n  <string name=\"device_memory_limit_format\">%1$dՄԲ (Նորմալ) - %2$dՄԲ (Մեծ)</string>\n  <string name=\"patches_force_download\">Պարտադրել ներբեռնել բոլոր կարկատանները</string>\n  <string name=\"patches_reset\">Վերակայել կարկատանները</string>\n  <string name=\"reset_onboarding\">Վերակայել ինքնուսուցումը</string>\n  <string name=\"reset_onboarding_description\">Ցույց տալ ինքնուսուցման էկրանը հավելվածի հաջորդ գործարկման ժամանակ</string>\n  <string name=\"patching\">Կարկատում</string>\n  <string name=\"signing\">Ստորագրում</string>\n  <string name=\"storage\">Պահեստ</string>\n  <string name=\"no_patch_found\">Կարկատան չի գտնվել։ Ստուգեք ձեր կարկատանները</string>\n  <string name=\"tab_apps\">Հավելվածներ</string>\n  <string name=\"tab_patches\">Կարկատաններ</string>\n  <string name=\"delete\">Ջնջել</string>\n  <string name=\"refresh\">Թարմացնել</string>\n  <string name=\"continue_anyways\">Ամեն դեպքում շարունակել</string>\n  <string name=\"download_another_version\">Ներբեռնել այլ տարբերակ</string>\n  <string name=\"download_app\">Ներբեռնել հավելվածը</string>\n  <string name=\"download_apk\">Ներբեռնել APK ֆայլը</string>\n  <string name=\"patches_download_fail\">Չհաջողվեց ներբեռնել կարկատանները. %s</string>\n  <string name=\"api_not_working_title\">API ծառայությունը ներկայումս անհասանելի է</string>\n  <string name=\"api_not_working_description\">Որոշ գործառույթներ կարող են ազդվել։ Ստուգեք ձեր կապը կամ API-ի URL-ը կարգավորումներում։</string>\n  <string name=\"patches_replace_fail\">Չհաջողվեց ներմուծել կարկատանները. %s</string>\n  <string name=\"no_patched_apps_found\">Կարկատված հավելվածներ չեն գտնվել</string>\n  <string name=\"no_patched_apps_description\">Ներկայումս դուք չունեք որևէ կարկատված հավելված, որոնց մասին մենք տեղյակ ենք: Փոխեք դա՝ կարկատելով ձեր առաջին հավելվածը:</string>\n  <string name=\"patched_apps_section_title\">Կարկատված հավելվածներ</string>\n  <string name=\"patchable_apps_section_title\">Հավելվածներ, որոնք կարող են կարկատվել</string>\n  <string name=\"no_patches_found\">Կարկատաններ չեն գտնվել</string>\n  <string name=\"no_patches_description\">Դուք դեռ կարկատաններ չունեք: Ավելացրեք կարկատաններ՝ հպելով ներքևի կոճակին:</string>\n  <string name=\"tap_on_patches\">Սեղմեք կարկատանների վրա՝ դրանց մասին ավելի շատ տեղեկություն ստանալու համար</string>\n  <string name=\"patches_selected\">Ընտրված է %s</string>\n  <string name=\"incompatible_patches\">Անհամատեղելի կարկատաններ</string>\n  <string name=\"universal_patches\">Ունիվերսալ կարկատաններ</string>\n  <string name=\"patch_selection_reset_toast\">Կարկատանների ընտրությունն ու ընտրանքները վերակայվել են առաջարկվող լռելյայն արժեքներին</string>\n  <string name=\"patch_options_reset_toast\">Կարկատանների ընտրանքները վերակայվել են</string>\n  <string name=\"non_suggested_version_warning_title\">Չառաջարկվող տարբերակ</string>\n  <string name=\"non_suggested_version_warning_description\">Ձեր ընտրած հավելվածի տարբերակը չի համապատասխանում առաջարկվող տարբերակին:\\nԽնդրում ենք օգտագործել առաջարկվող տարբերակը՝ %s\\n\\nԱմեն դեպքում շարունակելու համար անջատեք «Պահանջել հավելվածի առաջարկվող տարբերակը» առաջադեմ կարգավորումներում։</string>\n  <string name=\"selection_warning_title\">Դադարեցնե՞լ լռելյայն արժեքների օգտագործումը</string>\n  <string name=\"selection_warning_description\">Խորհուրդ է տրվում օգտագործել կարկատանների լռելյայն ընտրությունն ու ընտրանքները։ Դրանք փոփոխելը կարող է հանգեցնել անսպասելի խնդիրների։\\n\\nԿարկատանները միացնելուց առաջ անհրաժեշտ է միացնել «Թույլատրել փոփոխել կարկատանների ընտրությունն ու ընտրանքները» առաջադեմ կարգավորումներում։</string>\n  <string name=\"universal_patch_warning_description\">Ունիվերսալ կարկատաններն ունեն ավելի ընդհանրացված կիրառություն և չեն աշխատում այնքան հուսալի, որքան կոնկրետ հավելվածների համար նախատեսված կարկատանները։ Դրանք օգտագործելիս կարող եք բախվել խնդիրների։\\n\\nՈւնիվերսալ կարկատաններն օգտագործելուց առաջ անհրաժեշտ է միացնել «Թույլատրել օգտագործել ունիվերսալ կարկատաններ» առաջադեմ կարգավորումներում։</string>\n  <string name=\"this_version\">Այս տարբերակը</string>\n  <string name=\"universal\">Ցանկացած հավելված</string>\n  <string name=\"search_patches\">Որոնել կարկատաններ</string>\n  <string name=\"app_version_not_compatible\">Այս կարկատանը համատեղելի չէ ընտրված հավելվածի տարբերակի հետ (%1$s)\\n\\nԱյն համատեղելի է միայն հետևյալ տարբերակ(ներ)ի հետ՝ %2$s</string>\n  <string name=\"continue_with_version\">Շարունակե՞լ այս տարբերակով</string>\n  <string name=\"version_not_compatible\">Ոչ բոլոր կարկատաններն են համատեղելի այս տարբերակի հետ (%s): Ցանկանու՞մ եք, ամեն դեպքում, շարունակել։</string>\n  <string name=\"download_application\">Ներբեռնե՞լ հավելվածը</string>\n  <string name=\"app_not_installed\">Ձեր ընտրած հավելվածը տեղադրված չէ։ Ցանկանու՞մ եք ներբեռնել այն։</string>\n  <string name=\"failed_to_load_apk\">Չհաջողվեց բեռնել APK-ն</string>\n  <string name=\"split_apk_not_supported\">Բաժանված APK-ները չեն կարող կարկատվել</string>\n  <string name=\"loading\">Բեռնվում է…</string>\n  <string name=\"not_installed\">Տեղադրված չէ</string>\n  <string name=\"installed\">Տեղադրված է</string>\n  <string name=\"app_info\">Հավելվածի տեղեկություն</string>\n  <string name=\"uninstall\">Ապատեղադրել</string>\n  <string name=\"unpatch\">Հանել կարկատանը</string>\n  <string name=\"repatch\">Վերակարկատել</string>\n  <string name=\"install_type\">Տեղադրման տեսակ</string>\n  <string name=\"package_name\">Փաթեթի անուն</string>\n  <string name=\"original_package_name\">Օրիգինալ փաթեթի անուն</string>\n  <string name=\"applied_patches\">Կիրառված կարկատաններ</string>\n  <string name=\"view_applied_patches\">Դիտել կիրառված կարկատանները</string>\n  <string name=\"default_install\">Լռելյայն</string>\n  <string name=\"mount_install\">Մոնտաժել</string>\n  <string name=\"mounted\">Մոնտաժված է</string>\n  <string name=\"not_mounted\">Մոնտաժված չէ</string>\n  <string name=\"mount\">Մոնտաժել</string>\n  <string name=\"unmount\">Ապամոնտաժել</string>\n  <string name=\"failed_to_mount\">Չհաջողվեց մոնտաժել՝ %s</string>\n  <string name=\"failed_to_unmount\">Չհաջողվեց ապամոնտաժել՝ %s</string>\n  <string name=\"unpatch_app\">Հեռացնե՞լ կարկատանը հավելվածից։</string>\n  <string name=\"unpatch_description\">Համոզվա՞ծ եք, որ ցանկանում եք հեռացնել կարկատանը այս հավելվածից:</string>\n  <string name=\"downloader_invalid_version\">Ներբեռնիչը չբերեց ճիշտ տարբերակը</string>\n  <string name=\"downloader_app_not_found\">Ներբեռնիչը չգտավ հավելվածը</string>\n  <string name=\"downloader_error\">Ներբեռնիչի սխալ՝ %s</string>\n  <string name=\"no_downloaders_installed\">Հավելվածների ներբեռնողներ տեղադրված չեն:</string>\n  <string name=\"no_downloaders_trusted\">Հավելվածների ներբեռնողներին չի վստահվել: Խնդրում ենք ստուգել ձեր կարգավորումները:</string>\n  <string name=\"already_patched\">Արդեն կարկատված է</string>\n  <string name=\"patch_selector_sheet_filter_title\">Զտել</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Համատեղելիություն</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Փաթեթներ</string>\n  <string name=\"patch_selector_sheet_actions_title\">Գործողություններ</string>\n  <string name=\"restore_default_selection\">Վերականգնել լռելյայն ընտրությունը</string>\n  <string name=\"deselect_all\">Ապաընտրել բոլորը</string>\n  <string name=\"invert_selection\">Շրջել ընտրությունը</string>\n  <string name=\"deselect_all_except\">Ապաընտրել բոլորը, բացի %s-ից</string>\n  <string name=\"scope_dialog_title\">Կիրառել</string>\n  <string name=\"scope_all_patches\">Բոլոր կարկատանները</string>\n  <string name=\"scope_bundle_patches\">Միայն %s</string>\n  <string name=\"string_option_menu_description\">Ավելի շատ տարբերակներ</string>\n  <string name=\"option_preset_custom_value\">Հատուկ արժեք</string>\n  <string name=\"path_selector\">Ընտրել պահեստից</string>\n  <string name=\"path_selector_parent_dir\">Նախորդ գրացուցակ</string>\n  <string name=\"path_selector_dirs\">Գրացուցակներ</string>\n  <string name=\"path_selector_files\">Ֆայլեր</string>\n  <string name=\"show_password_field\">Ցույց տալ գաղտնաբառը</string>\n  <string name=\"hide_password_field\">Թաքցնել գաղտնաբառը</string>\n  <string name=\"installer\">Տեղադրող</string>\n  <string name=\"install_app\">Տեղադրել</string>\n  <string name=\"install_app_success\">Հավելվածը տեղադրված է</string>\n  <string name=\"install_app_fail\">Չհաջողվեց տեղադրել հավելվածը՝ %s</string>\n  <string name=\"reinstall_app_fail\">Չհաջողվեց վերատեղադրել հավելվածը՝ %s</string>\n  <string name=\"uninstall_app_fail\">Չհաջողվեց ապատեղադրել հավելվածը՝ %s</string>\n  <string name=\"open_app\">Բացել</string>\n  <string name=\"save_apk\">Պահպանել APK</string>\n  <string name=\"save_apk_success\">APK-ը պահպանված է</string>\n  <string name=\"sign_fail\">Չհաջողվեց ստորագրել APK-ն՝ %s</string>\n  <string name=\"save_logs\">Պահպանել մատյանները</string>\n  <string name=\"save_as_file\">Պահպանել ֆայլերում</string>\n  <string name=\"export_patcher_logs\">Արտահանել կարկատիչի մատյանները</string>\n  <string name=\"save_logs_success\">Մատյանները պահպանվեցին</string>\n  <string name=\"downloader_activity_dialog_body\">Պահանջվում է օգտատիրոջ փոխազդեցություն՝ այս ներբեռնողով շարունակելու համար:</string>\n  <string name=\"select_install_type\">Ընտրել տեղադրման տեսակը</string>\n  <string name=\"patcher_step_group_preparing\">Պատրաստվում է</string>\n  <string name=\"patcher_step_load_patches\">Բեռնել կարկատանները</string>\n  <string name=\"patcher_step_unpack\">Պատրաստել թարմացնողը</string>\n  <string name=\"patcher_step_group_patching\">Կարկատում</string>\n  <string name=\"patcher_step_group_saving\">Պահպանում</string>\n  <string name=\"patcher_step_write_patched\">Գրել կարկատված APK ֆայլը</string>\n  <string name=\"patcher_step_sign_apk\">Ստորագրել կարկատված APK ֆայլը</string>\n  <string name=\"patcher_notification_title\">Կարկատումը ընթացքի մեջ է…</string>\n  <string name=\"patcher_notification_text\">Հպեք՝ վերադառնալու համար կարկատիչին</string>\n  <string name=\"patcher_stop_confirm_title\">Դադարեցնել կարկատիչը</string>\n  <string name=\"patcher_stop_confirm_description\">Համոզվա՞ծ եք, որ ցանկանում եք դադարեցնել կարկատման գործընթացը:</string>\n  <string name=\"patcher_install_in_progress\">Տեղադրումն ընթացքի մեջ է: Խնդրում ենք սպասել</string>\n  <string name=\"execute_patches\">Կատարել կարկատաններ</string>\n  <string name=\"executing_patch\">Կատարել %s</string>\n  <string name=\"failed_to_execute_patch\">Չհաջողվեց կատարել %s-ը</string>\n  <string name=\"step_completed\">ավարտված է</string>\n  <string name=\"step_failed\">ձախողված է</string>\n  <string name=\"step_running\">գործարկվում է</string>\n  <string name=\"step_waiting\">սպասում է</string>\n  <string name=\"expand_content\">ընդլայնել</string>\n  <string name=\"collapse_content\">ծալել</string>\n  <string name=\"drag_handle\">վերադասավորել</string>\n  <string name=\"more\">Ավելին</string>\n  <string name=\"less\">Քիչ</string>\n  <string name=\"continue_\">Շարունակել</string>\n  <string name=\"dismiss\">Մերժել</string>\n  <string name=\"view_announcement\">Դիտել հայտարարությունը</string>\n  <string name=\"permanent_dismiss\">Այլևս չցուցադրել</string>\n  <string name=\"donate\">Նվիրաբերել</string>\n  <string name=\"website\">Կայք</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Կապ</string>\n  <string name=\"license\">Լիցենզիա</string>\n  <string name=\"source\">Աղբյուր</string>\n  <string name=\"repository\">Շտեմարան</string>\n  <string name=\"bundle_information_by_author\">Ըստ %1$s-ի</string>\n  <string name=\"version\">Տարբերակ</string>\n  <string name=\"version_compatibility_warning\">Ընտրված տարբերակը կարող է անհամատեղելի լինել ընտրված կարկատանների հետ:</string>\n  <string name=\"submit_feedback\">Ներկայացնել խնդիր կամ կարծիք</string>\n  <string name=\"submit_feedback_description\">Օգնեք մեզ բարելավել այս հավելվածը</string>\n  <string name=\"developer_options\">Ծրագրավորողի ընտրանքներ</string>\n  <string name=\"developer_options_description\">Խնդիրների վերացման ընտրանքներ</string>\n  <string name=\"patches_update_success\">Թարմացումը հաջողվեց</string>\n  <string name=\"patches_update_unavailable\">Թարմացում հասանելի չէ</string>\n  <string name=\"view_patches\">Դիտել կարկատանները</string>\n  <string name=\"patches_view_any_version\">Ցանկացած տարբերակ</string>\n  <string name=\"patches_view_any_package\">Ցանկացած փաթեթ</string>\n  <string name=\"patches_delete_single_dialog_description\">Համոզվա՞ծ եք, որ ցանկանում եք ջնջել «%s»-ը:</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Համոզվա՞ծ եք, որ ցանկանում եք ջնջել ընտրված կարկատանները:</string>\n  <string name=\"announcements\">Հայտարարություններ</string>\n  <string name=\"archive\">Արխիվ</string>\n  <string name=\"about_revanced_manager\">ReVanced Manager-ի մասին</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager-ը Android հավելված է, որն օգտագործում է ReVanced Patcher-ը՝ Android հավելվածները կարկատելու համար։ Այն թույլ է տալիս ներբեռնել և կարկատել հավելվածները հատուկ կարկատաններով, ինչպես նաև կառավարել կարկատման գործընթացը։</string>\n  <string name=\"developer_options_taps\">մնացել է %d հպում</string>\n  <string name=\"developer_options_enabled\">Ծրագրավորողի ընտրանքները միացված են</string>\n  <string name=\"developer_options_already_enabled\">Ծրագրավորողի ընտրանքներն արդեն միացված են</string>\n  <string name=\"update_available\">Թարմացում հասանելի է</string>\n  <string name=\"current_version\">Ներկայիս տարբերակ՝ %s</string>\n  <string name=\"new_version\">Նոր տարբերակ՝ %s</string>\n  <string name=\"ready_to_install_update\">Պատրաստ է թարմացումը տեղադրելու համար</string>\n  <string name=\"update_completed\">Թարմացումը տեղադրված է</string>\n  <string name=\"install_update_manager_failed\">Չհաջողվեց տեղադրել թարմացումը</string>\n  <string name=\"manual_update_check\">Ստուգել թարմացումները</string>\n  <string name=\"view_update\">Դիտել թարմացումը</string>\n  <string name=\"manual_update_check_description\">Ձեռքով ստուգել թարմացումները</string>\n  <string name=\"update_checking_manager\">Ստուգել թարմացումները գործարկման ժամանակ</string>\n  <string name=\"update_checking_manager_description\">Ստուգել ReVanced Manager-ի նոր տարբերակները հավելվածը գործարկելիս</string>\n  <string name=\"update_checking_downloader\">Ստուգել ReVanced ներբեռնողների թարմացումները գործարկման ժամանակ</string>\n  <string name=\"update_checking_downloader_description\">Ստուգել տեղադրված ReVanced ներբեռնողների թարմացումները, երբ հավելվածը գործարկվում է</string>\n  <string name=\"manager_prereleases\">Օգտագործել նախնական թողարկումներ</string>\n  <string name=\"manager_prereleases_description\">Օգտագործել ReVanced Manager-ի նախնական թողարկման տարբերակները</string>\n  <string name=\"prereleases_warning\">Նախնական թողարկման տարբերակները կարող են անկայուն լինել և պարունակել սխալներ: Դուք կարող եք բախվել խափանումների, տվյալների կորստի կամ այլ անսպասելի խնդիրների: Միացրեք սա միայն այն դեպքում, եթե հարմարավետ եք այս ռիսկերի հետ:</string>\n  <string name=\"changelog\">Դիտել փոփոխությունների մատյանը</string>\n  <string name=\"changelog_loading\">Բեռնվում է փոփոխությունների մատյանը</string>\n  <string name=\"changelog_download_fail\">Չհաջողվեց ներբեռնել փոփոխությունների մատյանը՝ %s</string>\n  <string name=\"changelog_description\">Դիտեք այս թարմացման վերջին փոփոխությունները</string>\n  <string name=\"battery_optimization_notification\">Մարտկոցի օպտիմալացումները պետք է անջատվեն, որպեսզի ReVanced Manager-ը ճիշտ աշխատի ֆոնին: Սեղմեք այստեղ՝ օպտիմալացումներն անջատելու համար:</string>\n  <string name=\"installing_manager_update\">Տեղադրվում է թարմացումը…</string>\n  <string name=\"downloading_manager_update\">Ներբեռնվում է թարմացումը…</string>\n  <string name=\"download_manager_failed\">Չհաջողվեց ներբեռնել թարմացումը՝ %s</string>\n  <string name=\"cancel\">Չեղարկել</string>\n  <string name=\"save\">Պահպանել</string>\n  <string name=\"save_with_count\">Պահպանել (%1$s)</string>\n  <string name=\"update\">Թարմացնել</string>\n  <string name=\"empty\">Դատարկ</string>\n  <string name=\"installing_message\">Հպեք <b>Թարմացնել</b>, երբ հուշում հայտնվի:\\nReVanced Manager-ը կփակվի թարմացնելիս:</string>\n  <string name=\"no_changelogs_found\">Փոփոխությունների մատյաններ չեն գտնվել</string>\n  <string name=\"just_now\">Հենց հիմա</string>\n  <string name=\"minutes_ago\">%s րոպե առաջ</string>\n  <string name=\"hours_ago\">%s ժամ առաջ</string>\n  <string name=\"days_ago\">%s օր առաջ</string>\n  <string name=\"invalid_date\">Անվավեր ամսաթիվ</string>\n  <string name=\"disable_battery_optimization\">Անջատել մարտկոցի օպտիմալացումը</string>\n  <string name=\"input_dialog_value_invalid\">Անվավեր արժեք</string>\n  <string name=\"option_required\">Այս ընտրանքը պարտադիր է</string>\n  <string name=\"required_options_screen\">Պարտադիր ընտրանքներ</string>\n  <string name=\"failed_to_check_updates\">Չհաջողվեց ստուգել թարմացումները՝ %s</string>\n  <string name=\"no_update_available\">Թարմացում հասանելի չէ</string>\n  <string name=\"no_announcements_found\">Հայտարարություններ չեն գտնվել</string>\n  <string name=\"update_check\">Ստուգվում են թարմացումները…</string>\n  <string name=\"dismiss_temporary\">Ոչ հիմա</string>\n  <string name=\"update_available_dialog_description\">ReVanced Manager-ի նոր տարբերակը (%s) հասանելի է:</string>\n  <string name=\"failed_to_download_update\">Չհաջողվեց ներբեռնել թարմացումը՝ %s</string>\n  <string name=\"download\">Ներբեռնել</string>\n  <string name=\"download_confirmation_metered\">Դուք ներկայումս սահմանափակ կապի վրա եք, և ձեր ծառայություն մատուցողից կարող են գանձվել տվյալների վճարներ:\\n\\nԴեռևս ցանկանու՞մ եք շարունակել:</string>\n  <string name=\"download_update_confirmation\">Ներբեռնե՞լ թարմացումը:</string>\n  <string name=\"no_contributors_found\">Ներդրողներ չեն գտնվել</string>\n  <string name=\"select\">Ընտրել</string>\n  <string name=\"select_deselect_all\">Ընտրել կամ ապաընտրել բոլորը</string>\n  <string name=\"select_patches_type_dialog_description\">Ավելացնել նոր կարկատաններ URL-ից կամ տեղական ֆայլերից</string>\n  <string name=\"local_patches_description\">Ավելացնել կարկատաններ տեղական պահեստից:</string>\n  <string name=\"remote_patches_description\">Ավելացնել կարկատաններ URL-ից: Կարկատանները կարող են ավտոմատ կերպով թարմացվել:</string>\n  <string name=\"recommended\">Առաջարկվող</string>\n  <string name=\"installation_failed_dialog_title\">Տեղադրումը ձախողվեց</string>\n  <string name=\"installation_cancelled_dialog_title\">Տեղադրումը չեղարկվեց</string>\n  <string name=\"installation_blocked_dialog_title\">Տեղադրումը արգելափակվեց</string>\n  <string name=\"installation_conflict_dialog_title\">Տեղադրման կոնֆլիկտ</string>\n  <string name=\"installation_incompatible_dialog_title\">Տեղադրումը անհամատեղելի է</string>\n  <string name=\"installation_invalid_dialog_title\">Տեղադրումը անվավեր է</string>\n  <string name=\"installation_storage_issue_dialog_title\">Բավարար պահեստ չկա</string>\n  <string name=\"installation_timeout_dialog_title\">Տեղադրման ժամանակը սպառվեց</string>\n  <string name=\"installation_failed_description\">Տեղադրումը ձախողվեց անհայտ պատճառով: Կրկին փորձե՞լ:</string>\n  <string name=\"installation_aborted_description\">Տեղադրումը ձեռքով չեղարկվեց: Կրկին փորձե՞լ:</string>\n  <string name=\"installation_blocked_description\">Տեղադրումը արգելափակվեց: Վերանայեք ձեր սարքի անվտանգության կարգավորումները և կրկին փորձեք:</string>\n  <string name=\"installation_conflict_description\">Տեղադրումը կանխվեց հավելվածի առկա տեղադրման պատճառով: Ապատեղադրե՞լ տեղադրված հավելվածը և կրկին փորձել:</string>\n  <string name=\"installation_incompatible_description\">Հավելվածն անհամատեղելի է այս սարքի հետ: Օգտագործեք այս սարքի հետ համատեղելի APK և կրկին փորձեք:</string>\n  <string name=\"installation_invalid_description\">Հավելվածը անվավեր է: Ապատեղադրե՞լ հավելվածը և կրկին փորձել:</string>\n  <string name=\"installation_storage_issue_description\">Հավելվածը չտեղադրվեց անբավարար պահեստի պատճառով: Ազատեք տարածք և կրկին փորձեք:</string>\n  <string name=\"installation_timeout_description\">Տեղադրումը չափազանց երկար տևեց: Կրկին փորձե՞լ:</string>\n  <string name=\"reinstall\">Վերատեղադրել</string>\n  <string name=\"show\">Ցույց տալ</string>\n  <string name=\"debugging\">Վրիպազերծում</string>\n  <string name=\"about_device\">Սարքի մասին</string>\n  <string name=\"enter_url\">Մուտքագրել URL</string>\n  <string name=\"next\">Հաջորդ</string>\n  <string name=\"auto_update\">Ինքնաշխատ թարմացում</string>\n  <string name=\"add_patches\">Ավելացնել կարկատաններ</string>\n  <string name=\"auto_update_description\">Ավտոմատ թարմացնել, երբ նոր տարբերակ հասանելի լինի</string>\n  <string name=\"patches_prereleases\">Օգտագործել նախնական թողարկումներ</string>\n  <string name=\"patches_prereleases_description\">Օգտագործել %s-ի նախնական թողարկման տարբերակները</string>\n  <string name=\"patches_url\">Կարկատանների URL</string>\n  <string name=\"incompatible_patches_dialog\">Այս կարկատանները համատեղելի չեն ընտրված հավելվածի տարբերակի (%1$s) հետ:\\n\\nՍեղմեք կարկատանների վրա՝ ավելի մանրամասն տեղեկություններ տեսնելու համար:</string>\n  <string name=\"incompatible_patch\">Անհամատեղելի կարկատան</string>\n  <string name=\"any_version\">Ցանկացած</string>\n  <string name=\"never_show_again\">Երբեք այլևս չցուցադրել</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Ցուցադրել թարմացման հաղորդագրությունը գործարկման ժամանակ</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Ցուցադրել բացվող ծանուցում, երբ նոր թարմացում հասանելի լինի գործարկման ժամանակ</string>\n  <string name=\"failed_to_import_keystore\">Չհաջողվեց ներմուծել բանալիների պահեստը</string>\n  <string name=\"export\">Արտահանել</string>\n  <string name=\"confirm\">Հաստատել</string>\n  <string name=\"new_announcement\">Նոր հայտարարություն՝\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d կարկատան</item>\n    <item quantity=\"other\">%d կարկատան</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Կատարել %d կարկատան</item>\n    <item quantity=\"other\">Կատարել %d կարկատան</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d ընտրված</item>\n    <item quantity=\"other\">%d ընտրված</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-in-rID/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Penambal</string>\n  <string name=\"patches\">Tambalan</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Manager</string>\n  <string name=\"onboarding_welcome_to\">Selamat datang di</string>\n  <string name=\"onboarding_welcome_back\">Hai! Ini yang baru</string>\n  <string name=\"onboarding_apps_subtitle\">Anda dapat memilih aplikasi untuk ditambal sekarang atau nanti</string>\n  <string name=\"onboarding_updates_subtitle\">Konfigurasikan pembaruan otomatis untuk menjaga ReVanced Manager dan tambalan tetap terbarui</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager akan terhubung ke %s untuk mengunduh versi awal jika perangkat Anda terhubung ke internet.</string>\n  <string name=\"retry\">Coba lagi</string>\n  <string name=\"onboarding_skip\">Lewati untuk sekarang</string>\n  <string name=\"onboarding_recommended_version\">Versi yang disarankan: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Lewati perizinan?</string>\n  <string name=\"onboarding_permissions_skip_description\">Tanpa perizinan yang diperlukan, beberapa fitur mungkin tidak berfungsi dengan benar. Anda dapat memberikannya nanti di pengaturan aplikasi.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Tetap lewati</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager memerlukan beberapa perizinan agar berfungsi dengan benar</string>\n  <string name=\"permission_install_apps\">Pasang aplikasi tidak dikenal</string>\n  <string name=\"permission_install_apps_description\">Diperlukan untuk memasang aplikasi yang ditambal</string>\n  <string name=\"permission_notifications\">Pemberitahuan</string>\n  <string name=\"permission_battery\">Optimisasi baterai</string>\n  <string name=\"permission_battery_description\">Mencegah penambalan terganggu di latar belakang</string>\n  <string name=\"permission_grant\">Berikan</string>\n  <string name=\"downloader_host_permission_label\">Host pengunduh ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Digunakan untuk mengontrol akses ke pengunduh ReVanced Manager. Hanya ReVanced Manager yang memilikinya.</string>\n  <string name=\"toast_copied_to_clipboard\">Disalin!</string>\n  <string name=\"copy_to_clipboard\">Salin ke papan klip</string>\n  <string name=\"dashboard\">Beranda</string>\n  <string name=\"settings\">Pengaturan</string>\n  <string name=\"select_app\">Pilih aplikasi</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d dipilih</string>\n  <string name=\"fab_patch_app\">Tambal aplikasi</string>\n  <string name=\"fab_add_patches\">Tambahkan tambalan</string>\n  <string name=\"new_downloader_notification\">Pengunduh baru tersedia. Klik di sini untuk mengonfigurasinya.</string>\n  <string name=\"unsupported_architecture_warning\">Penambalan pada arsitektur perangkat ini tidak didukung dan kemungkinan besar akan gagal.</string>\n  <string name=\"import_\">Impor</string>\n  <string name=\"import_patches\">Impor tambalan</string>\n  <string name=\"file_field_set\">Dipilih</string>\n  <string name=\"file_field_not_set\">Tidak dipilih</string>\n  <string name=\"field_not_set\">Tidak disetel</string>\n  <string name=\"patches_missing\">Hilang</string>\n  <string name=\"patches_error\">Kesalahan</string>\n  <string name=\"patches_error_description\">Tambalan tidak dapat dimuat. Klik untuk melihat kesalahan</string>\n  <string name=\"patches_not_downloaded\">Tambalan belum diunduh.</string>\n  <string name=\"patches_name_default\">Tambalan</string>\n  <string name=\"patches_name_fallback\">Tanpa nama</string>\n  <string name=\"android_11_bug_dialog_title\">Bug Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">Izin pemasangan aplikasi harus diberikan sebelumnya untuk menghindari bug di sistem Android 11 yang akan berdampak negatif pada pengalaman pengguna.</string>\n  <string name=\"no_network_toast\">Tidak ada koneksi internet yang tersedia</string>\n  <string name=\"selected_app_meta_any_version\">Versi apa pun yang tersedia</string>\n  <string name=\"app_source_dialog_title\">Pilih sumber</string>\n  <string name=\"app_source_dialog_option_auto\">Otomatis</string>\n  <string name=\"app_source_dialog_option_auto_description\">Gunakan aplikasi yang terpasang, lalu APK yang diunduh, lalu pengunduh yang tersedia</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Tidak ada aplikasi atau pengunduh yang cocok tersedia</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Aplikasi yang di-mount tidak dapat ditambal lagi tanpa akses root</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Versi %s tidak cocok dengan versi yang disarankan</string>\n  <string name=\"patch_item_description\">Mulai menambal aplikasi</string>\n  <string name=\"patch_selector_item\">Pilih tambalan</string>\n  <string name=\"patch_selector_item_description\">%d tambalan dipilih</string>\n  <string name=\"patch_selection_changed_warning\">Pilihan gtambalan telah diubah</string>\n  <string name=\"no_patches_selected\">Tidak ada tambalan yang dipilih</string>\n  <string name=\"network_unavailable_warning\">Perangkat Anda tidak terhubung ke internet. Pengunduhan akan gagal nanti.</string>\n  <string name=\"network_metered_warning\">Anda saat ini menggunakan koneksi berbayar. Biaya data dari penyedia layanan Anda mungkin berlaku.</string>\n  <string name=\"apk_source_selector_item\">Pilih sumber APK</string>\n  <string name=\"apk_source_auto\">Otomatis</string>\n  <string name=\"apk_source_auto_installed\">Otomatis · Menggunakan APK yang terpasang</string>\n  <string name=\"apk_source_auto_downloaded\">Otomatis · Menggunakan APK yang diunduh</string>\n  <string name=\"apk_source_auto_downloader\">Otomatis · Menggunakan pengunduh yang tersedia</string>\n  <string name=\"apk_source_auto_storage\">Otomatis · Pilih dari penyimpanan</string>\n  <string name=\"apk_source_downloader\">Menggunakan %s</string>\n  <string name=\"apk_source_installed\">Menggunakan APK yang terpasang</string>\n  <string name=\"apk_source_local\">Menggunakan berkas APK lokal</string>\n  <string name=\"apk_source_downloaded\">Sudah diunduh</string>\n  <string name=\"legacy_import_failed\">Tidak dapat mengimpor pengaturan lama</string>\n  <string name=\"auto_updates_dialog_title\">Konfigurasi pembaruan</string>\n  <string name=\"auto_updates_dialog_description\">Apakah Anda ingin ReVanced Manager memeriksa pembaruan secara berkala untuk komponen berikut?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Tambalan ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Pengunduh</string>\n  <string name=\"auto_updates_dialog_note\">Pengaturan ini dapat diubah nanti.\n\n    ReVanced Manager akan terhubung ke %s untuk mengunduh versi awal jika perangkat Anda terhubung ke internet.</string>\n  <string name=\"announcements_filter_tag\">Saring berdasarkan tag</string>\n  <string name=\"announcements_show_archived\">Tampilkan arsip</string>\n  <string name=\"general\">Umum</string>\n  <string name=\"general_description\">Bahasa, tema, warna dinamis</string>\n  <string name=\"updates\">Pembaruan</string>\n  <string name=\"updates_description\">Periksa pembaruan dan lihat daftar perubahan</string>\n  <string name=\"downloads\">Unduhan</string>\n  <string name=\"downloads_description\">Pengunduh dan aplikasi yang diunduh</string>\n  <string name=\"import_export\">Impor &amp; ekspor</string>\n  <string name=\"import_export_description\">Keystore, pilihan dan pemilihan tambalan</string>\n  <string name=\"advanced\">Lanjutan</string>\n  <string name=\"advanced_description\">URL API, batas memori, debug</string>\n  <string name=\"safeguards_toggled_warning\">Pengamanan telah daktifkan</string>\n  <string name=\"about\">Tentang</string>\n  <string name=\"about_app_name\">Tentang %1$s</string>\n  <string name=\"opensource_licenses\">Lisensi sumber terbuka</string>\n  <string name=\"opensource_licenses_description\">Lihat semua pustaka yang digunakan untuk membuat aplikasi ini</string>\n  <string name=\"contributors\">Kontributor</string>\n  <string name=\"contributors_description\">Lihat kontributor ReVanced</string>\n  <string name=\"dynamic_color\">Warna dinamis</string>\n  <string name=\"dynamic_color_description\">Sesuaikan warna dengan wallpaper</string>\n  <string name=\"pure_black_theme\">Tema hitam murni</string>\n  <string name=\"pure_black_theme_description\">Gunakan latar belakang hitam murni untuk tema gelap</string>\n  <string name=\"theme\">Tema</string>\n  <string name=\"theme_description\">Pilih antara tema terang atau gelap</string>\n  <string name=\"language\">Bahasa</string>\n  <string name=\"language_description\">Pilih bahasa tampilan aplikasi</string>\n  <string name=\"language_system_default\">Bawaan sistem</string>\n  <string name=\"search_languages\">Cari bahasa…</string>\n  <string name=\"safeguards\">Pengaman</string>\n  <string name=\"patch_compat_check\">Nonaktifkan pemeriksaan kompatibilitas versi</string>\n  <string name=\"patch_compat_check_description\">Jangan batasi tambalan pada versi aplikasi yang kompatibel</string>\n  <string name=\"patch_compat_check_confirmation\">Memilih tambalan yang tidak kompatibel dapat mengakibatkan aplikasi rusak.\\n\\nApakah Anda tetap ingin melanjutkan?</string>\n  <string name=\"suggested_version_safeguard\">Perlukan versi aplikasi yang disarankan</string>\n  <string name=\"suggested_version_safeguard_description\">Terapkan pemilihan versi aplikasi yang disarankan</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Memilih aplikasi yang bukan versi yang disarankan dapat menyebabkan masalah yang tidak terduga.\\n\\nApakah Anda tetap ingin melanjutkan?</string>\n  <string name=\"patch_selection_safeguard\">Izinkan mengubah pilihan dan opsi tambalan</string>\n  <string name=\"patch_selection_safeguard_description\">Jangan cegah pemilihan atau penghapusan pilihan tambalan serta penyesuaian opsi</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Mengubah pemilihan tambalan dapat menyebabkan masalah yang tidak terduga.\\n\\nTetap aktifkan?</string>\n  <string name=\"universal_patches_safeguard\">Izinkan menggunakan tambalan universal</string>\n  <string name=\"universal_patches_safeguard_description\">Jangan cegah penggunaan tambalan universal</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Tambalan universal tidak diuji sebaik tambalan yang menargetkan aplikasi tertentu.\\n\\nTetap aktifkan?</string>\n  <string name=\"keystore\">Keystore</string>\n  <string name=\"patches_selections\">Pilihan tambalan</string>\n  <string name=\"import_keystore\">Impor keystore</string>\n  <string name=\"import_keystore_description\">Impor keystore khusus</string>\n  <string name=\"import_keystore_dialog_title\">Masukkan kredensial keystore</string>\n  <string name=\"import_keystore_dialog_description\">Anda perlu memasukkan kredensial keystore untuk mengimpornya.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Nama Pengguna (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Kata Sandi</string>\n  <string name=\"import_keystore_dialog_button\">Impor</string>\n  <string name=\"import_keystore_wrong_credentials\">Kredensial keystore salah</string>\n  <string name=\"import_keystore_success\">Keystore diimpor</string>\n  <string name=\"export_keystore\">Ekspor keystore</string>\n  <string name=\"export_keystore_description\">Ekspor keystore saat ini</string>\n  <string name=\"export_keystore_unavailable\">Tidak ada keystore untuk diekspor</string>\n  <string name=\"export_keystore_success\">Keystore diekspor</string>\n  <string name=\"regenerate_keystore\">Buat ulang keystore</string>\n  <string name=\"regenerate_keystore_description\">Buat keystore baru</string>\n  <string name=\"regenerate_keystore_dialog_description\">Anda akan membuat ulang keystore yang akan digunakan manajer selama proses penambalan.\\n\\nAnda tidak akan dapat memperbarui aplikasi yang sebelumnya diinstal dari sumber ini.</string>\n  <string name=\"regenerate_keystore_success\">Keystore berhasil diganti</string>\n  <string name=\"import_patch_selection\">Impor pilihan tambalan</string>\n  <string name=\"import_patch_selection_description\">Impor pilihan tambalan dari berkas JSON</string>\n  <string name=\"import_patch_selection_fail\">Tidak dapat mengimpor pilihan tambalan: %s</string>\n  <string name=\"import_patch_selection_success\">Pilihan tambalan diimpor</string>\n  <string name=\"select_bundle_for_import\">Pilih bundel untuk diimpor ke</string>\n  <string name=\"export_patch_selection\">Ekspor pilihan tambalan</string>\n  <string name=\"export_patch_selection_description\">Ekspor pilihan tambalan ke berkas JSON</string>\n  <string name=\"export_patch_selection_fail\">Tidak dapat mengekspor pilihan tambalan: %s</string>\n  <string name=\"export_patch_selection_success\">Pilihan tambalan diekspor</string>\n  <string name=\"select_bundle_for_export\">Pilih bundel untuk diekspor dari</string>\n  <string name=\"patch_selection_packages\">Aplikasi dengan pilihan tersimpan</string>\n  <string name=\"patch_selection_entries\">Total tambalan yang dipilih</string>\n  <string name=\"reset_configuration\">Atur ulang konfigurasi</string>\n  <string name=\"reset_patch_selection\">Pilihan tambalan</string>\n  <string name=\"reset_patch_selection_description\">Atur ulang pilihan tambalan yang tersimpan</string>\n  <string name=\"reset_patch_options\">Pilihan tambalan</string>\n  <string name=\"reset_patch_options_description\">Atur ulang opsi tambalan yang tersimpan</string>\n  <string name=\"reset_patch_selection_success\">Pilihan tambalan telah diatur ulang</string>\n  <string name=\"patch_selection_reset_all\">Atur ulang pilihan tambalan secara global</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Anda akan mengatur ulang semua pilihan tambalan. Anda perlu memilih setiap tambalan secara manual lagi.</string>\n  <string name=\"patch_selection_reset_all_description\">Mengatur ulang semua pilihan tambalan</string>\n  <string name=\"patch_selection_reset_package\">Atur ulang pilihan tambalan untuk aplikasi</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Anda akan mengatur ulang pilihan tambalan untuk aplikasi \\\"%s\\\". Anda harus memilih setiap tambalan secara manual lagi.</string>\n  <string name=\"patch_selection_reset_package_description\">Mengatur ulang pilihan patch untuk satu aplikasi</string>\n  <string name=\"patch_selection_reset_patches\">Atur ulang pilihan patch (tunggal)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Anda akan mengatur ulang pilihan patch untuk \\\"%s\\\". Anda harus memilih setiap patch secara manual lagi.</string>\n  <string name=\"patch_selection_reset_patches_description\">Mengatur ulang pilihan patch untuk koleksi patch tertentu</string>\n  <string name=\"patch_options_reset_package\">Atur ulang opsi patch untuk aplikasi</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Anda akan mengatur ulang opsi patch untuk aplikasi \\\"%s\\\". Anda harus menerapkan kembali setiap opsi lagi.</string>\n  <string name=\"patch_options_reset_package_description\">Mengatur ulang opsi patch untuk satu aplikasi</string>\n  <string name=\"patch_options_reset_patches\">Atur ulang opsi patch (tunggal)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Anda akan mengatur ulang opsi patch untuk \\\"%s\\\". Anda harus menerapkan kembali setiap opsi lagi.</string>\n  <string name=\"patch_options_reset_patches_description\">Mengatur ulang opsi patch untuk koleksi patch tertentu</string>\n  <string name=\"patch_options_reset_all\">Atur ulang opsi patch secara global</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Anda akan mengatur ulang semua opsi patch. Anda harus menerapkan kembali setiap opsi lagi.</string>\n  <string name=\"patch_options_reset_all_description\">Mengatur ulang semua opsi patch</string>\n  <string name=\"downloaders\">Pengunduh</string>\n  <string name=\"downloader_prereleases\">Gunakan pra-rilis</string>\n  <string name=\"downloader_prereleases_description\">Gunakan versi pra-rilis pengunduh utama</string>\n  <string name=\"downloader_state_loaded\">Dimuat</string>\n  <string name=\"downloader_state_failed\">Gagal memuat. Klik untuk detail selengkapnya</string>\n  <string name=\"downloader_state_missing\">Hilang</string>\n  <string name=\"downloader_delete_apps_title\">Hapus aplikasi yang dipilih</string>\n  <string name=\"downloader_delete_apps_description\">Apakah Anda yakin ingin menghapus aplikasi yang dipilih?</string>\n  <string name=\"downloader_delete_single_description\">Apakah Anda yakin ingin menghapus \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Tidak ditemukan aplikasi yang diunduh.</string>\n  <string name=\"downloader_settings_no_apps_description\">Aplikasi yang diunduh melalui ReVanced Manager akan muncul di sini.</string>\n  <string name=\"downloader_url\">URL Pengunduh</string>\n  <string name=\"downloader_add\">Tambah Pengunduh</string>\n  <string name=\"select_downloader_type_dialog_description\">Tambah pengunduh baru dari URL atau berkas lokal</string>\n  <string name=\"local_downloaders_description\">Tambah pengunduh dari penyimpanan lokal.</string>\n  <string name=\"remote_downloaders_description\">Tambah pengunduh dari URL. Dapat diperbarui secara otomatis.</string>\n  <string name=\"install_revanced_downloaders\">Pasang pengunduh untuk mendapatkan aplikasi langsung di dalam ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Pasang Pengunduh ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Batalkan pemasangan pengunduh?</string>\n  <string name=\"cancel_downloader_install_description\">Pemasangan pengunduh sedang berlangsung. Jika Anda keluar sekarang, unduhan akan dibatalkan.</string>\n  <string name=\"downloader_sources_unavailable_title\">Pengunduh ini hilang</string>\n  <string name=\"downloader_sources_unavailable_description\">Klik tombol perbarui untuk memperbaikinya.</string>\n  <string name=\"downloader_update_failed\">Gagal memperbarui pengunduh: %s</string>\n  <string name=\"downloader_replace_fail\">Gagal mengimpor pengunduh: %s</string>\n  <string name=\"search_apps\">Cari aplikasi…</string>\n  <string name=\"loading_body\">Memuat…</string>\n  <string name=\"downloading_patches\">Mengunduh patch…</string>\n  <string name=\"options\">Opsi</string>\n  <string name=\"ok\">Oke</string>\n  <string name=\"yes\">Ya</string>\n  <string name=\"no\">Tidak</string>\n  <string name=\"edit\">Edit</string>\n  <string name=\"dialog_input_placeholder\">Nilai</string>\n  <string name=\"reset\">Atur ulang</string>\n  <string name=\"share\">Bagikan</string>\n  <string name=\"patch\">Patch</string>\n  <string name=\"select_from_storage\">Pilih dari penyimpanan</string>\n  <string name=\"select_from_storage_description\">Pilih berkas APK dari penyimpanan menggunakan pemilih berkas</string>\n  <string name=\"suggested_version_info\">Versi yang disarankan: %s</string>\n  <string name=\"type_anything\">Ketik apa saja untuk melanjutkan</string>\n  <string name=\"search\">Cari patch…</string>\n  <string name=\"apply\">Terapkan</string>\n  <string name=\"help\">Bantuan</string>\n  <string name=\"back\">Kembali</string>\n  <string name=\"warning\">Peringatan</string>\n  <string name=\"add\">Tambah</string>\n  <string name=\"enable\">Aktifkan</string>\n  <string name=\"disable\">Nonaktifkan</string>\n  <string name=\"close\">Tutup</string>\n  <string name=\"clear\">Hapus</string>\n  <string name=\"system\">Sistem</string>\n  <string name=\"light\">Cerah</string>\n  <string name=\"dark\">Gelap</string>\n  <string name=\"appearance\">Tampilan</string>\n  <string name=\"networking\">Jaringan</string>\n  <string name=\"allow_metered_networks\">Izinkan jaringan terukur</string>\n  <string name=\"allow_metered_networks_description\">Mengizinkan pembaruan otomatis pada jaringan terukur.\\n    Aplikasi mungkin masih akan memperingatkan tentang jaringan terukur untuk operasi manual.</string>\n  <string name=\"downloaded_apps\">Aplikasi yang diunduh</string>\n  <string name=\"process_runtime\">Jalankan Patcher dalam proses lain (eksperimental)</string>\n  <string name=\"process_runtime_description\">Ini lebih cepat dan memungkinkan Patcher menggunakan lebih banyak memori</string>\n  <string name=\"process_runtime_memory_limit\">Batas memori proses Patcher</string>\n  <string name=\"process_runtime_memory_limit_description\">Jumlah memori maksimum yang dapat digunakan oleh proses Penambal</string>\n  <string name=\"debug_logs_export\">Ekspor log debug</string>\n  <string name=\"debug_logs_export_read_failed\">Gagal membaca log (kode keluar %d)</string>\n  <string name=\"debug_logs_export_failed\">Gagal mengekspor catatan</string>\n  <string name=\"debug_logs_export_success\">Log yang diekspor</string>\n  <string name=\"api_url\">URL API</string>\n  <string name=\"api_url_description\">API yang digunakan untuk mengunduh berkas yang diperlukan</string>\n  <string name=\"api_url_dialog_title\">Ubah URL API</string>\n  <string name=\"api_url_dialog_description\">Ubah URL API ReVanced Manager. ReVanced Manager menggunakan API untuk mengunduh patch dan pembaruan.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager terhubung ke API untuk mengunduh patch dan pembaruan. Pastikan Anda memercayainya.</string>\n  <string name=\"api_url_dialog_save\">Tetapkan</string>\n  <string name=\"api_url_dialog_reset\">Atur ulang URL API</string>\n  <string name=\"device\">Perangkat</string>\n  <string name=\"device_android_version\">Versi Android</string>\n  <string name=\"device_model\">Model</string>\n  <string name=\"device_architectures\">Arsitektur CPU</string>\n  <string name=\"device_memory_limit\">Batas memori</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normal) - %2$dMB (Besar)</string>\n  <string name=\"patches_force_download\">Paksa unduh semua patch</string>\n  <string name=\"patches_reset\">Atur ulang patch</string>\n  <string name=\"reset_onboarding\">Atur ulang orientasi</string>\n  <string name=\"reset_onboarding_description\">Tampilkan layar orientasi saat peluncuran aplikasi berikutnya</string>\n  <string name=\"patching\">Melakukan patch</string>\n  <string name=\"signing\">Menandatangani</string>\n  <string name=\"storage\">Penyimpanan</string>\n  <string name=\"no_patch_found\">Tidak ada patch yang ditemukan. Periksa patch Anda</string>\n  <string name=\"tab_apps\">Aplikasi</string>\n  <string name=\"tab_patches\">Patch</string>\n  <string name=\"delete\">Hapus</string>\n  <string name=\"refresh\">Segarkan</string>\n  <string name=\"continue_anyways\">Tetap lanjutkan</string>\n  <string name=\"download_another_version\">Unduh versi lain</string>\n  <string name=\"download_app\">Unduh aplikasi</string>\n  <string name=\"download_apk\">Unduh berkas APK</string>\n  <string name=\"patches_download_fail\">Gagal mengunduh patch: %s</string>\n  <string name=\"api_not_working_title\">Layanan API saat ini tidak berfungsi</string>\n  <string name=\"api_not_working_description\">Beberapa fitur mungkin terpengaruh. Periksa sambungan Anda atau URL API di pengaturan.</string>\n  <string name=\"patches_replace_fail\">Gagal mengimpor patch: %s</string>\n  <string name=\"no_patched_apps_found\">Tidak ditemukan aplikasi yang ditambal</string>\n  <string name=\"no_patched_apps_description\">Saat ini Anda tidak memiliki aplikasi yang ditambal yang kami ketahui. Ubah itu dengan menambal aplikasi pertama Anda!</string>\n  <string name=\"patched_apps_section_title\">Aplikasi yang ditambal</string>\n  <string name=\"patchable_apps_section_title\">Aplikasi yang dapat ditambal</string>\n  <string name=\"no_patches_found\">Tidak ditemukan tambalan</string>\n  <string name=\"no_patches_description\">Anda belum memiliki tambalan apa pun. Tambahkan tambalan dengan mengetuk tombol di bawah!</string>\n  <string name=\"tap_on_patches\">Ketuk patch untuk mendapatkan informasi lebih lanjut tentangnya</string>\n  <string name=\"patches_selected\">%s dipilih</string>\n  <string name=\"incompatible_patches\">Patch yang tidak kompatibel</string>\n  <string name=\"universal_patches\">Patch universal</string>\n  <string name=\"patch_selection_reset_toast\">Pilihan dan opsi patch telah diatur ulang ke pengaturan default yang direkomendasikan</string>\n  <string name=\"patch_options_reset_toast\">Opsi patch telah diatur ulang</string>\n  <string name=\"non_suggested_version_warning_title\">Versi tidak disarankan</string>\n  <string name=\"non_suggested_version_warning_description\">Versi aplikasi yang Anda pilih tidak cocok dengan versi yang disarankan.\\nHarap gunakan versi yang disarankan: %s\\n\\nUntuk tetap melanjutkan, nonaktifkan \\\"Wajibkan versi aplikasi yang disarankan\\\" di pengaturan lanjutan.</string>\n  <string name=\"selection_warning_title\">Berhenti menggunakan default?</string>\n  <string name=\"selection_warning_description\">Disarankan untuk menggunakan pilihan dan opsi patch default. Mengubahnya dapat menyebabkan masalah tak terduga.\\n\\nAnda perlu mengaktifkan \\\"Izinkan mengubah pilihan dan opsi patch\\\" di pengaturan lanjutan sebelum mengaktifkan patch.</string>\n  <string name=\"universal_patch_warning_description\">Patch universal memiliki penggunaan yang lebih umum dan tidak berfungsi seandal patch yang menargetkan aplikasi tertentu. Anda mungkin mengalami masalah saat menggunakannya.\\n\\nAnda perlu mengaktifkan \\\"Izinkan menggunakan patch universal\\\" di pengaturan lanjutan sebelum menggunakan patch universal.</string>\n  <string name=\"this_version\">Versi ini</string>\n  <string name=\"universal\">Aplikasi apa saja</string>\n  <string name=\"search_patches\">Cari patch</string>\n  <string name=\"app_version_not_compatible\">Patch ini tidak kompatibel dengan versi aplikasi yang dipilih (%1$s)\\n\\nHanya kompatibel dengan versi berikut: %2$s</string>\n  <string name=\"continue_with_version\">Lanjutkan dengan versi ini?</string>\n  <string name=\"version_not_compatible\">Tidak semua patch kompatibel dengan versi ini (%s). Apakah Anda ingin tetap melanjutkan?</string>\n  <string name=\"download_application\">Unduh aplikasi?</string>\n  <string name=\"app_not_installed\">Aplikasi yang Anda pilih tidak terpasang. Apakah Anda ingin mengunduhnya?</string>\n  <string name=\"failed_to_load_apk\">Gagal memuat APK</string>\n  <string name=\"split_apk_not_supported\">APK terpisah tidak dapat ditambal</string>\n  <string name=\"loading\">Memuat…</string>\n  <string name=\"not_installed\">Tidak terpasang</string>\n  <string name=\"installed\">Terpasang</string>\n  <string name=\"app_info\">Info aplikasi</string>\n  <string name=\"uninstall\">Hapus instalan</string>\n  <string name=\"unpatch\">Lepas patch</string>\n  <string name=\"repatch\">Terapkan patch ulang</string>\n  <string name=\"install_type\">Tipe instalasi</string>\n  <string name=\"package_name\">Nama paket</string>\n  <string name=\"original_package_name\">Nama paket asli</string>\n  <string name=\"applied_patches\">Patch yang diterapkan</string>\n  <string name=\"view_applied_patches\">Lihat patch yang diterapkan</string>\n  <string name=\"default_install\">Bawaan</string>\n  <string name=\"mount_install\">Mount</string>\n  <string name=\"mounted\">Di-mount</string>\n  <string name=\"not_mounted\">Tidak di-mount</string>\n  <string name=\"mount\">Mount</string>\n  <string name=\"unmount\">Unmount</string>\n  <string name=\"failed_to_mount\">Gagal untuk mount: %s</string>\n  <string name=\"failed_to_unmount\">Gagal untuk unmount: %s</string>\n  <string name=\"unpatch_app\">Batalkan patch aplikasi?</string>\n  <string name=\"unpatch_description\">Anda yakin ingin membatalkan patch aplikasi ini?</string>\n  <string name=\"downloader_invalid_version\">Pengunduh tidak mengambil versi yang benar</string>\n  <string name=\"downloader_app_not_found\">Pengunduh tidak menemukan aplikasi</string>\n  <string name=\"downloader_error\">Kesalahan pengunduh: %s</string>\n  <string name=\"no_downloaders_installed\">Tidak ada pengunduh aplikasi yang terpasang!</string>\n  <string name=\"no_downloaders_trusted\">Tidak ada pengunduh aplikasi yang dipercaya! Harap periksa pengaturan Anda.</string>\n  <string name=\"already_patched\">Sudah di-patch</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filter</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Kompatibilitas</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paket</string>\n  <string name=\"patch_selector_sheet_actions_title\">Tindakan</string>\n  <string name=\"restore_default_selection\">Pulihkan pilihan bawaan</string>\n  <string name=\"deselect_all\">Batalkan semua pilihan</string>\n  <string name=\"invert_selection\">Balikkan pilihan</string>\n  <string name=\"deselect_all_except\">Batalkan pilihan semua kecuali %s</string>\n  <string name=\"scope_dialog_title\">Terapkan ke</string>\n  <string name=\"scope_all_patches\">Semua tambalan</string>\n  <string name=\"scope_bundle_patches\">Hanya %s</string>\n  <string name=\"string_option_menu_description\">Opsi lainnya</string>\n  <string name=\"option_preset_custom_value\">Nilai kustom</string>\n  <string name=\"path_selector\">Pilih dari penyimpanan</string>\n  <string name=\"path_selector_parent_dir\">Direktori sebelumnya</string>\n  <string name=\"path_selector_dirs\">Direktori</string>\n  <string name=\"path_selector_files\">Berkas</string>\n  <string name=\"show_password_field\">Tampilkan sandi</string>\n  <string name=\"hide_password_field\">Sembunyikan sandi</string>\n  <string name=\"installer\">Penginstal</string>\n  <string name=\"install_app\">Instal</string>\n  <string name=\"install_app_success\">Aplikasi terinstal</string>\n  <string name=\"install_app_fail\">Gagal menginstal aplikasi: %s</string>\n  <string name=\"reinstall_app_fail\">Gagal menginstal ulang aplikasi: %s</string>\n  <string name=\"uninstall_app_fail\">Gagal menghapus instalasi aplikasi: %s</string>\n  <string name=\"open_app\">Buka</string>\n  <string name=\"save_apk\">Simpan APK</string>\n  <string name=\"save_apk_success\">APK Tersimpan</string>\n  <string name=\"sign_fail\">Gagal menandatangani APK: %s</string>\n  <string name=\"save_logs\">Simpan log</string>\n  <string name=\"save_as_file\">Simpan ke berkas</string>\n  <string name=\"export_patcher_logs\">Ekspor catatan penambal</string>\n  <string name=\"save_logs_success\">Catatan disimpan</string>\n  <string name=\"downloader_activity_dialog_body\">Interaksi pengguna diperlukan untuk melanjutkan dengan pengunduh ini.</string>\n  <string name=\"select_install_type\">Pilih tipe instalasi</string>\n  <string name=\"patcher_step_group_preparing\">Mempersiapkan</string>\n  <string name=\"patcher_step_load_patches\">Muat patch</string>\n  <string name=\"patcher_step_unpack\">Siapkan penambal</string>\n  <string name=\"patcher_step_group_patching\">Menambal</string>\n  <string name=\"patcher_step_group_saving\">Menyimpan</string>\n  <string name=\"patcher_step_write_patched\">Tulis berkas APK yang di-patch</string>\n  <string name=\"patcher_step_sign_apk\">Tandatangani berkas APK yang di-patch</string>\n  <string name=\"patcher_notification_title\">Penambalan sedang berlangsung…</string>\n  <string name=\"patcher_notification_text\">Ketuk untuk kembali ke penambal</string>\n  <string name=\"patcher_stop_confirm_title\">Hentikan penambal</string>\n  <string name=\"patcher_stop_confirm_description\">Anda yakin ingin menghentikan proses penambalan?</string>\n  <string name=\"patcher_install_in_progress\">Instalasi sedang berlangsung. Mohon tunggu</string>\n  <string name=\"execute_patches\">Jalankan patch</string>\n  <string name=\"executing_patch\">Jalankan %s</string>\n  <string name=\"failed_to_execute_patch\">Gagal menjalankan %s</string>\n  <string name=\"step_completed\">selesai</string>\n  <string name=\"step_failed\">gagal</string>\n  <string name=\"step_running\">berjalan</string>\n  <string name=\"step_waiting\">menunggu</string>\n  <string name=\"expand_content\">perluas</string>\n  <string name=\"collapse_content\">ciutkan</string>\n  <string name=\"drag_handle\">susun ulang</string>\n  <string name=\"more\">Selengkapnya</string>\n  <string name=\"less\">Lebih sedikit</string>\n  <string name=\"continue_\">Lanjutkan</string>\n  <string name=\"dismiss\">Tutup</string>\n  <string name=\"view_announcement\">Lihat pengumuman</string>\n  <string name=\"permanent_dismiss\">Jangan tampilkan ini lagi</string>\n  <string name=\"donate\">Donasi</string>\n  <string name=\"website\">Situs web</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Kontak</string>\n  <string name=\"license\">Lisensi</string>\n  <string name=\"source\">Sumber</string>\n  <string name=\"repository\">Repositori</string>\n  <string name=\"bundle_information_by_author\">Oleh %1$s</string>\n  <string name=\"version\">Versi</string>\n  <string name=\"version_compatibility_warning\">Versi terpilih mungkin tidak cocok dengan tambalan yang dipilih</string>\n  <string name=\"submit_feedback\">Kirim masalah atau masukan</string>\n  <string name=\"submit_feedback_description\">Bantu kami meningkatkan aplikasi ini</string>\n  <string name=\"developer_options\">Opsi developer</string>\n  <string name=\"developer_options_description\">Opsi untuk memecahkan masalah</string>\n  <string name=\"patches_update_success\">Pembaruan berhasil</string>\n  <string name=\"patches_update_unavailable\">Tidak ada pembaruan tersedia</string>\n  <string name=\"view_patches\">Lihat patch</string>\n  <string name=\"patches_view_any_version\">Versi apa pun</string>\n  <string name=\"patches_view_any_package\">Paket apa pun</string>\n  <string name=\"patches_delete_single_dialog_description\">Anda yakin ingin menghapus \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Anda yakin ingin menghapus patch yang dipilih?</string>\n  <string name=\"announcements\">Pengumuman</string>\n  <string name=\"archive\">Arsip</string>\n  <string name=\"about_revanced_manager\">Tentang ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager adalah aplikasi Android yang menggunakan ReVanced Patcher untuk menambal aplikasi Android. Aplikasi ini memungkinkan Anda mengunduh dan menambal aplikasi dengan patch khusus, serta mengelola proses penambalan.</string>\n  <string name=\"developer_options_taps\">%d ketukan tersisa</string>\n  <string name=\"developer_options_enabled\">Opsi developer diaktifkan</string>\n  <string name=\"developer_options_already_enabled\">Opsi developer sudah diaktifkan</string>\n  <string name=\"update_available\">Pembaruan tersedia</string>\n  <string name=\"current_version\">Versi saat ini: %s</string>\n  <string name=\"new_version\">Versi baru: %s</string>\n  <string name=\"ready_to_install_update\">Siap menginstal pembaruan</string>\n  <string name=\"update_completed\">Pembaruan terinstal</string>\n  <string name=\"install_update_manager_failed\">Gagal menginstal pembaruan</string>\n  <string name=\"manual_update_check\">Periksa pembaruan</string>\n  <string name=\"view_update\">Lihat pembaruan</string>\n  <string name=\"manual_update_check_description\">Periksa pembaruan secara manual</string>\n  <string name=\"update_checking_manager\">Periksa pembaruan saat diluncurkan</string>\n  <string name=\"update_checking_manager_description\">Periksa versi baru ReVanced Manager saat aplikasi dimulai</string>\n  <string name=\"update_checking_downloader\">Periksa pembaruan Pengunduh ReVanced saat diluncurkan</string>\n  <string name=\"update_checking_downloader_description\">Periksa pembaruan Pengunduh ReVanced yang terpasang saat aplikasi dimulai</string>\n  <string name=\"manager_prereleases\">Gunakan pra-rilis</string>\n  <string name=\"manager_prereleases_description\">Gunakan versi pra-rilis ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Versi pra-rilis mungkin tidak stabil dan mengandung bug. Anda mungkin mengalami kerusakan, kehilangan data, atau masalah tak terduga lainnya. Hanya aktifkan ini jika Anda nyaman dengan risiko ini.</string>\n  <string name=\"changelog\">Lihat catatan perubahan</string>\n  <string name=\"changelog_loading\">Memuat daftar perubahan</string>\n  <string name=\"changelog_download_fail\">Gagal mengunduh daftar perubahan: %s</string>\n  <string name=\"changelog_description\">Lihat perubahan terbaru dalam pembaruan ini</string>\n  <string name=\"battery_optimization_notification\">Pengoptimalan baterai harus dimatikan agar ReVanced Manager berfungsi dengan benar di latar belakang. Klik di sini untuk mematikan pengoptimalan.</string>\n  <string name=\"installing_manager_update\">Menginstal pembaruan…</string>\n  <string name=\"downloading_manager_update\">Mengunduh pembaruan…</string>\n  <string name=\"download_manager_failed\">Gagal mengunduh pembaruan: %s</string>\n  <string name=\"cancel\">Batal</string>\n  <string name=\"save\">Simpan</string>\n  <string name=\"save_with_count\">Simpan (%1$s)</string>\n  <string name=\"update\">Perbarui</string>\n  <string name=\"empty\">Kosong</string>\n  <string name=\"installing_message\">Ketuk <b>Perbarui</b> saat diminta. ReVanced Manager akan menutup saat memperbarui.</string>\n  <string name=\"no_changelogs_found\">Tidak ada daftar perubahan ditemukan</string>\n  <string name=\"just_now\">Baru saja</string>\n  <string name=\"minutes_ago\">%s mnt lalu</string>\n  <string name=\"hours_ago\">%s jam lalu</string>\n  <string name=\"days_ago\">%s hari lalu</string>\n  <string name=\"invalid_date\">Tanggal tidak valid</string>\n  <string name=\"disable_battery_optimization\">Nonaktifkan pengoptimalan baterai</string>\n  <string name=\"input_dialog_value_invalid\">Nilai tidak valid</string>\n  <string name=\"option_required\">Opsi ini wajib</string>\n  <string name=\"required_options_screen\">Opsi wajib</string>\n  <string name=\"failed_to_check_updates\">Gagal memeriksa pembaruan: %s</string>\n  <string name=\"no_update_available\">Tidak ada pembaruan tersedia</string>\n  <string name=\"no_announcements_found\">Tidak ditemukan pengumuman</string>\n  <string name=\"update_check\">Memeriksa pembaruan…</string>\n  <string name=\"dismiss_temporary\">Nanti saja</string>\n  <string name=\"update_available_dialog_description\">Versi baru ReVanced Manager (%s) tersedia.</string>\n  <string name=\"failed_to_download_update\">Gagal mengunduh pembaruan: %s</string>\n  <string name=\"download\">Unduh</string>\n  <string name=\"download_confirmation_metered\">Anda saat ini menggunakan koneksi berbayar, dan mungkin ada biaya data dari penyedia layanan Anda.\n\nApakah Anda masih ingin melanjutkan?</string>\n  <string name=\"download_update_confirmation\">Unduh pembaruan?</string>\n  <string name=\"no_contributors_found\">Tidak ada kontributor ditemukan</string>\n  <string name=\"select\">Pilih</string>\n  <string name=\"select_deselect_all\">Pilih atau batalkan semua pilihan</string>\n  <string name=\"select_patches_type_dialog_description\">Tambahkan patch baru dari URL atau berkas lokal</string>\n  <string name=\"local_patches_description\">Tambahkan patch dari penyimpanan lokal.</string>\n  <string name=\"remote_patches_description\">Tambahkan patch dari URL. Patch dapat diperbarui secara otomatis.</string>\n  <string name=\"recommended\">Direkomendasikan</string>\n  <string name=\"installation_failed_dialog_title\">Instalasi gagal</string>\n  <string name=\"installation_cancelled_dialog_title\">Instalasi dibatalkan</string>\n  <string name=\"installation_blocked_dialog_title\">Instalasi diblokir</string>\n  <string name=\"installation_conflict_dialog_title\">Konflik instalasi</string>\n  <string name=\"installation_incompatible_dialog_title\">Instalasi tidak kompatibel</string>\n  <string name=\"installation_invalid_dialog_title\">Instalasi tidak valid</string>\n  <string name=\"installation_storage_issue_dialog_title\">Penyimpanan tidak cukup</string>\n  <string name=\"installation_timeout_dialog_title\">Instalasi habis waktu</string>\n  <string name=\"installation_failed_description\">Instalasi gagal karena alasan yang tidak diketahui. Coba lagi?</string>\n  <string name=\"installation_aborted_description\">Instalasi dibatalkan secara manual. Coba lagi?</string>\n  <string name=\"installation_blocked_description\">Instalasi diblokir. Tinjau pengaturan keamanan perangkat Anda dan coba lagi.</string>\n  <string name=\"installation_conflict_description\">Instalasi dicegah oleh instalasi aplikasi yang sudah ada. Hapus instalasi aplikasi yang terinstal dan coba lagi?</string>\n  <string name=\"installation_incompatible_description\">Aplikasi tidak kompatibel dengan perangkat ini. Gunakan APK yang kompatibel dengan perangkat ini dan coba lagi.</string>\n  <string name=\"installation_invalid_description\">Aplikasi tidak valid. Hapus instalasi aplikasi dan coba lagi?</string>\n  <string name=\"installation_storage_issue_description\">Aplikasi tidak dapat diinstal karena penyimpanan tidak cukup. Kosongkan beberapa ruang dan coba lagi.</string>\n  <string name=\"installation_timeout_description\">Instalasi terlalu lama. Coba lagi?</string>\n  <string name=\"reinstall\">Instal ulang</string>\n  <string name=\"show\">Tampilkan</string>\n  <string name=\"debugging\">Debugging</string>\n  <string name=\"about_device\">Tentang perangkat</string>\n  <string name=\"enter_url\">Masukkan URL</string>\n  <string name=\"next\">Berikutnya</string>\n  <string name=\"auto_update\">Pembaruan otomatis</string>\n  <string name=\"add_patches\">Tambahkan patch</string>\n  <string name=\"auto_update_description\">Perbarui secara otomatis saat versi baru tersedia</string>\n  <string name=\"patches_prereleases\">Gunakan pra-rilis</string>\n  <string name=\"patches_prereleases_description\">Gunakan versi pra-rilis %s</string>\n  <string name=\"patches_url\">URL patch</string>\n  <string name=\"incompatible_patches_dialog\">Patch ini tidak kompatibel dengan versi aplikasi yang dipilih (%1$s).\n\nKlik pada patch untuk melihat detail selengkapnya.</string>\n  <string name=\"incompatible_patch\">Patch tidak kompatibel</string>\n  <string name=\"any_version\">Apa pun</string>\n  <string name=\"never_show_again\">Jangan pernah tampilkan lagi</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Tampilkan pesan pembaruan saat diluncurkan</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Tampilkan notifikasi pop-up setiap kali pembaruan baru tersedia saat diluncurkan</string>\n  <string name=\"failed_to_import_keystore\">Gagal mengimpor keystore</string>\n  <string name=\"export\">Ekspor</string>\n  <string name=\"confirm\">Konfirmasi</string>\n  <string name=\"new_announcement\">Pengumuman baru:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"other\">%d tambalan</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"other\">Jalankan %d tambalan</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"other\">%d dipilih</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-is-rIS/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">Plástur</string>\n  <string name=\"onboarding_welcome_to\">Velkomin í</string>\n  <string name=\"onboarding_welcome_back\">Hæ! Þetta er nýja</string>\n  <string name=\"onboarding_apps_subtitle\">Þú getur valið forrit til að plástra núna eða gert það síðar</string>\n  <string name=\"onboarding_updates_subtitle\">Stilltu sjálfvirkar uppfærslur til að halda ReVanced Manager og plástrum uppfærðum</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager mun tengjast við %s til að sækja upphaflegar útgáfur ef tækið þitt er tengt internetinu.</string>\n  <string name=\"retry\">Reyna aftur</string>\n  <string name=\"onboarding_skip\">Sleppa í bili</string>\n  <string name=\"onboarding_recommended_version\">Ráðlögð útgáfa: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Sleppa heimildum?</string>\n  <string name=\"onboarding_permissions_skip_description\">Án nauðsynlegra heimilda gætu sumar aðgerðir ekki virkað rétt. Þú getur veitt þær síðar í stillingum forritsins.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Sleppa samt</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager þarf nokkrar heimildir til að virka rétt</string>\n  <string name=\"permission_install_apps\">Setja upp óþekkt forrit</string>\n  <string name=\"permission_install_apps_description\">Nauðsynlegt til að setja upp plástruð forrit</string>\n  <string name=\"permission_notifications\">Tilkynningar</string>\n  <string name=\"permission_battery\">Hagræðing rafhlöðu</string>\n  <string name=\"permission_battery_description\">Kemur í veg fyrir að plástrun sé trufluð í bakgrunni</string>\n  <string name=\"permission_grant\">Veita</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager niðurhala gestgjafi</string>\n  <string name=\"downloader_host_permission_description\">Notað til að stjórna aðgangi að ReVanced Manager niðurhölurum. Aðeins ReVanced Manager hefur þetta.</string>\n  <string name=\"fab_patch_app\">Plástra forrit</string>\n  <string name=\"fab_add_patches\">Bæta við plástrum</string>\n  <string name=\"new_downloader_notification\">Nýir niðurhalarar eru í boði. Smelltu hér til að stilla þá.</string>\n  <string name=\"patches_not_downloaded\">Bætur hafa ekki verið sóttar.</string>\n  <string name=\"app_source_dialog_option_auto_description\">Notaðu uppsett forrit, síðan niðurhalaðan APK, síðan tiltæka niðurhalaða</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Engin samhæfð forrit eða niðurhalsforrit í boði.</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Ekki er hægt að lappa upp á uppsett forrit aftur án rótaðgangs.</string>\n  <string name=\"patch_selector_item\">Velja plástra</string>\n  <string name=\"patch_selector_item_description\">%d plástrar valdir</string>\n  <string name=\"patch_selection_changed_warning\">Vali á bótum hefur verið breytt.</string>\n  <string name=\"apk_source_selector_item\">Velja APK uppruna</string>\n  <string name=\"apk_source_auto\">Sjálfvirkt</string>\n  <string name=\"apk_source_auto_installed\">Sjálfvirkt · Notar uppsettan APK</string>\n  <string name=\"apk_source_auto_downloaded\">Sjálfvirkt · Notar niðurhalaðan APK</string>\n  <string name=\"apk_source_auto_downloader\">Sjálfvirkt · Notar tiltæka niðurhalara</string>\n  <string name=\"apk_source_auto_storage\">Sjálfvirkt · Velja úr geymslu</string>\n  <string name=\"apk_source_downloaded\">Þegar niðurhalað</string>\n  <string name=\"auto_updates_dialog_description\">Viltu að ReVanced Manager athugi reglulega hvort nýjar uppfærslur séu til staðar fyrir eftirfarandi íhluti?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced plástrar</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Niðurhalarar</string>\n  <string name=\"auto_updates_dialog_note\">Þessum stillingum er hægt að breyta síðar.\n\n    ReVanced Manager mun tengjast við %s til að sækja upphaflegar útgáfur ef tækið þitt er tengt internetinu.</string>\n  <string name=\"announcements_filter_tag\">Sía eftir merki</string>\n  <string name=\"announcements_show_archived\">Sýna geymdar</string>\n  <string name=\"updates_description\">Athugaðu hvort uppfærslur séu í boði og skoðaðu breytingaskrá</string>\n  <string name=\"downloads_description\">Niðurhalsforrit og niðurhöluð forrit</string>\n  <string name=\"safeguards_toggled_warning\">Öryggisráðstöfunum hefur verið víxlað.</string>\n  <string name=\"about_app_name\">Um %1$s</string>\n  <string name=\"search_languages\">Leita tungumála…</string>\n  <string name=\"keystore\">Lyklageymsla</string>\n  <string name=\"patches_selections\">Val á plástrum</string>\n  <string name=\"select_bundle_for_import\">Velja búnt til að flytja inn í</string>\n  <string name=\"select_bundle_for_export\">Velja búnt til að flytja út frá</string>\n  <string name=\"patch_selection_packages\">Forrit með vistuðum valkostum</string>\n  <string name=\"patch_selection_entries\">Samtals valdir plástrar</string>\n  <string name=\"reset_configuration\">Endurstilla stillingar</string>\n  <string name=\"reset_patch_selection\">Val á plástrum</string>\n  <string name=\"reset_patch_options\">Plásturstillingar</string>\n  <string name=\"downloaders\">Niðurhalsforrit</string>\n  <string name=\"downloader_prereleases\">Notaðu fyrri útgáfur</string>\n  <string name=\"downloader_prereleases_description\">Notaðu fyrri útgáfur af aðalniðurhalaranum</string>\n  <string name=\"downloader_state_loaded\">Hlaðið</string>\n  <string name=\"downloader_state_failed\">Tókst ekki að hlaða. Smelltu fyrir frekari upplýsingar</string>\n  <string name=\"downloader_state_missing\">Vantar</string>\n  <string name=\"downloader_delete_apps_title\">Eyða völdum forritum</string>\n  <string name=\"downloader_delete_apps_description\">Ertu viss um að þú viljir eyða völdum forritum?</string>\n  <string name=\"downloader_delete_single_description\">Ertu viss um að þú viljir eyða „%s“?</string>\n  <string name=\"downloader_settings_no_apps_description\">Forrit sem hafa verið niðurhaluð í gegnum ReVanced Manager munu birtast hér.</string>\n  <string name=\"downloader_url\">Vefslóð niðurhala</string>\n  <string name=\"downloader_add\">Bæta við niðurhala</string>\n  <string name=\"select_downloader_type_dialog_description\">Bæta við nýjum niðurhölum af vefslóð eða staðbundnum skrám</string>\n  <string name=\"local_downloaders_description\">Bæta við niðurhölum úr staðbundinni geymslu.</string>\n  <string name=\"remote_downloaders_description\">Bæta við niðurhölum af vefslóð. Hægt að uppfæra sjálfvirkt.</string>\n  <string name=\"install_revanced_downloaders\">Settu upp niðurhalara til að fá forrit beint innan ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Settu upp ReVanced niðurhalara</string>\n  <string name=\"cancel_downloader_install_title\">Hætta við uppsetningu niðurhalara?</string>\n  <string name=\"cancel_downloader_install_description\">Uppsetning niðurhalara er í gangi. Ef þú ferð núna verður niðurhalinu hætt.</string>\n  <string name=\"downloader_sources_unavailable_title\">Þessir niðurhalar vantar</string>\n  <string name=\"downloader_sources_unavailable_description\">Smelltu á uppfærsluhnappinn til að laga það.</string>\n  <string name=\"downloader_update_failed\">Tókst ekki að uppfæra niðurhala: %s</string>\n  <string name=\"downloader_replace_fail\">Tókst ekki að flytja inn niðurhala: %s</string>\n  <string name=\"select_from_storage_description\">Veldu APK skrá úr geymslu með því að nota skráavalsbúnað</string>\n  <string name=\"enable\">Virkja</string>\n  <string name=\"disable\">Óvirkja</string>\n  <string name=\"process_runtime_memory_limit_description\">Hámarksmagn minnis sem plásturferlið getur notað</string>\n  <string name=\"reset_onboarding\">Endurstilla kynningu</string>\n  <string name=\"reset_onboarding_description\">Sýna kynningarskjáinn við næstu ræsingu forritsins</string>\n  <string name=\"api_not_working_title\">API þjónustan er óvirk.</string>\n  <string name=\"api_not_working_description\">Sumar aðgerðir gætu orðið fyrir áhrifum. Athugaðu nettenginguna þína eða API-slóð í stillingum.</string>\n  <string name=\"no_patched_apps_found\">Engin plástruð forrit fundust</string>\n  <string name=\"no_patched_apps_description\">Þú ert sem stendur ekki með nein plástruð forrit sem við vitum um. Breyttu því með því að plástra fyrsta forritið þitt!</string>\n  <string name=\"patched_apps_section_title\">Plástruð forrit</string>\n  <string name=\"patchable_apps_section_title\">Forrit sem hægt er að plástra</string>\n  <string name=\"no_patches_found\">Engir plástrar fundust</string>\n  <string name=\"no_patches_description\">Þú átt enga plástra ennþá. Bættu við plástrum með því að banka á hnappinn hér að neðan!</string>\n  <string name=\"split_apk_not_supported\">Ekki er hægt að lappa upp á skiptar APK-skrár</string>\n  <string name=\"no_downloaders_installed\">Engir forrita niðurhalarar eru uppsettir!</string>\n  <string name=\"no_downloaders_trusted\">Engum forrita niðurhölurum hefur verið treyst! Vinsamlegast athugaðu stillingarnar þínar.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Pakkar</string>\n  <string name=\"patch_selector_sheet_actions_title\">Aðgerðir</string>\n  <string name=\"restore_default_selection\">Endurheimta sjálfgefið val</string>\n  <string name=\"deselect_all\">Afvelja allt</string>\n  <string name=\"invert_selection\">Snúa vali við</string>\n  <string name=\"deselect_all_except\">Afvelja allt nema %s</string>\n  <string name=\"scope_dialog_title\">Gildir fyrir</string>\n  <string name=\"scope_all_patches\">Allir plástrar</string>\n  <string name=\"scope_bundle_patches\">Aðeins %s</string>\n  <string name=\"save_as_file\">Vista í skrár</string>\n  <string name=\"export_patcher_logs\">Flytja út plástursannál</string>\n  <string name=\"save_logs_success\">Annáll vistaður</string>\n  <string name=\"downloader_activity_dialog_body\">Samskipti notenda eru nauðsynleg til að halda áfram með þetta niðurhalsforrit.</string>\n  <string name=\"patcher_step_unpack\">Undirbúa uppfærslutól</string>\n  <string name=\"view_announcement\">Skoða tilkynningu</string>\n  <string name=\"license\">Leyfi</string>\n  <string name=\"source\">Uppruni</string>\n  <string name=\"repository\">Geymsla</string>\n  <string name=\"bundle_information_by_author\">Eftir %1$s</string>\n  <string name=\"version_compatibility_warning\">Valin útgáfa gæti verið ósamrýmanleg við valda plástra.</string>\n  <string name=\"announcements\">Tilkynningar</string>\n  <string name=\"archive\">Skjalasafn</string>\n  <string name=\"view_update\">Skoða uppfærslu</string>\n  <string name=\"update_checking_downloader\">Athugaðu hvort uppfærslur á ReVanced niðurhölurum séu til staðar við ræsingu</string>\n  <string name=\"update_checking_downloader_description\">Athugaðu hvort uppfærslur á uppsettum ReVanced niðurhölurum séu til staðar þegar forritið ræsist</string>\n  <string name=\"prereleases_warning\">Forskoðunarútgáfur geta verið óstöðugar og innihaldið villur. Þú gætir lent í hrunum, gagnatapi eða öðrum óvæntum vandamálum. Virkjaðu þetta aðeins ef þú ert sáttur við þessa áhættu.</string>\n  <string name=\"changelog\">Skoða breytingaskrá</string>\n  <string name=\"no_announcements_found\">Engar tilkynningar fundust</string>\n  <string name=\"new_announcement\">Ný tilkynning:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d bót</item>\n    <item quantity=\"other\">%d bætur</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Keyra %d bót</item>\n    <item quantity=\"other\">Keyra %d bætur</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d valið</item>\n    <item quantity=\"other\">%d valin</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-it-rIT/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Patcher</string>\n  <string name=\"patches\">Patch</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Manager</string>\n  <string name=\"onboarding_welcome_to\">Benvenuto in</string>\n  <string name=\"onboarding_welcome_back\">Ciao! È il nuovo</string>\n  <string name=\"onboarding_apps_subtitle\">Puoi selezionare un\\'app da patchare ora o farlo più tardi</string>\n  <string name=\"onboarding_apps_network_error\">Impossibile caricare le patch perché la rete non è disponibile o è instabile. Connettiti a una rete stabile e riprova.</string>\n  <string name=\"onboarding_updates_subtitle\">Configura gli aggiornamenti automatici per mantenere ReVanced Manager e le patch aggiornati</string>\n  <string name=\"banner_sources_not_downloaded_description\">Le patch e i downloader non sono stati scaricati durante la configurazione. Tocca aggiorna per scaricarli.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager si connetterà a %s per scaricare le versioni iniziali se il tuo dispositivo è connesso a internet.</string>\n  <string name=\"retry\">Riprova</string>\n  <string name=\"onboarding_skip\">Salta per ora</string>\n  <string name=\"onboarding_recommended_version\">Versione consigliata: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Saltare i permessi?</string>\n  <string name=\"onboarding_permissions_skip_description\">Senza i permessi richiesti, alcune funzionalità potrebbero non funzionare correttamente. Puoi concederli in seguito nelle impostazioni dell\\'app.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Salta comunque</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager necessita di alcuni permessi per funzionare correttamente</string>\n  <string name=\"permission_install_apps\">Installa app sconosciute</string>\n  <string name=\"permission_install_apps_description\">Richiesto per installare le applicazioni patchate</string>\n  <string name=\"permission_notifications\">Notifiche</string>\n  <string name=\"permission_notifications_description\">Consente il patching ininterrotto in background</string>\n  <string name=\"permission_battery\">Ottimizzazione batteria</string>\n  <string name=\"permission_battery_description\">Impedisce che la patch venga interrotta in background</string>\n  <string name=\"permission_grant\">Concedi</string>\n  <string name=\"downloader_host_permission_label\">Host downloader di ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Utilizzato per controllare l\\'accesso ai downloader di ReVanced Manager. Solo ReVanced Manager lo possiede.</string>\n  <string name=\"toast_copied_to_clipboard\">Copiato!</string>\n  <string name=\"copy_to_clipboard\">Copia negli appunti</string>\n  <string name=\"dashboard\">Dashboard</string>\n  <string name=\"settings\">Impostazioni</string>\n  <string name=\"select_app\">Seleziona un\\'app</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d selezionati</string>\n  <string name=\"fab_patch_app\">Patcha un\\'app</string>\n  <string name=\"fab_add_patches\">Aggiungi patch</string>\n  <string name=\"new_downloader_notification\">Nuovi downloader disponibili. Clicca qui per configurarli.</string>\n  <string name=\"unsupported_architecture_warning\">Il patching su questa architettura del dispositivo non è supportato e molto probabilmente fallirà.</string>\n  <string name=\"import_\">Importa</string>\n  <string name=\"import_patches\">Importa patch</string>\n  <string name=\"file_field_set\">Selezionato</string>\n  <string name=\"file_field_not_set\">Non selezionato</string>\n  <string name=\"field_not_set\">Non impostato</string>\n  <string name=\"patches_missing\">Mancanti</string>\n  <string name=\"patches_error\">Errore</string>\n  <string name=\"patches_error_description\">Le patch non sono state caricate. Fai clic per visualizzare l\\'errore</string>\n  <string name=\"patches_not_downloaded\">Le patch non sono state scaricate.</string>\n  <string name=\"patches_name_default\">Patch</string>\n  <string name=\"patches_name_fallback\">Senza nome</string>\n  <string name=\"android_11_bug_dialog_title\">Bug di Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">L\\'autorizzazione all\\'installazione dell\\'app deve essere concessa in anticipo per evitare un bug nel sistema Android 11 che influenzerà negativamente l\\'esperienza utente.</string>\n  <string name=\"no_network_toast\">Nessuna connessione internet disponibile</string>\n  <string name=\"selected_app_meta_any_version\">Qualsiasi versione disponibile</string>\n  <string name=\"app_source_dialog_title\">Seleziona sorgente</string>\n  <string name=\"app_source_dialog_option_auto\">Automatico</string>\n  <string name=\"app_source_dialog_option_auto_description\">Usa l\\'app installata, quindi l\\'APK scaricato, quindi i downloader disponibili</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Nessuna app o downloader compatibile trovato disponibile</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Le app montate non possono essere patchate di nuovo senza accesso root</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">La versione %s non corrisponde alla versione suggerita</string>\n  <string name=\"patch_item_description\">Avvia il patching dell\\'applicazione</string>\n  <string name=\"patch_selector_item\">Seleziona patch</string>\n  <string name=\"patch_selector_item_description\">%d patch selezionate</string>\n  <string name=\"patch_selection_changed_warning\">La selezione delle patch è stata modificata</string>\n  <string name=\"no_patches_selected\">Nessuna patch selezionata</string>\n  <string name=\"network_unavailable_warning\">Il tuo dispositivo non è connesso a internet. Il download fallirà in seguito.</string>\n  <string name=\"network_metered_warning\">Sei attualmente su una connessione a consumo. Potrebbero essere applicati costi per i dati dal tuo provider di servizi.</string>\n  <string name=\"apk_source_selector_item\">Seleziona la sorgente APK</string>\n  <string name=\"apk_source_auto\">Automatico</string>\n  <string name=\"apk_source_auto_installed\">Automatico · Uso dell\\'APK installato</string>\n  <string name=\"apk_source_auto_downloaded\">Automatico · Uso dell\\'APK scaricato</string>\n  <string name=\"apk_source_auto_downloader\">Automatico · Utilizzo dei downloader disponibili</string>\n  <string name=\"apk_source_auto_storage\">Automatico · Seleziona dalla memoria</string>\n  <string name=\"apk_source_downloader\">Utilizzando %s</string>\n  <string name=\"apk_source_installed\">Utilizzo dell\\'APK installato</string>\n  <string name=\"apk_source_local\">Utilizzo di un file APK locale</string>\n  <string name=\"apk_source_downloaded\">Già scaricato</string>\n  <string name=\"legacy_import_failed\">Impossibile importare le impostazioni legacy</string>\n  <string name=\"auto_updates_dialog_title\">Configura gli aggiornamenti</string>\n  <string name=\"auto_updates_dialog_description\">Vuoi che ReVanced Manager verifichi periodicamente la disponibilità di aggiornamenti per i seguenti componenti?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Patch di ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Downloader</string>\n  <string name=\"auto_updates_dialog_note\">Queste impostazioni possono essere modificate in seguito.\n\n    ReVanced Manager si connetterà a %s per scaricare le versioni iniziali se il tuo dispositivo è connesso a internet.</string>\n  <string name=\"announcements_filter_tag\">Filtra per tag</string>\n  <string name=\"announcements_show_archived\">Mostra archiviati</string>\n  <string name=\"general\">Generale</string>\n  <string name=\"general_description\">Lingua, tema, colore dinamico</string>\n  <string name=\"updates\">Aggiornamenti</string>\n  <string name=\"updates_description\">Verifica aggiornamenti e visualizza il changelog</string>\n  <string name=\"downloads\">Download</string>\n  <string name=\"downloads_description\">Programmi di download e app scaricate</string>\n  <string name=\"import_export\">Importa &amp; esporta</string>\n  <string name=\"import_export_description\">Keystore, opzioni e selezione patch</string>\n  <string name=\"advanced\">Avanzate</string>\n  <string name=\"advanced_description\">URL API, limite di memoria, debug</string>\n  <string name=\"safeguards_toggled_warning\">Le salvaguardie sono state attivate/disattivate</string>\n  <string name=\"about\">Informazioni</string>\n  <string name=\"about_app_name\">Informazioni su %1$s</string>\n  <string name=\"opensource_licenses\">Licenze open source</string>\n  <string name=\"opensource_licenses_description\">Visualizza tutte le librerie utilizzate per creare questa applicazione</string>\n  <string name=\"contributors\">Collaboratori</string>\n  <string name=\"contributors_description\">Visualizza i collaboratori di ReVanced</string>\n  <string name=\"dynamic_color\">Colore dinamico</string>\n  <string name=\"dynamic_color_description\">Adatta i colori allo sfondo</string>\n  <string name=\"pure_black_theme\">Tema nero puro</string>\n  <string name=\"pure_black_theme_description\">Usa sfondi nero puro per il tema scuro</string>\n  <string name=\"theme\">Tema</string>\n  <string name=\"theme_description\">Scegli tra tema chiaro o scuro</string>\n  <string name=\"language\">Lingua</string>\n  <string name=\"language_description\">Scegli la lingua di visualizzazione dell\\'app</string>\n  <string name=\"language_system_default\">Predefinito di sistema</string>\n  <string name=\"search_languages\">Cerca lingue…</string>\n  <string name=\"safeguards\">Salvaguardie</string>\n  <string name=\"patch_compat_check\">Disabilita il controllo di compatibilità della versione</string>\n  <string name=\"patch_compat_check_description\">Non limitare le patch alle versioni compatibili dell\\'app</string>\n  <string name=\"patch_compat_check_confirmation\">La selezione di patch incompatibili può causare un\\'app malfunzionante.\n\nVuoi comunque procedere?</string>\n  <string name=\"suggested_version_safeguard\">Richiedi la versione suggerita dell\\'app</string>\n  <string name=\"suggested_version_safeguard_description\">Imponi la selezione della versione suggerita dell\\'app</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Selezionare un\\'app che non è la versione suggerita potrebbe causare problemi imprevisti.\n\nVuoi comunque procedere?</string>\n  <string name=\"patch_selection_safeguard\">Consenti di cambiare la selezione e le opzioni delle patch</string>\n  <string name=\"patch_selection_safeguard_description\">Non impedire la selezione o la deselezione delle patch e la personalizzazione delle opzioni</string>\n  <string name=\"patch_selection_safeguard_confirmation\">La modifica della selezione delle patch potrebbe causare problemi imprevisti.\n\nAbilitare comunque?</string>\n  <string name=\"universal_patches_safeguard\">Consenti l\\'uso di patch universali</string>\n  <string name=\"universal_patches_safeguard_description\">Non impedire l\\'uso di patch universali</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Le patch universali non sono testate così accuratamente come quelle che mirano ad app specifiche.\n\nAbilitare comunque?</string>\n  <string name=\"keystore\">Keystore</string>\n  <string name=\"patches_selections\">Selezioni patch</string>\n  <string name=\"import_keystore\">Importa keystore</string>\n  <string name=\"import_keystore_description\">Importa un keystore personalizzato</string>\n  <string name=\"import_keystore_dialog_title\">Inserisci le credenziali del keystore</string>\n  <string name=\"import_keystore_dialog_description\">Dovrai inserire le credenziali del keystore per importarlo.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Nome utente (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Password</string>\n  <string name=\"import_keystore_dialog_button\">Importa</string>\n  <string name=\"import_keystore_wrong_credentials\">Credenziali keystore errate</string>\n  <string name=\"import_keystore_success\">Keystore importato</string>\n  <string name=\"export_keystore\">Esporta keystore</string>\n  <string name=\"export_keystore_description\">Esporta il keystore attuale</string>\n  <string name=\"export_keystore_unavailable\">Nessun keystore da esportare</string>\n  <string name=\"export_keystore_success\">Keystore esportato</string>\n  <string name=\"regenerate_keystore\">Rigenera keystore</string>\n  <string name=\"regenerate_keystore_description\">Genera un nuovo keystore</string>\n  <string name=\"regenerate_keystore_dialog_description\">Stai per rigenerare il keystore che il manager utilizzerà durante il processo di patching.\n\nNon sarai in grado di aggiornare le app installate in precedenza da questa sorgente.</string>\n  <string name=\"regenerate_keystore_success\">Il keystore è stato sostituito con successo</string>\n  <string name=\"import_patch_selection\">Importa selezione patch</string>\n  <string name=\"import_patch_selection_description\">Importa selezione patch da un file JSON</string>\n  <string name=\"import_patch_selection_fail\">Impossibile importare la selezione patch: %s</string>\n  <string name=\"import_patch_selection_success\">Selezione patch importata</string>\n  <string name=\"select_bundle_for_import\">Seleziona il bundle in cui importare</string>\n  <string name=\"export_patch_selection\">Esporta selezione patch</string>\n  <string name=\"export_patch_selection_description\">Esporta selezione patch in un file JSON</string>\n  <string name=\"export_patch_selection_fail\">Impossibile esportare la selezione patch: %s</string>\n  <string name=\"export_patch_selection_success\">Selezione patch esportata</string>\n  <string name=\"select_bundle_for_export\">Seleziona il bundle da cui esportare</string>\n  <string name=\"patch_selection_packages\">App con selezioni salvate</string>\n  <string name=\"patch_selection_entries\">Patch totali selezionate</string>\n  <string name=\"reset_configuration\">Ripristina configurazione</string>\n  <string name=\"reset_patch_selection\">Selezioni patch</string>\n  <string name=\"reset_patch_selection_description\">Ripristina la selezione patch memorizzata</string>\n  <string name=\"reset_patch_options\">Opzioni patch</string>\n  <string name=\"reset_patch_options_description\">Ripristina le opzioni patch memorizzate</string>\n  <string name=\"reset_patch_selection_success\">La selezione patch è stata ripristinata</string>\n  <string name=\"patch_selection_reset_all\">Ripristina selezione patch globalmente</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Stai per ripristinare tutte le selezioni di patch. Dovrai selezionare manualmente ogni patch di nuovo.</string>\n  <string name=\"patch_selection_reset_all_description\">Ripristina tutte le selezioni di patch</string>\n  <string name=\"patch_selection_reset_package\">Ripristina selezione patch per app</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Stai per ripristinare la selezione patch per l\\'app \\\"%s\\\". Dovrai selezionare manualmente ogni patch di nuovo.</string>\n  <string name=\"patch_selection_reset_package_description\">Ripristina la selezione patch per una singola app</string>\n  <string name=\"patch_selection_reset_patches\">Reimposta selezione patch (singola)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Stai per reimpostare la selezione delle patch per \\\"%s\\\". Dovrai selezionare manualmente ogni patch di nuovo.</string>\n  <string name=\"patch_selection_reset_patches_description\">Reimposta la selezione delle patch per una specifica raccolta di patch</string>\n  <string name=\"patch_options_reset_package\">Reimposta opzioni patch per l\\'app</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Stai per reimpostare le opzioni patch per l\\'app \\\"%s\\\". Dovrai riapplicare ogni opzione di nuovo.</string>\n  <string name=\"patch_options_reset_package_description\">Reimposta le opzioni patch per una singola app</string>\n  <string name=\"patch_options_reset_patches\">Reimposta opzioni patch (singola)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Stai per reimpostare le opzioni patch per \\\"%s\\\". Dovrai riapplicare ogni opzione di nuovo.</string>\n  <string name=\"patch_options_reset_patches_description\">Reimposta le opzioni patch per una specifica raccolta di patch</string>\n  <string name=\"patch_options_reset_all\">Reimposta le opzioni patch globalmente</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Stai per reimpostare tutte le opzioni patch. Dovrai riapplicare ogni opzione di nuovo.</string>\n  <string name=\"patch_options_reset_all_description\">Reimposta tutte le opzioni patch</string>\n  <string name=\"downloaders\">Programmi di download</string>\n  <string name=\"downloader_prereleases\">Usa versioni preliminari</string>\n  <string name=\"downloader_prereleases_description\">Usa le versioni preliminari del downloader principale</string>\n  <string name=\"downloader_state_loaded\">Caricato</string>\n  <string name=\"downloader_state_failed\">Caricamento fallito. Clicca per maggiori dettagli</string>\n  <string name=\"downloader_state_missing\">Mancante</string>\n  <string name=\"downloader_delete_apps_title\">Elimina app selezionate</string>\n  <string name=\"downloader_delete_apps_description\">Sei sicuro di voler eliminare le app selezionate?</string>\n  <string name=\"downloader_delete_single_description\">Sei sicuro di voler eliminare \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Nessuna app scaricata trovata.</string>\n  <string name=\"downloader_settings_no_apps_description\">Le app scaricate tramite ReVanced Manager appariranno qui.</string>\n  <string name=\"downloader_url\">URL Downloader</string>\n  <string name=\"downloader_add\">Aggiungi Downloader</string>\n  <string name=\"select_downloader_type_dialog_description\">Aggiungi nuovi downloader da URL o file locali</string>\n  <string name=\"local_downloaders_description\">Aggiungi downloader dall\\'archivio locale.</string>\n  <string name=\"remote_downloaders_description\">Aggiungi downloader da URL. Possono essere aggiornati automaticamente.</string>\n  <string name=\"install_revanced_downloaders\">Installa i downloader per ottenere le app direttamente all\\'interno di ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Installa i Downloader di ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Annullare l\\'installazione dei downloader?</string>\n  <string name=\"cancel_downloader_install_description\">È in corso l\\'installazione di un downloader. Se esci ora, il download verrà annullato.</string>\n  <string name=\"downloader_sources_unavailable_title\">Questi downloader sono mancanti</string>\n  <string name=\"downloader_sources_unavailable_description\">Fai clic sul pulsante di aggiornamento per risolvere il problema.</string>\n  <string name=\"downloader_update_failed\">Aggiornamento downloader non riuscito: %s</string>\n  <string name=\"downloader_replace_fail\">Importazione downloader non riuscita: %s</string>\n  <string name=\"search_apps\">Cerca app…</string>\n  <string name=\"loading_body\">Caricamento…</string>\n  <string name=\"downloading_patches\">Scaricamento patch…</string>\n  <string name=\"options\">Opzioni</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Sì</string>\n  <string name=\"no\">No</string>\n  <string name=\"edit\">Modifica</string>\n  <string name=\"dialog_input_placeholder\">Valore</string>\n  <string name=\"reset\">Reimposta</string>\n  <string name=\"share\">Condividi</string>\n  <string name=\"patch\">Patch</string>\n  <string name=\"select_from_storage\">Seleziona da memoria</string>\n  <string name=\"select_from_storage_description\">Seleziona un file APK dalla memoria usando il selettore di file</string>\n  <string name=\"suggested_version_info\">Versione suggerita: %s</string>\n  <string name=\"type_anything\">Digita qualcosa per continuare</string>\n  <string name=\"search\">Cerca patch…</string>\n  <string name=\"apply\">Applica</string>\n  <string name=\"help\">Aiuto</string>\n  <string name=\"back\">Indietro</string>\n  <string name=\"warning\">Avviso</string>\n  <string name=\"add\">Aggiungi</string>\n  <string name=\"enable\">Abilita</string>\n  <string name=\"disable\">Disabilita</string>\n  <string name=\"close\">Chiudi</string>\n  <string name=\"clear\">Cancella</string>\n  <string name=\"system\">Sistema</string>\n  <string name=\"light\">Chiaro</string>\n  <string name=\"dark\">Scuro</string>\n  <string name=\"appearance\">Aspetto</string>\n  <string name=\"networking\">Rete</string>\n  <string name=\"allow_metered_networks\">Consenti reti a consumo</string>\n  <string name=\"allow_metered_networks_description\">Consente aggiornamenti automatici su reti a consumo.\\n    L\\'applicazione potrebbe comunque avvisare in merito a reti a consumo per operazioni manuali.</string>\n  <string name=\"downloaded_apps\">App scaricate</string>\n  <string name=\"process_runtime\">Esegui Patcher in un altro processo (sperimentale)</string>\n  <string name=\"process_runtime_description\">Questo è più veloce e permette a Patcher di usare più memoria</string>\n  <string name=\"process_runtime_memory_limit\">Limite memoria processo Patcher</string>\n  <string name=\"process_runtime_memory_limit_description\">La quantità massima di memoria che il processo Patcher può usare</string>\n  <string name=\"debug_logs_export\">Esporta log di debug</string>\n  <string name=\"debug_logs_export_read_failed\">Impossibile leggere i log (codice di uscita %d)</string>\n  <string name=\"debug_logs_export_failed\">Impossibile esportare i log</string>\n  <string name=\"debug_logs_export_success\">Log esportati</string>\n  <string name=\"api_url\">URL API</string>\n  <string name=\"api_url_description\">L\\'API utilizzata per scaricare i file necessari</string>\n  <string name=\"api_url_dialog_title\">Cambia URL API</string>\n  <string name=\"api_url_dialog_description\">Modifica l\\'URL API di ReVanced Manager. ReVanced Manager usa l\\'API per scaricare patch e aggiornamenti.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager si connette all\\'API per scaricare patch e aggiornamenti. Assicurati di fidarti.</string>\n  <string name=\"api_url_dialog_save\">Imposta</string>\n  <string name=\"api_url_dialog_reset\">Reimposta URL API</string>\n  <string name=\"device\">Dispositivo</string>\n  <string name=\"device_android_version\">Versione Android</string>\n  <string name=\"device_model\">Modello</string>\n  <string name=\"device_architectures\">Architetture CPU</string>\n  <string name=\"device_memory_limit\">Limiti di memoria</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normale) - %2$dMB (Grande)</string>\n  <string name=\"patches_force_download\">Forza download di tutte le patch</string>\n  <string name=\"patches_reset\">Reimposta patch</string>\n  <string name=\"reset_onboarding\">Ripristina onboarding</string>\n  <string name=\"reset_onboarding_description\">Mostra la schermata di onboarding al prossimo avvio dell\\'app</string>\n  <string name=\"patching\">Patching</string>\n  <string name=\"signing\">Firma</string>\n  <string name=\"storage\">Archiviazione</string>\n  <string name=\"no_patch_found\">Nessuna patch trovata. Controlla le tue patch</string>\n  <string name=\"tab_apps\">App</string>\n  <string name=\"tab_patches\">Patch</string>\n  <string name=\"delete\">Elimina</string>\n  <string name=\"refresh\">Aggiorna</string>\n  <string name=\"continue_anyways\">Continua comunque</string>\n  <string name=\"download_another_version\">Scarica un\\'altra versione</string>\n  <string name=\"download_app\">Scarica app</string>\n  <string name=\"download_apk\">Scarica file APK</string>\n  <string name=\"patches_download_fail\">Impossibile scaricare le patch: %s</string>\n  <string name=\"api_not_working_title\">Il servizio API è attualmente non disponibile</string>\n  <string name=\"api_not_working_description\">Alcune funzionalità potrebbero essere compromesse. Controlla la tua connessione o l\\'URL dell\\'API nelle impostazioni.</string>\n  <string name=\"patches_replace_fail\">Impossibile importare le patch: %s</string>\n  <string name=\"no_patched_apps_found\">Nessuna app patchata trovata</string>\n  <string name=\"no_patched_apps_description\">Al momento non hai app patchate che conosciamo. Cambia questa situazione patchando la tua prima app!</string>\n  <string name=\"patched_apps_section_title\">App patchate</string>\n  <string name=\"patchable_apps_section_title\">App che possono essere patchate</string>\n  <string name=\"no_patches_found\">Nessuna patch trovata</string>\n  <string name=\"no_patches_description\">Non hai ancora patch. Aggiungi patch toccando il pulsante qui sotto!</string>\n  <string name=\"tap_on_patches\">Tocca le patch per maggiori informazioni</string>\n  <string name=\"patches_selected\">%s selezionati</string>\n  <string name=\"incompatible_patches\">Patch incompatibili</string>\n  <string name=\"universal_patches\">Patch universali</string>\n  <string name=\"patch_selection_reset_toast\">La selezione e le opzioni delle patch sono state reimpostate ai valori predefiniti consigliati</string>\n  <string name=\"patch_options_reset_toast\">Le opzioni delle patch sono state reimpostate</string>\n  <string name=\"non_suggested_version_warning_title\">Versione non suggerita</string>\n  <string name=\"non_suggested_version_warning_description\">La versione dell\\'app selezionata non corrisponde alla versione suggerita.\\nUtilizzare la versione suggerita: %s\\n\\nPer continuare comunque, disabilita \\\"Richiedi versione app suggerita\\\" nelle impostazioni avanzate.</string>\n  <string name=\"selection_warning_title\">Smettere di usare i valori predefiniti?</string>\n  <string name=\"selection_warning_description\">Si consiglia di utilizzare la selezione e le opzioni delle patch predefinite. Modificarle potrebbe causare problemi imprevisti.\\n\\nÈ necessario attivare \\\"Consenti modifica selezione e opzioni patch\\\" nelle impostazioni avanzate prima di attivare/disattivare le patch.</string>\n  <string name=\"universal_patch_warning_description\">Le patch universali hanno un uso più generalizzato e non funzionano in modo affidabile come le patch che mirano ad app specifiche. Potresti riscontrare problemi durante il loro utilizzo.\\n\\nÈ necessario attivare \\\"Consenti l\\'uso di patch universali\\\" nelle impostazioni avanzate prima di utilizzare le patch universali.</string>\n  <string name=\"this_version\">Questa versione</string>\n  <string name=\"universal\">Qualsiasi app</string>\n  <string name=\"search_patches\">Cerca patch</string>\n  <string name=\"app_version_not_compatible\">Questa patch non è compatibile con la versione dell\\'app selezionata (%1$s)\\n\\nÈ compatibile solo con le seguenti versioni: %2$s</string>\n  <string name=\"continue_with_version\">Continuare con questa versione?</string>\n  <string name=\"version_not_compatible\">Non tutte le patch sono compatibili con questa versione (%s). Vuoi continuare comunque?</string>\n  <string name=\"download_application\">Scaricare l\\'applicazione?</string>\n  <string name=\"app_not_installed\">L\\'app selezionata non è installata. Vuoi scaricarla?</string>\n  <string name=\"failed_to_load_apk\">Impossibile caricare APK</string>\n  <string name=\"split_apk_not_supported\">Gli APK divisi non possono essere patchati</string>\n  <string name=\"loading\">Caricamento…</string>\n  <string name=\"not_installed\">Non installato</string>\n  <string name=\"installed\">Installato</string>\n  <string name=\"app_info\">Informazioni app</string>\n  <string name=\"uninstall\">Disinstalla</string>\n  <string name=\"unpatch\">Rimuovi patch</string>\n  <string name=\"repatch\">Applica nuovamente patch</string>\n  <string name=\"install_type\">Tipo di installazione</string>\n  <string name=\"package_name\">Nome pacchetto</string>\n  <string name=\"original_package_name\">Nome pacchetto originale</string>\n  <string name=\"applied_patches\">Patch applicate</string>\n  <string name=\"view_applied_patches\">Visualizza patch applicate</string>\n  <string name=\"default_install\">Predefinito</string>\n  <string name=\"mount_install\">Monta</string>\n  <string name=\"mounted\">Montato</string>\n  <string name=\"not_mounted\">Non montato</string>\n  <string name=\"mount\">Monta</string>\n  <string name=\"unmount\">Smonta</string>\n  <string name=\"failed_to_mount\">Impossibile montare: %s</string>\n  <string name=\"failed_to_unmount\">Impossibile smontare: %s</string>\n  <string name=\"unpatch_app\">Rimuovere le patch all\\'app?</string>\n  <string name=\"unpatch_description\">Sei sicuro di voler rimuovere le patch a questa app?</string>\n  <string name=\"downloader_invalid_version\">Il downloader non ha scaricato la versione corretta</string>\n  <string name=\"downloader_app_not_found\">Il downloader non ha trovato l\\'app</string>\n  <string name=\"downloader_error\">Errore downloader: %s</string>\n  <string name=\"no_downloaders_installed\">Nessun downloader di app installato!</string>\n  <string name=\"no_downloaders_trusted\">Nessun downloader di app è stato reso attendibile! Controlla le tue impostazioni.</string>\n  <string name=\"already_patched\">Già patchato</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filtra</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Compatibilità</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Pacchetti</string>\n  <string name=\"patch_selector_sheet_actions_title\">Azioni</string>\n  <string name=\"restore_default_selection\">Ripristina selezione predefinita</string>\n  <string name=\"deselect_all\">Deseleziona tutto</string>\n  <string name=\"invert_selection\">Inverti selezione</string>\n  <string name=\"deselect_all_except\">Deseleziona tutto tranne %s</string>\n  <string name=\"scope_dialog_title\">Applica a</string>\n  <string name=\"scope_all_patches\">Tutte le patch</string>\n  <string name=\"scope_bundle_patches\">Solo %s</string>\n  <string name=\"string_option_menu_description\">Altre opzioni</string>\n  <string name=\"option_preset_custom_value\">Valore personalizzato</string>\n  <string name=\"path_selector\">Seleziona da memoria</string>\n  <string name=\"path_selector_parent_dir\">Directory precedente</string>\n  <string name=\"path_selector_dirs\">Directory</string>\n  <string name=\"path_selector_files\">File</string>\n  <string name=\"show_password_field\">Mostra password</string>\n  <string name=\"hide_password_field\">Nascondi password</string>\n  <string name=\"installer\">Programma di installazione</string>\n  <string name=\"install_app\">Installa</string>\n  <string name=\"install_app_success\">App installata</string>\n  <string name=\"install_app_fail\">Impossibile installare l\\'app: %s</string>\n  <string name=\"reinstall_app_fail\">Impossibile reinstallare l\\'app: %s</string>\n  <string name=\"uninstall_app_fail\">Impossibile disinstallare l\\'app: %s</string>\n  <string name=\"open_app\">Apri</string>\n  <string name=\"save_apk\">Salva APK</string>\n  <string name=\"save_apk_success\">APK salvato</string>\n  <string name=\"sign_fail\">Impossibile firmare l\\'APK: %s</string>\n  <string name=\"save_logs\">Salva registri</string>\n  <string name=\"save_as_file\">Salva su file</string>\n  <string name=\"export_patcher_logs\">Esporta i log del patcher</string>\n  <string name=\"save_logs_success\">Log salvati</string>\n  <string name=\"downloader_activity_dialog_body\">È richiesta l\\'interazione dell\\'utente per procedere con questo programma di download.</string>\n  <string name=\"select_install_type\">Seleziona tipo di installazione</string>\n  <string name=\"patcher_step_group_preparing\">Preparazione</string>\n  <string name=\"patcher_step_load_patches\">Carica patch</string>\n  <string name=\"patcher_step_unpack\">Prepara il patcher</string>\n  <string name=\"patcher_step_group_patching\">Applicazione patch</string>\n  <string name=\"patcher_step_group_saving\">Salvataggio</string>\n  <string name=\"patcher_step_write_patched\">Scrivi file APK patchato</string>\n  <string name=\"patcher_step_sign_apk\">Firma file APK patchato</string>\n  <string name=\"patcher_notification_title\">Applicazione patch in corso…</string>\n  <string name=\"patcher_notification_text\">Tocca per tornare al patcher</string>\n  <string name=\"patcher_stop_confirm_title\">Ferma patcher</string>\n  <string name=\"patcher_stop_confirm_description\">Sei sicuro di voler interrompere il processo di applicazione delle patch?</string>\n  <string name=\"patcher_install_in_progress\">Installazione in corso. Attendere</string>\n  <string name=\"execute_patches\">Esegui patch</string>\n  <string name=\"executing_patch\">Esegui %s</string>\n  <string name=\"failed_to_execute_patch\">Impossibile eseguire %s</string>\n  <string name=\"step_completed\">completato</string>\n  <string name=\"step_failed\">fallito</string>\n  <string name=\"step_running\">in esecuzione</string>\n  <string name=\"step_waiting\">in attesa</string>\n  <string name=\"expand_content\">espandi</string>\n  <string name=\"collapse_content\">riduci</string>\n  <string name=\"drag_handle\">riordina</string>\n  <string name=\"more\">Altro</string>\n  <string name=\"less\">Meno</string>\n  <string name=\"continue_\">Continua</string>\n  <string name=\"dismiss\">Ignora</string>\n  <string name=\"view_announcement\">Visualizza annuncio</string>\n  <string name=\"permanent_dismiss\">Non mostrare più</string>\n  <string name=\"donate\">Dona</string>\n  <string name=\"website\">Sito web</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Contatto</string>\n  <string name=\"license\">Licenza</string>\n  <string name=\"source\">Sorgente</string>\n  <string name=\"repository\">Repository</string>\n  <string name=\"bundle_information_by_author\">Di %1$s</string>\n  <string name=\"version\">Versione</string>\n  <string name=\"version_compatibility_warning\">La versione selezionata potrebbe non essere compatibile con le patch selezionate.</string>\n  <string name=\"submit_feedback\">Invia problema o feedback</string>\n  <string name=\"submit_feedback_description\">Aiutaci a migliorare questa applicazione</string>\n  <string name=\"developer_options\">Opzioni sviluppatore</string>\n  <string name=\"developer_options_description\">Opzioni per il debug dei problemi</string>\n  <string name=\"patches_update_success\">Aggiornamento riuscito</string>\n  <string name=\"patches_update_unavailable\">Nessun aggiornamento disponibile</string>\n  <string name=\"view_patches\">Visualizza patch</string>\n  <string name=\"patches_view_any_version\">Qualsiasi versione</string>\n  <string name=\"patches_view_any_package\">Qualsiasi pacchetto</string>\n  <string name=\"patches_delete_single_dialog_description\">Sei sicuro di voler eliminare \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Sei sicuro di voler eliminare le patch selezionate?</string>\n  <string name=\"announcements\">Annunci</string>\n  <string name=\"archive\">Archivio</string>\n  <string name=\"about_revanced_manager\">Informazioni su ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager è un\\'applicazione Android che utilizza ReVanced Patcher per applicare patch alle app Android. Ti consente di scaricare e patchare app con patch personalizzate e di gestire il processo di applicazione delle patch.</string>\n  <string name=\"developer_options_taps\">%d tocchi rimanenti</string>\n  <string name=\"developer_options_enabled\">Opzioni sviluppatore abilitate</string>\n  <string name=\"developer_options_already_enabled\">Le opzioni sviluppatore sono già abilitate</string>\n  <string name=\"update_available\">È disponibile un aggiornamento</string>\n  <string name=\"current_version\">Versione attuale: %s</string>\n  <string name=\"new_version\">Nuova versione: %s</string>\n  <string name=\"ready_to_install_update\">Pronto per installare l\\'aggiornamento</string>\n  <string name=\"update_completed\">Aggiornamento installato</string>\n  <string name=\"install_update_manager_failed\">Impossibile installare l\\'aggiornamento</string>\n  <string name=\"manual_update_check\">Controlla aggiornamenti</string>\n  <string name=\"view_update\">Visualizza aggiornamento</string>\n  <string name=\"manual_update_check_description\">Controlla manualmente gli aggiornamenti</string>\n  <string name=\"update_checking_manager\">Controlla aggiornamenti all\\'avvio</string>\n  <string name=\"update_checking_manager_description\">Controlla nuove versioni di ReVanced Manager all\\'avvio dell\\'applicazione</string>\n  <string name=\"update_checking_downloader\">Verifica gli aggiornamenti dei Downloader di ReVanced all\\'avvio</string>\n  <string name=\"update_checking_downloader_description\">Verifica gli aggiornamenti dei Downloader di ReVanced installati all\\'avvio dell\\'applicazione</string>\n  <string name=\"manager_prereleases\">Usa versioni pre-release</string>\n  <string name=\"manager_prereleases_description\">Usa versioni pre-release di ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Le versioni pre-release potrebbero essere instabili e contenere bug. Potresti riscontrare arresti anomali, perdita di dati o altri problemi imprevisti. Abilita questa opzione solo se ti senti a tuo agio con questi rischi.</string>\n  <string name=\"changelog\">Visualizza changelog</string>\n  <string name=\"changelog_loading\">Caricamento changelog</string>\n  <string name=\"changelog_download_fail\">Impossibile scaricare il changelog: %s</string>\n  <string name=\"changelog_description\">Controlla le ultime modifiche in questo aggiornamento</string>\n  <string name=\"battery_optimization_notification\">Le ottimizzazioni della batteria devono essere disattivate affinché ReVanced Manager funzioni correttamente in background. Clicca qui per disattivare le ottimizzazioni.</string>\n  <string name=\"installing_manager_update\">Installazione aggiornamento in corso…</string>\n  <string name=\"downloading_manager_update\">Download aggiornamento in corso…</string>\n  <string name=\"download_manager_failed\">Impossibile scaricare l\\'aggiornamento: %s</string>\n  <string name=\"cancel\">Annulla</string>\n  <string name=\"save\">Salva</string>\n  <string name=\"save_with_count\">Salva (%1$s)</string>\n  <string name=\"update\">Aggiorna</string>\n  <string name=\"empty\">Vuoto</string>\n  <string name=\"installing_message\">Tocca <b>Aggiorna</b> quando richiesto.\nReVanced Manager si chiuderà durante l\\'aggiornamento.</string>\n  <string name=\"no_changelogs_found\">Nessun changelog trovato</string>\n  <string name=\"just_now\">Proprio ora</string>\n  <string name=\"minutes_ago\">%s m fa</string>\n  <string name=\"hours_ago\">%s h fa</string>\n  <string name=\"days_ago\">%s g fa</string>\n  <string name=\"invalid_date\">Data non valida</string>\n  <string name=\"disable_battery_optimization\">Disabilita ottimizzazione batteria</string>\n  <string name=\"input_dialog_value_invalid\">Valore non valido</string>\n  <string name=\"option_required\">Questa opzione è richiesta</string>\n  <string name=\"required_options_screen\">Opzioni richieste</string>\n  <string name=\"failed_to_check_updates\">Impossibile verificare la disponibilità di aggiornamenti: %s</string>\n  <string name=\"no_update_available\">Nessun aggiornamento disponibile</string>\n  <string name=\"no_announcements_found\">Nessun annuncio trovato</string>\n  <string name=\"update_check\">Ricerca aggiornamenti in corso…</string>\n  <string name=\"dismiss_temporary\">Non ora</string>\n  <string name=\"update_available_dialog_description\">È disponibile una nuova versione di ReVanced Manager (%s).</string>\n  <string name=\"failed_to_download_update\">Impossibile scaricare l\\'aggiornamento: %s</string>\n  <string name=\"download\">Scarica</string>\n  <string name=\"download_confirmation_metered\">Attualmente sei su una connessione a consumo e potrebbero essere applicati costi per i dati dal tuo provider di servizi.\n\nVuoi comunque continuare?</string>\n  <string name=\"download_update_confirmation\">Scaricare aggiornamento?</string>\n  <string name=\"no_contributors_found\">Nessun collaboratore trovato</string>\n  <string name=\"select\">Seleziona</string>\n  <string name=\"select_deselect_all\">Seleziona o deseleziona tutto</string>\n  <string name=\"select_patches_type_dialog_description\">Aggiungi nuove patch da URL o file locali</string>\n  <string name=\"local_patches_description\">Aggiungi patch da memoria locale.</string>\n  <string name=\"remote_patches_description\">Aggiungi patch da URL. Le patch possono aggiornarsi automaticamente.</string>\n  <string name=\"recommended\">Consigliato</string>\n  <string name=\"installation_failed_dialog_title\">Installazione fallita</string>\n  <string name=\"installation_cancelled_dialog_title\">Installazione annullata</string>\n  <string name=\"installation_blocked_dialog_title\">Installazione bloccata</string>\n  <string name=\"installation_conflict_dialog_title\">Conflitto di installazione</string>\n  <string name=\"installation_incompatible_dialog_title\">Installazione incompatibile</string>\n  <string name=\"installation_invalid_dialog_title\">Installazione non valida</string>\n  <string name=\"installation_storage_issue_dialog_title\">Spazio insufficiente</string>\n  <string name=\"installation_timeout_dialog_title\">Installazione scaduta</string>\n  <string name=\"installation_failed_description\">L\\'installazione è fallita per una ragione sconosciuta. Riprovare?</string>\n  <string name=\"installation_aborted_description\">L\\'installazione è stata annullata manualmente. Riprovare?</string>\n  <string name=\"installation_blocked_description\">L\\'installazione è stata bloccata. Controlla le impostazioni di sicurezza del tuo dispositivo e riprova.</string>\n  <string name=\"installation_conflict_description\">L\\'installazione è stata impedita da un\\'installazione esistente dell\\'app. Disinstallare l\\'app installata e riprovare?</string>\n  <string name=\"installation_incompatible_description\">L\\'app non è compatibile con questo dispositivo. Utilizzare un APK compatibile con questo dispositivo e riprovare.</string>\n  <string name=\"installation_invalid_description\">L\\'app non è valida. Disinstallare l\\'app e riprovare?</string>\n  <string name=\"installation_storage_issue_description\">L\\'app non può essere installata a causa di spazio di archiviazione insufficiente. Libera spazio e riprova.</string>\n  <string name=\"installation_timeout_description\">L\\'installazione ha richiesto troppo tempo. Riprovare?</string>\n  <string name=\"reinstall\">Reinstalla</string>\n  <string name=\"show\">Mostra</string>\n  <string name=\"debugging\">Debug</string>\n  <string name=\"about_device\">Informazioni sul dispositivo</string>\n  <string name=\"enter_url\">Inserisci URL</string>\n  <string name=\"next\">Avanti</string>\n  <string name=\"auto_update\">Aggiornamento automatico</string>\n  <string name=\"add_patches\">Aggiungi patch</string>\n  <string name=\"auto_update_description\">Aggiorna automaticamente quando è disponibile una nuova versione</string>\n  <string name=\"patches_prereleases\">Usa versioni pre-release</string>\n  <string name=\"patches_prereleases_description\">Usa versioni pre-release di %s</string>\n  <string name=\"patches_url\">URL patch</string>\n  <string name=\"incompatible_patches_dialog\">Queste patch non sono compatibili con la versione dell\\'app selezionata (%1$s).\n\nClicca sulle patch per vedere maggiori dettagli.</string>\n  <string name=\"incompatible_patch\">Patch incompatibile</string>\n  <string name=\"any_version\">Qualsiasi</string>\n  <string name=\"never_show_again\">Non mostrare mai più</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Mostra messaggio di aggiornamento all\\'avvio</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Mostra una notifica popup ogni volta che è disponibile un nuovo aggiornamento all\\'avvio</string>\n  <string name=\"failed_to_import_keystore\">Impossibile importare il keystore</string>\n  <string name=\"export\">Esporta</string>\n  <string name=\"confirm\">Conferma</string>\n  <string name=\"new_announcement\">Nuovo annuncio:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d correzione</item>\n    <item quantity=\"other\">%d correzioni</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Esegui %d correzione</item>\n    <item quantity=\"other\">Esegui %d correzioni</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d selezionato</item>\n    <item quantity=\"other\">%d selezionati</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-iw-rIL/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">מתקן</string>\n  <string name=\"patches\">טלאים</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">מנהל</string>\n  <string name=\"onboarding_welcome_to\">ברוך הבא ל</string>\n  <string name=\"onboarding_welcome_back\">היי! זה ה-חדש</string>\n  <string name=\"onboarding_apps_subtitle\">באפשרותך לבחור אפליקציה לתיקון כעת או לעשות זאת מאוחר יותר</string>\n  <string name=\"onboarding_apps_network_error\">לא ניתן לטעון תיקונים מכיוון שהרשת אינה זמינה או יציבה. התחבר לרשת יציבה ונסה שוב.</string>\n  <string name=\"onboarding_updates_subtitle\">הגדר עדכונים אוטומטיים כדי לשמור על ReVanced Manager וטלאים מעודכנים</string>\n  <string name=\"banner_sources_not_downloaded_description\">לא ניתן היה להוריד תיקונים ומורדים במהלך ההתקנה. הקש על עדכן כדי להוריד אותם.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager יתחבר אל %s כדי להוריד גרסאות ראשוניות אם המכשיר שלך מחובר לאינטרנט.</string>\n  <string name=\"retry\">נסה שוב</string>\n  <string name=\"onboarding_skip\">דלג לעת עתה</string>\n  <string name=\"onboarding_recommended_version\">גרסה מומלצת: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">לדלג על הרשאות?</string>\n  <string name=\"onboarding_permissions_skip_description\">ללא ההרשאות הנדרשות, ייתכן שחלק מהתכונות לא יפעלו כראוי. תוכל להעניק אותן מאוחר יותר בהגדרות היישום.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">דלג בכל זאת</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager זקוק למספר הרשאות כדי לפעול כראוי</string>\n  <string name=\"permission_install_apps\">התקן יישומים לא ידועים</string>\n  <string name=\"permission_install_apps_description\">נדרש כדי להתקין יישומים מתוקנים</string>\n  <string name=\"permission_notifications\">עדכונים</string>\n  <string name=\"permission_notifications_description\">מאפשר תיקון בלתי פוסק ברקע</string>\n  <string name=\"permission_battery\">אופטימיזציית סוללה</string>\n  <string name=\"permission_battery_description\">מונע הפרעה של תהליך התיקון ברקע</string>\n  <string name=\"permission_grant\">הענק</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager מארח הורדות</string>\n  <string name=\"downloader_host_permission_description\">משמש לשליטה בגישה למורידי ReVanced Manager. רק ל-ReVanced Manager יש את זה.</string>\n  <string name=\"toast_copied_to_clipboard\">הועתק!</string>\n  <string name=\"copy_to_clipboard\">העתק ללוח</string>\n  <string name=\"dashboard\">לוח מחוונים</string>\n  <string name=\"settings\">הגדרות</string>\n  <string name=\"select_app\">בחר יישום</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d נבחרו</string>\n  <string name=\"fab_patch_app\">תקן יישום</string>\n  <string name=\"fab_add_patches\">הוסף תיקונים</string>\n  <string name=\"new_downloader_notification\">מוריד(ים) חדש(ים) זמין(ים). לחץ כאן כדי להגדיר אותם.</string>\n  <string name=\"unsupported_architecture_warning\">טלאי בארכיטקטורת מכשיר זו אינו נתמך וסביר להניח שיכשל.</string>\n  <string name=\"import_\">ייבוא</string>\n  <string name=\"import_patches\">ייבוא טלאים</string>\n  <string name=\"file_field_set\">נבחר</string>\n  <string name=\"file_field_not_set\">לא נבחר</string>\n  <string name=\"field_not_set\">לא מוגדר</string>\n  <string name=\"patches_missing\">חסר</string>\n  <string name=\"patches_error\">שגיאה</string>\n  <string name=\"patches_error_description\">לא ניתן לטעון טלאים. לחץ כדי להציג את השגיאה</string>\n  <string name=\"patches_not_downloaded\">הטלאים לא הורדו.</string>\n  <string name=\"patches_name_default\">טלאים</string>\n  <string name=\"patches_name_fallback\">ללא שם</string>\n  <string name=\"android_11_bug_dialog_title\">באג אנדרואיד 11</string>\n  <string name=\"android_11_bug_dialog_description\">יש להעניק את הרשאת התקנת היישומים מראש כדי למנוע באג במערכת אנדרואיד 11 שישפיע לרעה על חווית המשתמש.</string>\n  <string name=\"no_network_toast\">אין חיבור אינטרנט זמין</string>\n  <string name=\"selected_app_meta_any_version\">כל גרסה זמינה</string>\n  <string name=\"app_source_dialog_title\">בחר מקור</string>\n  <string name=\"app_source_dialog_option_auto\">אוטומטי</string>\n  <string name=\"app_source_dialog_option_auto_description\">השתמש באפליקציה מותקנת, לאחר מכן ב-APK שהורד, לאחר מכן במורידים זמינים</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">לא נמצאה אפליקציה תואמת או מורידים זמינים</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">לא ניתן לתקן אפליקציות מותקנות שוב ללא גישת רוט</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">גרסה %s אינה תואמת לגרסה המוצעת</string>\n  <string name=\"patch_item_description\">התחל לתקן את היישום</string>\n  <string name=\"patch_selector_item\">בחר תיקונים</string>\n  <string name=\"patch_selector_item_description\">%d תיקונים נבחרו</string>\n  <string name=\"patch_selection_changed_warning\">בחירת הטלאים שונתה</string>\n  <string name=\"no_patches_selected\">לא נבחרו טלאים</string>\n  <string name=\"network_unavailable_warning\">המכשיר שלך אינו מחובר לאינטרנט. ההורדה תיכשל מאוחר יותר.</string>\n  <string name=\"network_metered_warning\">אתה מחובר כרגע לחיבור עם הגבלת נתונים. חיובי נתונים מספק השירות שלך עשויים לחול.</string>\n  <string name=\"apk_source_selector_item\">בחר מקור APK</string>\n  <string name=\"apk_source_auto\">אוטומטי</string>\n  <string name=\"apk_source_auto_installed\">אוטומטי · באמצעות APK מותקן</string>\n  <string name=\"apk_source_auto_downloaded\">אוטומטי · באמצעות APK שהורד</string>\n  <string name=\"apk_source_auto_downloader\">אוטומטי · שימוש במורדים זמינים</string>\n  <string name=\"apk_source_auto_storage\">אוטומטי · בחר מתוך האחסון</string>\n  <string name=\"apk_source_downloader\">משתמש ב-%s</string>\n  <string name=\"apk_source_installed\">שימוש ב-APK מותקן</string>\n  <string name=\"apk_source_local\">שימוש בקובץ APK מקומי</string>\n  <string name=\"apk_source_downloaded\">כבר הורד</string>\n  <string name=\"legacy_import_failed\">לא ניתן לייבא הגדרות מדור קודם</string>\n  <string name=\"auto_updates_dialog_title\">הגדר עדכונים</string>\n  <string name=\"auto_updates_dialog_description\">האם ברצונך ש-ReVanced Manager יבדוק מעת לעת עדכונים לרכיבים הבאים?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">תיקוני ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: מורידים</string>\n  <string name=\"auto_updates_dialog_note\">הגדרות אלה ניתנות לשינוי מאוחר יותר.\n\n    ReVanced Manager יתחבר אל %s כדי להוריד גרסאות ראשוניות אם המכשיר שלך מחובר לאינטרנט.</string>\n  <string name=\"announcements_filter_tag\">סינון לפי תג</string>\n  <string name=\"announcements_show_archived\">הצג מאורכבים</string>\n  <string name=\"general\">כללי</string>\n  <string name=\"general_description\">שפה, ערכת נושא, צבע דינמי</string>\n  <string name=\"updates\">עדכונים</string>\n  <string name=\"updates_description\">בדוק עדכונים וצפה ביומן שינויים</string>\n  <string name=\"downloads\">הורדות</string>\n  <string name=\"downloads_description\">מורידים ואפליקציות שהורדו</string>\n  <string name=\"import_export\">ייבוא &amp; ייצוא</string>\n  <string name=\"import_export_description\">מאגר מפתחות, אפשרויות טלאים ובחירה</string>\n  <string name=\"advanced\">מתקדם</string>\n  <string name=\"advanced_description\">כתובת URL של API, מגבלת זיכרון, איתור באגים</string>\n  <string name=\"safeguards_toggled_warning\">אמצעי ההגנה שונו</string>\n  <string name=\"about\">אודות</string>\n  <string name=\"about_app_name\">אודות %1$s</string>\n  <string name=\"opensource_licenses\">רישיונות קוד פתוח</string>\n  <string name=\"opensource_licenses_description\">הצג את כל הספריות ששימשו ליצירת יישום זה</string>\n  <string name=\"contributors\">תורמים</string>\n  <string name=\"contributors_description\">הצג את תורמי ReVanced</string>\n  <string name=\"dynamic_color\">צבע דינמי</string>\n  <string name=\"dynamic_color_description\">התאם צבעים לטפט</string>\n  <string name=\"pure_black_theme\">ערכת נושא שחור טהור</string>\n  <string name=\"pure_black_theme_description\">השתמש ברקעים שחורים טהורים עבור ערכת נושא כהה</string>\n  <string name=\"theme\">ערכת נושא</string>\n  <string name=\"theme_description\">בחר בין ערכת נושא בהירה או כהה</string>\n  <string name=\"language\">שפה</string>\n  <string name=\"language_description\">בחר את שפת התצוגה של היישום</string>\n  <string name=\"language_system_default\">ברירת מחדל של המערכת</string>\n  <string name=\"search_languages\">חפש שפות…</string>\n  <string name=\"safeguards\">הגנות</string>\n  <string name=\"patch_compat_check\">השבת בדיקת תאימות גרסאות</string>\n  <string name=\"patch_compat_check_description\">אל תגביל טלאים לגרסאות יישום תואמות</string>\n  <string name=\"patch_compat_check_confirmation\">בחירת טלאים לא תואמים עלולה לגרום ליישום פגום.\\n\\nהאם ברצונך להמשיך בכל זאת?</string>\n  <string name=\"suggested_version_safeguard\">דרוש גרסת יישום מוצעת</string>\n  <string name=\"suggested_version_safeguard_description\">אכוף בחירה של גרסת היישום המוצעת</string>\n  <string name=\"suggested_version_safeguard_confirmation\">בחירת יישום שאינו הגרסה המוצעת עלולה לגרום לבעיות בלתי צפויות.\\n\\nהאם ברצונך להמשיך בכל זאת?</string>\n  <string name=\"patch_selection_safeguard\">אפשר שינוי בחירת טלאים ואפשרויות</string>\n  <string name=\"patch_selection_safeguard_description\">אל תמנע בחירה או ביטול בחירה של טלאים והתאמה אישית של אפשרויות</string>\n  <string name=\"patch_selection_safeguard_confirmation\">שינוי בחירת הטלאים עלול לגרום לבעיות בלתי צפויות.\\n\\nהפעל בכל זאת?</string>\n  <string name=\"universal_patches_safeguard\">אפשר שימוש בטלאים אוניברסליים</string>\n  <string name=\"universal_patches_safeguard_description\">אל תמנע שימוש בטלאים אוניברסליים</string>\n  <string name=\"universal_patches_safeguard_confirmation\">טלאים אוניברסליים אינם נבדקים היטב כמו אלה המיועדים ליישומים ספציפיים.\\n\\nהפעל בכל זאת?</string>\n  <string name=\"keystore\">מאגר מפתחות</string>\n  <string name=\"patches_selections\">בחירות תיקונים</string>\n  <string name=\"import_keystore\">ייבוא מאגר מפתחות</string>\n  <string name=\"import_keystore_description\">ייבא מאגר מפתחות מותאם אישית</string>\n  <string name=\"import_keystore_dialog_title\">הזן פרטי אימות של מאגר מפתחות</string>\n  <string name=\"import_keystore_dialog_description\">יהיה עליך להזין את פרטי האימות של מאגר המפתחות כדי לייבא אותו.</string>\n  <string name=\"import_keystore_dialog_alias_field\">שם משתמש (כינוי)</string>\n  <string name=\"import_keystore_dialog_password_field\">סיסמה</string>\n  <string name=\"import_keystore_dialog_button\">ייבוא</string>\n  <string name=\"import_keystore_wrong_credentials\">פרטי אימות שגויים של מאגר מפתחות</string>\n  <string name=\"import_keystore_success\">מאגר מפתחות יובא</string>\n  <string name=\"export_keystore\">ייצוא מאגר מפתחות</string>\n  <string name=\"export_keystore_description\">ייצא את מאגר המפתחות הנוכחי</string>\n  <string name=\"export_keystore_unavailable\">אין מאגר מפתחות לייצוא</string>\n  <string name=\"export_keystore_success\">מאגר מפתחות יוצא</string>\n  <string name=\"regenerate_keystore\">צור מחדש מאגר מפתחות</string>\n  <string name=\"regenerate_keystore_description\">צור מאגר מפתחות חדש</string>\n  <string name=\"regenerate_keystore_dialog_description\">אתה עומד ליצור מחדש את מאגר המפתחות שהמנהל ישתמש בו במהלך תהליך התיקון.\\n\\nלא תוכל לעדכן יישומים שהותקנו בעבר ממקור זה.</string>\n  <string name=\"regenerate_keystore_success\">מאגר המפתחות הוחלף בהצלחה</string>\n  <string name=\"import_patch_selection\">ייבוא בחירת טלאים</string>\n  <string name=\"import_patch_selection_description\">ייבא בחירת טלאים מקובץ JSON</string>\n  <string name=\"import_patch_selection_fail\">לא ניתן לייבא בחירת טלאים: %s</string>\n  <string name=\"import_patch_selection_success\">בחירת טלאים יובאה</string>\n  <string name=\"select_bundle_for_import\">בחר חבילה לייבוא אליה</string>\n  <string name=\"export_patch_selection\">ייצוא בחירת טלאים</string>\n  <string name=\"export_patch_selection_description\">ייצא בחירת טלאים לקובץ JSON</string>\n  <string name=\"export_patch_selection_fail\">לא ניתן לייצא בחירת טלאים: %s</string>\n  <string name=\"export_patch_selection_success\">בחירת טלאים יוצאה</string>\n  <string name=\"select_bundle_for_export\">בחר חבילה לייצוא ממנה</string>\n  <string name=\"patch_selection_packages\">יישומים עם בחירות שמורות</string>\n  <string name=\"patch_selection_entries\">סה\\\"כ תיקונים שנבחרו</string>\n  <string name=\"reset_configuration\">אפס תצורה</string>\n  <string name=\"reset_patch_selection\">בחירות תיקונים</string>\n  <string name=\"reset_patch_selection_description\">אפס את בחירת הטלאים השמורה</string>\n  <string name=\"reset_patch_options\">אפשרויות תיקון</string>\n  <string name=\"reset_patch_options_description\">אפס את אפשרויות הטלאים השמורות</string>\n  <string name=\"reset_patch_selection_success\">בחירת הטלאים אופסה</string>\n  <string name=\"patch_selection_reset_all\">אפס בחירת טלאים גלובלית</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">אתה עומד לאפס את כל בחירות הטלאים. תצטרך לבחור כל טלאי מחדש באופן ידני.</string>\n  <string name=\"patch_selection_reset_all_description\">מאפס את כל בחירות הטלאים</string>\n  <string name=\"patch_selection_reset_package\">אפס בחירת טלאים עבור יישום</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">אתה עומד לאפס את בחירת הטלאים עבור היישום \\\"%s\\\". תצטרך לבחור כל טלאי מחדש באופן ידני.</string>\n  <string name=\"patch_selection_reset_package_description\">מאפס בחירת טלאים עבור יישום יחיד</string>\n  <string name=\"patch_selection_reset_patches\">איפוס בחירת תיקון (יחיד)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">אתה עומד לאפס את בחירת התיקון עבור \\\"%s\\\". תצטרך לבחור כל תיקון שוב באופן ידני.</string>\n  <string name=\"patch_selection_reset_patches_description\">מאפס את בחירת התיקונים עבור אוסף ספציפי של תיקונים</string>\n  <string name=\"patch_options_reset_package\">איפוס אפשרויות תיקון עבור אפליקציה</string>\n  <string name=\"patch_options_reset_package_dialog_description\">אתה עומד לאפס את אפשרויות התיקון עבור האפליקציה \\\"%s\\\". תצטרך להחיל כל אפשרות שוב.</string>\n  <string name=\"patch_options_reset_package_description\">מאפס אפשרויות תיקון עבור אפליקציה בודדת</string>\n  <string name=\"patch_options_reset_patches\">איפוס אפשרויות תיקון (יחיד)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">אתה עומד לאפס את אפשרויות התיקון עבור \\\"%s\\\". תצטרך להחיל כל אפשרות שוב.</string>\n  <string name=\"patch_options_reset_patches_description\">מאפס את אפשרויות התיקונים עבור אוסף ספציפי של תיקונים</string>\n  <string name=\"patch_options_reset_all\">איפוס אפשרויות תיקון גלובליות</string>\n  <string name=\"patch_options_reset_all_dialog_description\">אתה עומד לאפס את כל אפשרויות התיקון. תצטרך להחיל כל אפשרות שוב.</string>\n  <string name=\"patch_options_reset_all_description\">מאפס את כל אפשרויות התיקון</string>\n  <string name=\"downloaders\">מורידים</string>\n  <string name=\"downloader_prereleases\">השתמש בטרום-הפצות</string>\n  <string name=\"downloader_prereleases_description\">השתמש בגרסאות קדם-הפצה של המוריד הראשי</string>\n  <string name=\"downloader_state_loaded\">נטען</string>\n  <string name=\"downloader_state_failed\">הטעינה נכשלה. לחץ לפרטים נוספים</string>\n  <string name=\"downloader_state_missing\">חסר</string>\n  <string name=\"downloader_delete_apps_title\">מחק אפליקציות נבחרות</string>\n  <string name=\"downloader_delete_apps_description\">האם אתה בטוח שברצונך למחוק את האפליקציות הנבחרות?</string>\n  <string name=\"downloader_delete_single_description\">האם אתה בטוח שברצונך למחוק את \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">לא נמצאו יישומים שהורדו.</string>\n  <string name=\"downloader_settings_no_apps_description\">יישומים שהורדו באמצעות ReVanced Manager יופיעו כאן.</string>\n  <string name=\"downloader_url\">כתובת אתר למוריד</string>\n  <string name=\"downloader_add\">הוסף מוריד</string>\n  <string name=\"select_downloader_type_dialog_description\">הוסף מורידים חדשים מכתובת אתר או קבצים מקומיים</string>\n  <string name=\"local_downloaders_description\">הוסף מורידים מאחסון מקומי.</string>\n  <string name=\"remote_downloaders_description\">הוסף מורידים מכתובת אתר. ניתן לעדכן אוטומטית.</string>\n  <string name=\"install_revanced_downloaders\">התקן מורידים כדי לקבל יישומים ישירות בתוך ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">התקן מורידי ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">לבטל התקנת מורידים?</string>\n  <string name=\"cancel_downloader_install_description\">התקנת מורידים מתבצעת כעת. אם תעזוב עכשיו, ההורדה תבוטל.</string>\n  <string name=\"downloader_sources_unavailable_title\">המורידים האלה חסרים</string>\n  <string name=\"downloader_sources_unavailable_description\">לחץ על כפתור העדכון כדי לתקן זאת.</string>\n  <string name=\"downloader_update_failed\">נכשל לעדכן מוריד: %s</string>\n  <string name=\"downloader_replace_fail\">נכשל לייבא מוריד: %s</string>\n  <string name=\"search_apps\">חפש יישומים…</string>\n  <string name=\"loading_body\">טוען…</string>\n  <string name=\"downloading_patches\">מוריד תיקונים…</string>\n  <string name=\"options\">אפשרויות</string>\n  <string name=\"ok\">אישור</string>\n  <string name=\"yes\">כן</string>\n  <string name=\"no\">לא</string>\n  <string name=\"edit\">ערוך</string>\n  <string name=\"dialog_input_placeholder\">ערך</string>\n  <string name=\"reset\">איפוס</string>\n  <string name=\"share\">שתף</string>\n  <string name=\"patch\">תיקון</string>\n  <string name=\"select_from_storage\">בחר מהאחסון</string>\n  <string name=\"select_from_storage_description\">בחר קובץ APK מהאחסון באמצעות בוחר הקבצים</string>\n  <string name=\"suggested_version_info\">גרסה מוצעת: %s</string>\n  <string name=\"type_anything\">הקלד כל דבר כדי להמשיך</string>\n  <string name=\"search\">חפש תיקונים…</string>\n  <string name=\"apply\">החל</string>\n  <string name=\"help\">עזרה</string>\n  <string name=\"back\">חזור</string>\n  <string name=\"warning\">אזהרה</string>\n  <string name=\"add\">הוסף</string>\n  <string name=\"enable\">אפשר</string>\n  <string name=\"disable\">השבת</string>\n  <string name=\"close\">סגור</string>\n  <string name=\"clear\">נקה</string>\n  <string name=\"system\">מערכת</string>\n  <string name=\"light\">בהיר</string>\n  <string name=\"dark\">כהה</string>\n  <string name=\"appearance\">מראה</string>\n  <string name=\"networking\">רשת</string>\n  <string name=\"allow_metered_networks\">אפשר רשתות עם תשלום לפי שימוש</string>\n  <string name=\"allow_metered_networks_description\">מאפשר עדכונים אוטומטיים ברשתות עם תשלום לפי שימוש.\\n    היישום עשוי עדיין להזהיר לגבי רשתות עם תשלום לפי שימוש עבור פעולות ידניות.</string>\n  <string name=\"downloaded_apps\">יישומים שהורדו</string>\n  <string name=\"process_runtime\">הפעל את Patcher בתהליך אחר (ניסיוני)</string>\n  <string name=\"process_runtime_description\">זה מהיר יותר ומאפשר ל-Patcher להשתמש ביותר זיכרון</string>\n  <string name=\"process_runtime_memory_limit\">מגבלת זיכרון לתהליך Patcher</string>\n  <string name=\"process_runtime_memory_limit_description\">כמות הזיכרון המקסימלית שתהליך התיקון יכול להשתמש בה</string>\n  <string name=\"debug_logs_export\">ייצא יומני דיבאג</string>\n  <string name=\"debug_logs_export_read_failed\">נכשל בקריאת יומנים (קוד יציאה %d)</string>\n  <string name=\"debug_logs_export_failed\">נכשל לייצא יומנים</string>\n  <string name=\"debug_logs_export_success\">יומנים שיוצאו</string>\n  <string name=\"api_url\">כתובת URL של API</string>\n  <string name=\"api_url_description\">ה-API המשמש להורדת קבצים נחוצים</string>\n  <string name=\"api_url_dialog_title\">שנה כתובת URL של API</string>\n  <string name=\"api_url_dialog_description\">שנה את כתובת ה-URL של ה-API של ReVanced Manager. ReVanced Manager משתמש ב-API כדי להוריד תיקונים ועדכונים.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager מתחבר ל-API כדי להוריד תיקונים ועדכונים. ודא שאתה סומך עליו.</string>\n  <string name=\"api_url_dialog_save\">הגדר</string>\n  <string name=\"api_url_dialog_reset\">אפס כתובת URL של API</string>\n  <string name=\"device\">התקן</string>\n  <string name=\"device_android_version\">גרסת אנדרואיד</string>\n  <string name=\"device_model\">דגם</string>\n  <string name=\"device_architectures\">ארכיטקטורות מעבד</string>\n  <string name=\"device_memory_limit\">מגבלות זיכרון</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (רגיל) - %2$dMB (גדול)</string>\n  <string name=\"patches_force_download\">הורד בכפייה את כל התיקונים</string>\n  <string name=\"patches_reset\">אפס תיקונים</string>\n  <string name=\"reset_onboarding\">אפס הטמעה ראשונית</string>\n  <string name=\"reset_onboarding_description\">הצג את מסך ההטמעה הראשונית בהפעלה הבאה של היישום</string>\n  <string name=\"patching\">תיקון</string>\n  <string name=\"signing\">חתימה</string>\n  <string name=\"storage\">אחסון</string>\n  <string name=\"no_patch_found\">לא נמצא תיקון. בדוק את התיקונים שלך</string>\n  <string name=\"tab_apps\">יישומים</string>\n  <string name=\"tab_patches\">תיקונים</string>\n  <string name=\"delete\">מחק</string>\n  <string name=\"refresh\">רענן</string>\n  <string name=\"continue_anyways\">המשך בכל מקרה</string>\n  <string name=\"download_another_version\">הורד גרסה אחרת</string>\n  <string name=\"download_app\">הורד יישום</string>\n  <string name=\"download_apk\">הורד קובץ APK</string>\n  <string name=\"patches_download_fail\">נכשל בהורדת תיקונים: %s</string>\n  <string name=\"api_not_working_title\">שירות ה-API אינו זמין כרגע</string>\n  <string name=\"api_not_working_description\">חלק מהתכונות עשויות להיות מושפעות. בדוק את חיבורך או את כתובת ה-URL של ה-API בהגדרות.</string>\n  <string name=\"patches_replace_fail\">נכשל בייבוא תיקונים: %s</string>\n  <string name=\"no_patched_apps_found\">לא נמצאו יישומים מתוקנים</string>\n  <string name=\"no_patched_apps_description\">נכון לעכשיו אין לך יישומים מתוקנים שאנו מכירים. שנה זאת על ידי תיקון היישום הראשון שלך!</string>\n  <string name=\"patched_apps_section_title\">יישומים מתוקנים</string>\n  <string name=\"patchable_apps_section_title\">יישומים שניתן לתקן</string>\n  <string name=\"no_patches_found\">לא נמצאו תיקונים</string>\n  <string name=\"no_patches_description\">אין לך עדיין תיקונים. הוסף תיקונים על ידי הקשה על הכפתור למטה!</string>\n  <string name=\"tap_on_patches\">הקש על התיקונים כדי לקבל מידע נוסף עליהם</string>\n  <string name=\"patches_selected\">%s נבחרו</string>\n  <string name=\"incompatible_patches\">תיקונים לא תואמים</string>\n  <string name=\"universal_patches\">תיקונים אוניברסליים</string>\n  <string name=\"patch_selection_reset_toast\">בחירת התיקונים והאפשרויות אופסו לברירות המחדל המומלצות</string>\n  <string name=\"patch_options_reset_toast\">אפשרויות התיקונים אופסו</string>\n  <string name=\"non_suggested_version_warning_title\">גרסה שאינה מוצעת</string>\n  <string name=\"non_suggested_version_warning_description\">גרסת היישום שבחרת אינה תואמת את הגרסה המוצעת.\\nאנא השתמש בגרסה המוצעת: %s\\n\\nכדי להמשיך בכל מקרה, בטל את \\\"דרוש גרסת יישום מוצעת\\\" בהגדרות המתקדמות.</string>\n  <string name=\"selection_warning_title\">להפסיק להשתמש בברירות המחדל?</string>\n  <string name=\"selection_warning_description\">מומלץ להשתמש בבחירת התיקונים ובאפשרויות ברירת המחדל. שינוי שלהם עלול לגרום לבעיות בלתי צפויות.\\n\\nעליך להפעיל את \\\"אפשר שינוי בחירת תיקונים ואפשרויות\\\" בהגדרות המתקדמות לפני הפעלת/כיבוי תיקונים.</string>\n  <string name=\"universal_patch_warning_description\">לתיקונים אוניברסליים יש שימוש כללי יותר והם אינם עובדים באמינות כמו תיקונים המיועדים ליישומים ספציפיים. אתה עלול להיתקל בבעיות בעת השימוש בהם.\\n\\nעליך להפעיל את \\\"אפשר שימוש בתיקונים אוניברסליים\\\" בהגדרות המתקדמות לפני שימוש בתיקונים אוניברסליים.</string>\n  <string name=\"this_version\">גרסה זו</string>\n  <string name=\"universal\">כל יישום</string>\n  <string name=\"search_patches\">חפש תיקונים</string>\n  <string name=\"app_version_not_compatible\">תיקון זה אינו תואם לגרסת היישום הנבחרת (%1$s)\\n\\nהוא תואם רק לגרסאות הבאות: %2$s</string>\n  <string name=\"continue_with_version\">להמשיך עם גרסה זו?</string>\n  <string name=\"version_not_compatible\">לא כל התיקונים תואמים לגרסה זו (%s). האם ברצונך להמשיך בכל זאת?</string>\n  <string name=\"download_application\">להוריד יישום?</string>\n  <string name=\"app_not_installed\">היישום שבחרת אינו מותקן. האם ברצונך להוריד אותו?</string>\n  <string name=\"failed_to_load_apk\">נכשל בטעינת APK</string>\n  <string name=\"split_apk_not_supported\">לא ניתן לתקן APKs מפוצלים</string>\n  <string name=\"loading\">טוען…</string>\n  <string name=\"not_installed\">לא מותקן</string>\n  <string name=\"installed\">מותקן</string>\n  <string name=\"app_info\">פרטי יישום</string>\n  <string name=\"uninstall\">הסר התקנה</string>\n  <string name=\"unpatch\">בטל תיקון</string>\n  <string name=\"repatch\">תקן מחדש</string>\n  <string name=\"install_type\">סוג התקנה</string>\n  <string name=\"package_name\">שם החבילה</string>\n  <string name=\"original_package_name\">שם החבילה המקורי</string>\n  <string name=\"applied_patches\">תיקונים שהוחלו</string>\n  <string name=\"view_applied_patches\">הצג תיקונים שהוחלו</string>\n  <string name=\"default_install\">ברירת מחדל</string>\n  <string name=\"mount_install\">טעינה</string>\n  <string name=\"mounted\">נטען</string>\n  <string name=\"not_mounted\">לא נטען</string>\n  <string name=\"mount\">טען</string>\n  <string name=\"unmount\">בטל טעינה</string>\n  <string name=\"failed_to_mount\">נכשל לטעון: %s</string>\n  <string name=\"failed_to_unmount\">נכשל לבטל טעינה: %s</string>\n  <string name=\"unpatch_app\">לבטל תיקון ליישום?</string>\n  <string name=\"unpatch_description\">האם אתה בטוח שברצונך לבטל את תיקון היישום הזה?</string>\n  <string name=\"downloader_invalid_version\">מוריד הקבצים לא אחזר את הגרסה הנכונה</string>\n  <string name=\"downloader_app_not_found\">מוריד הקבצים לא מצא את היישום</string>\n  <string name=\"downloader_error\">שגיאת מוריד קבצים: %s</string>\n  <string name=\"no_downloaders_installed\">לא מותקנים מורידי יישומים!</string>\n  <string name=\"no_downloaders_trusted\">אף מוריד יישומים לא קיבל אמון! אנא בדוק את ההגדרות שלך.</string>\n  <string name=\"already_patched\">כבר תוקן</string>\n  <string name=\"patch_selector_sheet_filter_title\">סינון</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">תאימות</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">חבילות</string>\n  <string name=\"patch_selector_sheet_actions_title\">פעולות</string>\n  <string name=\"restore_default_selection\">שחזר בחירה לברירת מחדל</string>\n  <string name=\"deselect_all\">בטל את כל הבחירות</string>\n  <string name=\"invert_selection\">הפוך בחירה</string>\n  <string name=\"deselect_all_except\">בטל בחירה של הכל מלבד %s</string>\n  <string name=\"scope_dialog_title\">החל על</string>\n  <string name=\"scope_all_patches\">כל התיקונים</string>\n  <string name=\"scope_bundle_patches\">%s בלבד</string>\n  <string name=\"string_option_menu_description\">אפשרויות נוספות</string>\n  <string name=\"option_preset_custom_value\">ערך מותאם אישית</string>\n  <string name=\"path_selector\">בחר מהאחסון</string>\n  <string name=\"path_selector_parent_dir\">ספרייה קודמת</string>\n  <string name=\"path_selector_dirs\">ספריות</string>\n  <string name=\"path_selector_files\">קבצים</string>\n  <string name=\"show_password_field\">הצג סיסמה</string>\n  <string name=\"hide_password_field\">הסתר סיסמה</string>\n  <string name=\"installer\">מתקין</string>\n  <string name=\"install_app\">התקן</string>\n  <string name=\"install_app_success\">היישום הותקן</string>\n  <string name=\"install_app_fail\">נכשל להתקין יישום: %s</string>\n  <string name=\"reinstall_app_fail\">נכשל להתקין מחדש יישום: %s</string>\n  <string name=\"uninstall_app_fail\">נכשל להסיר התקנת יישום: %s</string>\n  <string name=\"open_app\">פתח</string>\n  <string name=\"save_apk\">שמור APK</string>\n  <string name=\"save_apk_success\">APK נשמר</string>\n  <string name=\"sign_fail\">נכשל לחתום על APK: %s</string>\n  <string name=\"save_logs\">שמור יומנים</string>\n  <string name=\"save_as_file\">שמור לקבצים</string>\n  <string name=\"export_patcher_logs\">ייצוא יומני תיקון</string>\n  <string name=\"save_logs_success\">היומנים נשמרו</string>\n  <string name=\"downloader_activity_dialog_body\">נדרשת אינטראקציה עם המשתמש כדי להמשיך עם מוריד זה.</string>\n  <string name=\"select_install_type\">בחר סוג התקנה</string>\n  <string name=\"patcher_step_group_preparing\">מכין</string>\n  <string name=\"patcher_step_load_patches\">טען תיקונים</string>\n  <string name=\"patcher_step_unpack\">הכן מתקן</string>\n  <string name=\"patcher_step_group_patching\">מתקן</string>\n  <string name=\"patcher_step_group_saving\">שומר</string>\n  <string name=\"patcher_step_write_patched\">כתוב קובץ APK מתוקן</string>\n  <string name=\"patcher_step_sign_apk\">חתום על קובץ APK מתוקן</string>\n  <string name=\"patcher_notification_title\">תיקון מתבצע…</string>\n  <string name=\"patcher_notification_text\">הקש כדי לחזור למתקן</string>\n  <string name=\"patcher_stop_confirm_title\">עצור מתקן</string>\n  <string name=\"patcher_stop_confirm_description\">האם אתה בטוח שברצונך לעצור את תהליך התיקון?</string>\n  <string name=\"patcher_install_in_progress\">ההתקנה מתבצעת. אנא המתן</string>\n  <string name=\"execute_patches\">בצע תיקונים</string>\n  <string name=\"executing_patch\">בצע %s</string>\n  <string name=\"failed_to_execute_patch\">נכשל לבצע %s</string>\n  <string name=\"step_completed\">הושלם</string>\n  <string name=\"step_failed\">נכשל</string>\n  <string name=\"step_running\">פועל</string>\n  <string name=\"step_waiting\">ממתין</string>\n  <string name=\"expand_content\">הרחב</string>\n  <string name=\"collapse_content\">כווץ</string>\n  <string name=\"drag_handle\">סדר מחדש</string>\n  <string name=\"more\">עוד</string>\n  <string name=\"less\">פחות</string>\n  <string name=\"continue_\">המשך</string>\n  <string name=\"dismiss\">בטל</string>\n  <string name=\"view_announcement\">הצג הודעה</string>\n  <string name=\"permanent_dismiss\">אל תציג זאת שוב</string>\n  <string name=\"donate\">תרום</string>\n  <string name=\"website\">אתר אינטרנט</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">צור קשר</string>\n  <string name=\"license\">רישיון</string>\n  <string name=\"source\">מקור</string>\n  <string name=\"repository\">מאגר</string>\n  <string name=\"bundle_information_by_author\">מאת %1$s</string>\n  <string name=\"version\">גרסה</string>\n  <string name=\"version_compatibility_warning\">הגרסה הנבחרת עשויה להיות בלתי תואמת עם הטלאים שנבחרו</string>\n  <string name=\"submit_feedback\">שלח בעיה או משוב</string>\n  <string name=\"submit_feedback_description\">עזור לנו לשפר יישום זה</string>\n  <string name=\"developer_options\">אפשרויות מפתח</string>\n  <string name=\"developer_options_description\">אפשרויות לניפוי באגים</string>\n  <string name=\"patches_update_success\">העדכון הצליח</string>\n  <string name=\"patches_update_unavailable\">אין עדכון זמין</string>\n  <string name=\"view_patches\">הצג תיקונים</string>\n  <string name=\"patches_view_any_version\">כל גרסה</string>\n  <string name=\"patches_view_any_package\">כל חבילה</string>\n  <string name=\"patches_delete_single_dialog_description\">האם אתה בטוח שברצונך למחוק את „%s”?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">האם אתה בטוח שברצונך למחוק את התיקונים הנבחרים?</string>\n  <string name=\"announcements\">הודעות</string>\n  <string name=\"archive\">ארכיון</string>\n  <string name=\"about_revanced_manager\">אודות ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager הוא יישום Android המשתמש ב־ReVanced Patcher כדי לתקן יישומי Android. הוא מאפשר לך להוריד ולתקן יישומים עם תיקונים מותאמים אישית, ולנהל את תהליך התיקון.</string>\n  <string name=\"developer_options_taps\">%d הקשות נותרו</string>\n  <string name=\"developer_options_enabled\">אפשרויות מפתח הופעלו</string>\n  <string name=\"developer_options_already_enabled\">אפשרויות מפתח כבר מופעלות</string>\n  <string name=\"update_available\">עדכון זמין</string>\n  <string name=\"current_version\">גרסה נוכחית: %s</string>\n  <string name=\"new_version\">גרסה חדשה: %s</string>\n  <string name=\"ready_to_install_update\">מוכן להתקנת עדכון</string>\n  <string name=\"update_completed\">העדכון הותקן</string>\n  <string name=\"install_update_manager_failed\">נכשל להתקין עדכון</string>\n  <string name=\"manual_update_check\">בדוק עדכונים</string>\n  <string name=\"view_update\">צפה בעדכון</string>\n  <string name=\"manual_update_check_description\">בדוק ידנית עדכונים</string>\n  <string name=\"update_checking_manager\">בדוק עדכונים בהפעלה</string>\n  <string name=\"update_checking_manager_description\">בדוק גרסאות חדשות של ReVanced Manager כאשר היישום מופעל</string>\n  <string name=\"update_checking_downloader\">בדוק עדכונים למורידי ReVanced בהפעלה</string>\n  <string name=\"update_checking_downloader_description\">בדוק עדכונים למורידי ReVanced המותקנים כאשר היישום מופעל</string>\n  <string name=\"manager_prereleases\">השתמש בגרסאות קדם-הפצה</string>\n  <string name=\"manager_prereleases_description\">השתמש בגרסאות קדם-הפצה של ReVanced Manager</string>\n  <string name=\"prereleases_warning\">גרסאות קדם-הפצה עשויות להיות בלתי יציבות ולהכיל באגים. ייתכן שתחווה קריסות, אובדן נתונים או בעיות בלתי צפויות אחרות. אפשר זאת רק אם אתה מרגיש בנוח עם סיכונים אלה.</string>\n  <string name=\"changelog\">צפה ביומן שינויים</string>\n  <string name=\"changelog_loading\">טוען יומן שינויים</string>\n  <string name=\"changelog_download_fail\">נכשל להוריד יומן שינויים: %s</string>\n  <string name=\"changelog_description\">בדוק את השינויים האחרונים בעדכון זה</string>\n  <string name=\"battery_optimization_notification\">אופטימיזציות סוללה חייבות להיות כבויות כדי ש־ReVanced Manager יעבוד כהלכה ברקע. לחץ כאן כדי לכבות אופטימיזציות.</string>\n  <string name=\"installing_manager_update\">מתקין עדכון…</string>\n  <string name=\"downloading_manager_update\">מוריד עדכון…</string>\n  <string name=\"download_manager_failed\">נכשל להוריד עדכון: %s</string>\n  <string name=\"cancel\">ביטול</string>\n  <string name=\"save\">שמור</string>\n  <string name=\"save_with_count\">שמור (%1$s)</string>\n  <string name=\"update\">עדכון</string>\n  <string name=\"empty\">ריק</string>\n  <string name=\"installing_message\">הקש על <b>עדכון</b> כאשר תתבקש.\nReVanced Manager ייסגר בעת העדכון.</string>\n  <string name=\"no_changelogs_found\">לא נמצאו יומני שינויים</string>\n  <string name=\"just_now\">ממש עכשיו</string>\n  <string name=\"minutes_ago\">לפני %s דקות</string>\n  <string name=\"hours_ago\">לפני %s שעות</string>\n  <string name=\"days_ago\">לפני %s ימים</string>\n  <string name=\"invalid_date\">תאריך לא חוקי</string>\n  <string name=\"disable_battery_optimization\">השבת אופטימיזציית סוללה</string>\n  <string name=\"input_dialog_value_invalid\">ערך לא חוקי</string>\n  <string name=\"option_required\">אפשרות זו נדרשת</string>\n  <string name=\"required_options_screen\">אפשרויות נדרשות</string>\n  <string name=\"failed_to_check_updates\">נכשל לבדוק עדכונים: %s</string>\n  <string name=\"no_update_available\">אין עדכון זמין</string>\n  <string name=\"no_announcements_found\">לא נמצאו הודעות</string>\n  <string name=\"update_check\">בודק עדכונים…</string>\n  <string name=\"dismiss_temporary\">לא עכשיו</string>\n  <string name=\"update_available_dialog_description\">גרסה חדשה של ReVanced Manager (%s) זמינה.</string>\n  <string name=\"failed_to_download_update\">נכשל להוריד עדכון: %s</string>\n  <string name=\"download\">הורד</string>\n  <string name=\"download_confirmation_metered\">אתה מחובר כעת לחיבור עם הגבלת נתונים, וייתכנו חיובים מספק השירות שלך.\\n\\nהאם ברצונך להמשיך בכל זאת?</string>\n  <string name=\"download_update_confirmation\">להוריד עדכון?</string>\n  <string name=\"no_contributors_found\">לא נמצאו תורמים</string>\n  <string name=\"select\">בחר</string>\n  <string name=\"select_deselect_all\">בחר או בטל בחירה של הכל</string>\n  <string name=\"select_patches_type_dialog_description\">הוסף תיקונים חדשים מכתובת אתר או קבצים מקומיים</string>\n  <string name=\"local_patches_description\">הוסף תיקונים מהאחסון המקומי.</string>\n  <string name=\"remote_patches_description\">הוסף תיקונים מכתובת אתר. תיקונים יכולים להתעדכן באופן אוטומטי.</string>\n  <string name=\"recommended\">מומלץ</string>\n  <string name=\"installation_failed_dialog_title\">ההתקנה נכשלה</string>\n  <string name=\"installation_cancelled_dialog_title\">ההתקנה בוטלה</string>\n  <string name=\"installation_blocked_dialog_title\">ההתקנה נחסמה</string>\n  <string name=\"installation_conflict_dialog_title\">התנגשות התקנה</string>\n  <string name=\"installation_incompatible_dialog_title\">התקנה לא תואמת</string>\n  <string name=\"installation_invalid_dialog_title\">התקנה לא חוקית</string>\n  <string name=\"installation_storage_issue_dialog_title\">אין מספיק שטח אחסון</string>\n  <string name=\"installation_timeout_dialog_title\">זמן ההתקנה פג</string>\n  <string name=\"installation_failed_description\">ההתקנה נכשלה עקב סיבה לא ידועה. לנסות שוב?</string>\n  <string name=\"installation_aborted_description\">ההתקנה בוטלה ידנית. לנסות שוב?</string>\n  <string name=\"installation_blocked_description\">ההתקנה נחסמה. סקור את הגדרות האבטחה של המכשיר שלך ונסה שוב.</string>\n  <string name=\"installation_conflict_description\">ההתקנה נמנעה עקב התקנה קיימת של היישום. להסיר את היישום המותקן ולנסות שוב?</string>\n  <string name=\"installation_incompatible_description\">היישום אינו תואם למכשיר זה. השתמש ב־APK התואם למכשיר זה ונסה שוב.</string>\n  <string name=\"installation_invalid_description\">היישום אינו חוקי. להסיר את היישום ולנסות שוב?</string>\n  <string name=\"installation_storage_issue_description\">לא ניתן היה להתקין את היישום עקב שטח אחסון לא מספק. פנה מעט מקום ונסה שוב.</string>\n  <string name=\"installation_timeout_description\">ההתקנה ארכה זמן רב מדי. לנסות שוב?</string>\n  <string name=\"reinstall\">התקן מחדש</string>\n  <string name=\"show\">הצג</string>\n  <string name=\"debugging\">ניפוי באגים</string>\n  <string name=\"about_device\">אודות המכשיר</string>\n  <string name=\"enter_url\">הזן כתובת אתר</string>\n  <string name=\"next\">הבא</string>\n  <string name=\"auto_update\">עדכון אוטומטי</string>\n  <string name=\"add_patches\">הוסף תיקונים</string>\n  <string name=\"auto_update_description\">עדכן אוטומטית כשגרסה חדשה זמינה</string>\n  <string name=\"patches_prereleases\">השתמש בגרסאות קדם-הפצה</string>\n  <string name=\"patches_prereleases_description\">השתמש בגרסאות קדם-הפצה של %s</string>\n  <string name=\"patches_url\">כתובת אתר התיקונים</string>\n  <string name=\"incompatible_patches_dialog\">תיקונים אלה אינם תואמים לגרסת היישום הנבחרת (%1$s).\\n\\nלחץ על התיקונים כדי לראות פרטים נוספים.</string>\n  <string name=\"incompatible_patch\">תיקון לא תואם</string>\n  <string name=\"any_version\">כלשהו</string>\n  <string name=\"never_show_again\">אל תציג שוב לעולם</string>\n  <string name=\"show_manager_update_dialog_on_launch\">הצג הודעת עדכון בהפעלה</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">הצג התראת קופצת בכל פעם שעדכון חדש זמין בהפעלה</string>\n  <string name=\"failed_to_import_keystore\">נכשל לייבא מאגר מפתחות</string>\n  <string name=\"export\">ייצא</string>\n  <string name=\"confirm\">אשר</string>\n  <string name=\"new_announcement\">הודעה חדשה:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d תיקון</item>\n    <item quantity=\"two\">%d תיקונים</item>\n    <item quantity=\"many\">%d תיקונים</item>\n    <item quantity=\"other\">%d תיקונים</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">בצע %d תיקון</item>\n    <item quantity=\"two\">בצע %d תיקונים</item>\n    <item quantity=\"many\">בצע %d תיקונים</item>\n    <item quantity=\"other\">בצע %d תיקונים</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d נבחר</item>\n    <item quantity=\"two\">%d נבחרו</item>\n    <item quantity=\"many\">%d נבחרו</item>\n    <item quantity=\"other\">%d נבחרו</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ja-rJP/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">パッチャー</string>\n  <string name=\"patches\">パッチ</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">マネージャー</string>\n  <string name=\"onboarding_welcome_to\">ようこそ</string>\n  <string name=\"onboarding_welcome_back\">こんにちは！新しい</string>\n  <string name=\"onboarding_apps_subtitle\">今すぐパッチを適用するアプリを選択することも、後で行うこともできます</string>\n  <string name=\"onboarding_apps_network_error\">ネットワークが利用できないか不安定なため、パッチを読み込めませんでした。安定したネットワークに接続して、もう一度お試しください。</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager とパッチを最新の状態に保つため、自動更新を設定してください</string>\n  <string name=\"banner_sources_not_downloaded_description\">セットアップ中にパッチとダウンローダーをダウンロードできませんでした。更新をタップしてダウンロードしてください。</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager は、お使いのデバイスがインターネットに接続されている場合、初期バージョンをダウンロードするために %s に接続します。</string>\n  <string name=\"retry\">再試行</string>\n  <string name=\"onboarding_skip\">今はスキップ</string>\n  <string name=\"onboarding_recommended_version\">推奨バージョン: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">権限をスキップしますか？</string>\n  <string name=\"onboarding_permissions_skip_description\">必要な権限がない場合、一部の機能が正しく動作しない可能性があります。権限は後でアプリ設定で付与できます。</string>\n  <string name=\"onboarding_permissions_skip_anyway\">とにかくスキップ</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Managerが正しく動作するには、いくつかの権限が必要です</string>\n  <string name=\"permission_install_apps\">不明なアプリのインストール</string>\n  <string name=\"permission_install_apps_description\">パッチが適用されたアプリケーションをインストールするために必要です</string>\n  <string name=\"permission_notifications\">通知</string>\n  <string name=\"permission_notifications_description\">バックグラウンドで中断することなくパッチを適用できます</string>\n  <string name=\"permission_battery\">バッテリー最適化</string>\n  <string name=\"permission_battery_description\">バックグラウンドでのパッチ適用が中断されるのを防ぎます</string>\n  <string name=\"permission_grant\">許可</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager ダウンローダーホスト</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Managerのダウンローダーへのアクセスを制御するために使用されます。ReVanced Managerのみがこれを所有しています。</string>\n  <string name=\"toast_copied_to_clipboard\">コピーしました！</string>\n  <string name=\"copy_to_clipboard\">クリップボードにコピー</string>\n  <string name=\"dashboard\">ダッシュボード</string>\n  <string name=\"settings\">設定</string>\n  <string name=\"select_app\">アプリを選択</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d個選択済み</string>\n  <string name=\"fab_patch_app\">アプリにパッチを適用</string>\n  <string name=\"fab_add_patches\">パッチを追加</string>\n  <string name=\"new_downloader_notification\">新しいダウンローダーが利用可能です。ここをクリックして設定してください。</string>\n  <string name=\"unsupported_architecture_warning\">このデバイスアーキテクチャでのパッチ適用はサポートされておらず、失敗する可能性が高いです。</string>\n  <string name=\"import_\">インポート</string>\n  <string name=\"import_patches\">パッチをインポート</string>\n  <string name=\"file_field_set\">選択済み</string>\n  <string name=\"file_field_not_set\">未選択</string>\n  <string name=\"field_not_set\">未設定</string>\n  <string name=\"patches_missing\">不足</string>\n  <string name=\"patches_error\">エラー</string>\n  <string name=\"patches_error_description\">パッチを読み込めませんでした。クリックしてエラーを表示</string>\n  <string name=\"patches_not_downloaded\">パッチがダウンロードされていません。</string>\n  <string name=\"patches_name_default\">パッチ</string>\n  <string name=\"patches_name_fallback\">名無し</string>\n  <string name=\"android_11_bug_dialog_title\">Android 11 のバグ</string>\n  <string name=\"android_11_bug_dialog_description\">アプリのインストール権限は、Android 11 システムのバグがユーザーエクスペリエンスに悪影響を与えるのを避けるため、事前に付与しておく必要があります。</string>\n  <string name=\"no_network_toast\">インターネット接続がありません</string>\n  <string name=\"selected_app_meta_any_version\">任意の利用可能なバージョン</string>\n  <string name=\"app_source_dialog_title\">ソースを選択</string>\n  <string name=\"app_source_dialog_option_auto\">自動</string>\n  <string name=\"app_source_dialog_option_auto_description\">インストール済みのアプリを使用し、次にダウンロード済みの APK、そして利用可能なダウンローダーを使用</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">互換性のあるアプリまたはダウンローダーが見つかりません</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">マウントされたアプリは、root アクセスなしでは再度パッチを適用できません</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">バージョン %s は推奨バージョンと一致しません</string>\n  <string name=\"patch_item_description\">アプリケーションのパッチ適用を開始</string>\n  <string name=\"patch_selector_item\">パッチを選択</string>\n  <string name=\"patch_selector_item_description\">%d個のパッチが選択されました</string>\n  <string name=\"patch_selection_changed_warning\">パッチの選択が変更されました</string>\n  <string name=\"no_patches_selected\">パッチが選択されていません</string>\n  <string name=\"network_unavailable_warning\">お使いのデバイスはインターネットに接続されていません。後でダウンロードに失敗します。</string>\n  <string name=\"network_metered_warning\">現在、従量制課金接続を使用しています。サービスプロバイダーからのデータ料金が適用される場合があります。</string>\n  <string name=\"apk_source_selector_item\">APKソースを選択</string>\n  <string name=\"apk_source_auto\">自動</string>\n  <string name=\"apk_source_auto_installed\">自動 · インストール済み APK を使用</string>\n  <string name=\"apk_source_auto_downloaded\">自動 · ダウンロード済み APK を使用</string>\n  <string name=\"apk_source_auto_downloader\">自動 · 利用可能なダウンローダーを使用</string>\n  <string name=\"apk_source_auto_storage\">自動 · ストレージから選択</string>\n  <string name=\"apk_source_downloader\">%s を使用中</string>\n  <string name=\"apk_source_installed\">インストール済みの APK を使用中</string>\n  <string name=\"apk_source_local\">ローカルの APK ファイルを使用中</string>\n  <string name=\"apk_source_downloaded\">すでにダウンロード済み</string>\n  <string name=\"legacy_import_failed\">レガシー設定をインポートできませんでした</string>\n  <string name=\"auto_updates_dialog_title\">更新を構成</string>\n  <string name=\"auto_updates_dialog_description\">ReVanced Managerで以下のコンポーネントのアップデートを定期的にチェックしますか？</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced パッチ</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: ダウンローダー</string>\n  <string name=\"auto_updates_dialog_note\">これらの設定は後で変更できます。\n\n    ReVanced Manager は、お使いのデバイスがインターネットに接続されている場合、初期バージョンをダウンロードするために %s に接続します。</string>\n  <string name=\"announcements_filter_tag\">タグでフィルタ</string>\n  <string name=\"announcements_show_archived\">アーカイブ済みを表示</string>\n  <string name=\"general\">その他</string>\n  <string name=\"general_description\">言語、テーマ、ダイナミックカラー</string>\n  <string name=\"updates\">更新</string>\n  <string name=\"updates_description\">アップデートを確認して変更履歴を表示</string>\n  <string name=\"downloads\">ダウンロード</string>\n  <string name=\"downloads_description\">ダウンローダーとダウンロードされたアプリ</string>\n  <string name=\"import_export\">インポート &amp; エクスポート</string>\n  <string name=\"import_export_description\">キーストア、パッチオプション、選択</string>\n  <string name=\"advanced\">高度な設定</string>\n  <string name=\"advanced_description\">API URL、メモリ制限、デバッグ</string>\n  <string name=\"safeguards_toggled_warning\">セーフガードが切り替えられました</string>\n  <string name=\"about\">SponsorBlock について</string>\n  <string name=\"about_app_name\">%1$sについて</string>\n  <string name=\"opensource_licenses\">オープンソースライセンス</string>\n  <string name=\"opensource_licenses_description\">このアプリケーションを作成するために使用されたすべてのライブラリを表示</string>\n  <string name=\"contributors\">貢献者</string>\n  <string name=\"contributors_description\">ReVanced の貢献者を表示</string>\n  <string name=\"dynamic_color\">ダイナミックカラー</string>\n  <string name=\"dynamic_color_description\">壁紙に合わせて色を調整</string>\n  <string name=\"pure_black_theme\">純粋な黒のテーマ</string>\n  <string name=\"pure_black_theme_description\">ダークテーマに純粋な黒の背景を使用する</string>\n  <string name=\"theme\">テーマ</string>\n  <string name=\"theme_description\">ライトテーマまたはダークテーマを選択</string>\n  <string name=\"language\">言語</string>\n  <string name=\"language_description\">アプリの表示言語を選択</string>\n  <string name=\"language_system_default\">システムデフォルト</string>\n  <string name=\"search_languages\">言語を検索…</string>\n  <string name=\"safeguards\">セーフガード</string>\n  <string name=\"patch_compat_check\">バージョン互換性チェックを無効にする</string>\n  <string name=\"patch_compat_check_description\">互換性のあるアプリバージョンにパッチを制限しない</string>\n  <string name=\"patch_compat_check_confirmation\">互換性のないパッチを選択すると、アプリが壊れる可能性があります。\n\nいずれにしても続行しますか？</string>\n  <string name=\"suggested_version_safeguard\">推奨されるアプリのバージョンを要求する</string>\n  <string name=\"suggested_version_safeguard_description\">推奨されるアプリのバージョンの選択を強制する</string>\n  <string name=\"suggested_version_safeguard_confirmation\">推奨バージョンではないアプリを選択すると、予期せぬ問題が発生する可能性があります。\n\nいずれにしても続行しますか？</string>\n  <string name=\"patch_selection_safeguard\">パッチの選択とオプションの変更を許可する</string>\n  <string name=\"patch_selection_safeguard_description\">パッチの選択/選択解除およびオプションのカスタマイズを妨げない</string>\n  <string name=\"patch_selection_safeguard_confirmation\">パッチの選択を変更すると、予期せぬ問題が発生する可能性があります。\n\nいずれにしても有効にしますか？</string>\n  <string name=\"universal_patches_safeguard\">ユニバーサルパッチの使用を許可する</string>\n  <string name=\"universal_patches_safeguard_description\">ユニバーサルパッチの使用を妨げない</string>\n  <string name=\"universal_patches_safeguard_confirmation\">ユニバーサルパッチは、特定のアプリを対象とするパッチほど十分にテストされていません。\n\nいずれにしても有効にしますか？</string>\n  <string name=\"keystore\">キーストア</string>\n  <string name=\"patches_selections\">パッチの選択</string>\n  <string name=\"import_keystore\">キーストアをインポート</string>\n  <string name=\"import_keystore_description\">カスタムキーストアをインポート</string>\n  <string name=\"import_keystore_dialog_title\">キーストアの認証情報を入力</string>\n  <string name=\"import_keystore_dialog_description\">キーストアをインポートするには、その認証情報を入力する必要があります。</string>\n  <string name=\"import_keystore_dialog_alias_field\">ユーザー名 (エイリアス)</string>\n  <string name=\"import_keystore_dialog_password_field\">パスワード</string>\n  <string name=\"import_keystore_dialog_button\">インポート</string>\n  <string name=\"import_keystore_wrong_credentials\">キーストアの認証情報が間違っています</string>\n  <string name=\"import_keystore_success\">キーストアをインポートしました</string>\n  <string name=\"export_keystore\">キーストアをエクスポート</string>\n  <string name=\"export_keystore_description\">現在のキーストアをエクスポート</string>\n  <string name=\"export_keystore_unavailable\">エクスポートするキーストアがありません</string>\n  <string name=\"export_keystore_success\">キーストアをエクスポートしました</string>\n  <string name=\"regenerate_keystore\">キーストアを再生成</string>\n  <string name=\"regenerate_keystore_description\">新しいキーストアを生成</string>\n  <string name=\"regenerate_keystore_dialog_description\">パッチ適用プロセス中にマネージャーが使用するキーストアを再生成しようとしています。\n\n以前にこのソースからインストールされたアプリを更新できなくなります。</string>\n  <string name=\"regenerate_keystore_success\">キーストアは正常に置き換えられました</string>\n  <string name=\"import_patch_selection\">パッチ選択をインポート</string>\n  <string name=\"import_patch_selection_description\">JSON ファイルからパッチ選択をインポート</string>\n  <string name=\"import_patch_selection_fail\">パッチ選択をインポートできませんでした: %s</string>\n  <string name=\"import_patch_selection_success\">パッチ選択をインポートしました</string>\n  <string name=\"select_bundle_for_import\">インポートするバンドルを選択</string>\n  <string name=\"export_patch_selection\">パッチ選択をエクスポート</string>\n  <string name=\"export_patch_selection_description\">JSON ファイルにパッチ選択をエクスポート</string>\n  <string name=\"export_patch_selection_fail\">パッチ選択をエクスポートできませんでした: %s</string>\n  <string name=\"export_patch_selection_success\">パッチ選択をエクスポートしました</string>\n  <string name=\"select_bundle_for_export\">エクスポートするバンドルを選択</string>\n  <string name=\"patch_selection_packages\">選択が保存されたアプリ</string>\n  <string name=\"patch_selection_entries\">選択されたパッチの合計</string>\n  <string name=\"reset_configuration\">設定をリセット</string>\n  <string name=\"reset_patch_selection\">パッチの選択</string>\n  <string name=\"reset_patch_selection_description\">保存されているパッチ選択をリセット</string>\n  <string name=\"reset_patch_options\">パッチオプション</string>\n  <string name=\"reset_patch_options_description\">保存されているパッチオプションをリセット</string>\n  <string name=\"reset_patch_selection_success\">パッチ選択がリセットされました</string>\n  <string name=\"patch_selection_reset_all\">パッチ選択をグローバルにリセット</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">すべてのパッチ選択をリセットしようとしています。各パッチを再度手動で選択する必要があります。</string>\n  <string name=\"patch_selection_reset_all_description\">すべてのパッチ選択をリセットします</string>\n  <string name=\"patch_selection_reset_package\">アプリのパッチ選択をリセット</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">アプリ「%s」のパッチ選択をリセットしようとしています。各パッチを再度手動で選択する必要があります。</string>\n  <string name=\"patch_selection_reset_package_description\">単一のアプリのパッチ選択をリセットします</string>\n  <string name=\"patch_selection_reset_patches\">パッチの選択をリセット (単一)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">%s\\\" のパッチ選択をリセットしようとしています。各パッチを手動で再選択する必要があります。</string>\n  <string name=\"patch_selection_reset_patches_description\">特定のパッチコレクションのパッチ選択をリセットします</string>\n  <string name=\"patch_options_reset_package\">アプリのパッチオプションをリセット</string>\n  <string name=\"patch_options_reset_package_dialog_description\">アプリ「%s」のパッチオプションをリセットしようとしています。各オプションを再度適用する必要があります。</string>\n  <string name=\"patch_options_reset_package_description\">単一アプリのパッチオプションをリセットします</string>\n  <string name=\"patch_options_reset_patches\">パッチオプションをリセット (単一)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">%s\\\" のパッチオプションをリセットしようとしています。各オプションを再度適用する必要があります。</string>\n  <string name=\"patch_options_reset_patches_description\">特定のパッチコレクションのパッチオプションをリセットします</string>\n  <string name=\"patch_options_reset_all\">パッチオプションをグローバルにリセット</string>\n  <string name=\"patch_options_reset_all_dialog_description\">すべてのパッチオプションをリセットしようとしています。各オプションを再度適用する必要があります。</string>\n  <string name=\"patch_options_reset_all_description\">すべてのパッチオプションをリセットします</string>\n  <string name=\"downloaders\">ダウンローダー</string>\n  <string name=\"downloader_prereleases\">プレリリース版を使用</string>\n  <string name=\"downloader_prereleases_description\">メインダウンローダーのプレリリース版を使用する</string>\n  <string name=\"downloader_state_loaded\">ロード済み</string>\n  <string name=\"downloader_state_failed\">読み込みに失敗しました。詳細についてはクリックしてください</string>\n  <string name=\"downloader_state_missing\">見つかりません</string>\n  <string name=\"downloader_delete_apps_title\">選択したアプリを削除</string>\n  <string name=\"downloader_delete_apps_description\">選択したアプリを本当に削除しますか？</string>\n  <string name=\"downloader_delete_single_description\">「%s」を削除してもよろしいですか？</string>\n  <string name=\"downloader_settings_no_apps\">ダウンロードされたアプリは見つかりませんでした。</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Managerを通じてダウンロードされたアプリがここに表示されます。</string>\n  <string name=\"downloader_url\">ダウンローダーURL</string>\n  <string name=\"downloader_add\">ダウンローダーを追加</string>\n  <string name=\"select_downloader_type_dialog_description\">URL またはローカルファイルから新しいダウンローダーを追加</string>\n  <string name=\"local_downloaders_description\">ローカルストレージからダウンローダーを追加します。</string>\n  <string name=\"remote_downloaders_description\">URL からダウンローダーを追加します。自動的に更新できます。</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager内で直接アプリを取得するには、ダウンローダーをインストールしてください。</string>\n  <string name=\"install_revanced_downloader\">ReVancedダウンローダーをインストール</string>\n  <string name=\"cancel_downloader_install_title\">ダウンローダーのインストールをキャンセルしますか？</string>\n  <string name=\"cancel_downloader_install_description\">ダウンローダーのインストールが進行中です。今終了すると、ダウンロードはキャンセルされます。</string>\n  <string name=\"downloader_sources_unavailable_title\">これらのダウンローダーが見つかりません</string>\n  <string name=\"downloader_sources_unavailable_description\">更新ボタンをクリックして修正してください。</string>\n  <string name=\"downloader_update_failed\">ダウンローダーの更新に失敗しました: %s</string>\n  <string name=\"downloader_replace_fail\">ダウンローダーのインポートに失敗しました: %s</string>\n  <string name=\"search_apps\">アプリを検索…</string>\n  <string name=\"loading_body\">読み込み中…</string>\n  <string name=\"downloading_patches\">パッチをダウンロード中…</string>\n  <string name=\"options\">オプション</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">はい</string>\n  <string name=\"no\">いいえ</string>\n  <string name=\"edit\">編集</string>\n  <string name=\"dialog_input_placeholder\">値</string>\n  <string name=\"reset\">リセット</string>\n  <string name=\"share\">共有</string>\n  <string name=\"patch\">パッチ</string>\n  <string name=\"select_from_storage\">ストレージから選択</string>\n  <string name=\"select_from_storage_description\">ファイルピッカーを使用してストレージからAPKファイルを選択</string>\n  <string name=\"suggested_version_info\">推奨バージョン: %s</string>\n  <string name=\"type_anything\">続行するには何か入力してください</string>\n  <string name=\"search\">パッチを検索…</string>\n  <string name=\"apply\">適用</string>\n  <string name=\"help\">ヘルプ</string>\n  <string name=\"back\">戻る</string>\n  <string name=\"warning\">警告</string>\n  <string name=\"add\">追加</string>\n  <string name=\"enable\">有効にする</string>\n  <string name=\"disable\">無効にする</string>\n  <string name=\"close\">閉じる</string>\n  <string name=\"clear\">クリア</string>\n  <string name=\"system\">システム</string>\n  <string name=\"light\">ライト</string>\n  <string name=\"dark\">ダーク</string>\n  <string name=\"appearance\">表示</string>\n  <string name=\"networking\">ネットワーク</string>\n  <string name=\"allow_metered_networks\">従量制ネットワークを許可</string>\n  <string name=\"allow_metered_networks_description\">従量制ネットワークでの自動更新を許可します。\n    手動操作の場合、アプリケーションは従量制ネットワークに関する警告を表示することがあります。</string>\n  <string name=\"downloaded_apps\">ダウンロード済みアプリ</string>\n  <string name=\"process_runtime\">Patcherを別のプロセスで実行 (実験的)</string>\n  <string name=\"process_runtime_description\">これにより処理が高速になり、Patcherがより多くのメモリを使用できるようになります</string>\n  <string name=\"process_runtime_memory_limit\">Patcherプロセス メモリ制限</string>\n  <string name=\"process_runtime_memory_limit_description\">パッチャープロセスが使用できる最大メモリ量</string>\n  <string name=\"debug_logs_export\">デバッグログのエクスポート</string>\n  <string name=\"debug_logs_export_read_failed\">ログの読み取りに失敗しました (終了コード %d)</string>\n  <string name=\"debug_logs_export_failed\">ログのエクスポートに失敗しました</string>\n  <string name=\"debug_logs_export_success\">エクスポートされたログ</string>\n  <string name=\"api_url\">API URL</string>\n  <string name=\"api_url_description\">必要なファイルをダウンロードするために使用されるAPI</string>\n  <string name=\"api_url_dialog_title\">API URL を変更</string>\n  <string name=\"api_url_dialog_description\">ReVanced ManagerのAPI URLを変更します。ReVanced ManagerはAPIを使用してパッチと更新をダウンロードします。</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Managerは、パッチと更新をダウンロードするためにAPIに接続します。信頼できることを確認してください。</string>\n  <string name=\"api_url_dialog_save\">設定</string>\n  <string name=\"api_url_dialog_reset\">API URLをリセット</string>\n  <string name=\"device\">デバイス</string>\n  <string name=\"device_android_version\">Androidバージョン</string>\n  <string name=\"device_model\">モデル</string>\n  <string name=\"device_architectures\">CPUアーキテクチャ</string>\n  <string name=\"device_memory_limit\">メモリ制限</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (標準) - %2$dMB (大)</string>\n  <string name=\"patches_force_download\">すべてのパッチを強制ダウンロード</string>\n  <string name=\"patches_reset\">パッチをリセット</string>\n  <string name=\"reset_onboarding\">オンボーディングをリセット</string>\n  <string name=\"reset_onboarding_description\">次回のアプリ起動時にオンボーディング画面を表示</string>\n  <string name=\"patching\">パッチ適用中</string>\n  <string name=\"signing\">署名中</string>\n  <string name=\"storage\">ストレージ</string>\n  <string name=\"no_patch_found\">パッチが見つかりません。パッチを確認してください</string>\n  <string name=\"tab_apps\">アプリ</string>\n  <string name=\"tab_patches\">パッチ</string>\n  <string name=\"delete\">削除</string>\n  <string name=\"refresh\">更新</string>\n  <string name=\"continue_anyways\">とにかく続行</string>\n  <string name=\"download_another_version\">別のバージョンをダウンロード</string>\n  <string name=\"download_app\">アプリをダウンロード</string>\n  <string name=\"download_apk\">APKファイルをダウンロード</string>\n  <string name=\"patches_download_fail\">パッチのダウンロードに失敗しました: %s</string>\n  <string name=\"api_not_working_title\">APIサービスは現在停止しています</string>\n  <string name=\"api_not_working_description\">一部の機能に影響が出る可能性があります。設定で接続またはAPI URLを確認してください。</string>\n  <string name=\"patches_replace_fail\">パッチのインポートに失敗しました: %s</string>\n  <string name=\"no_patched_apps_found\">パッチ適用済みアプリが見つかりません</string>\n  <string name=\"no_patched_apps_description\">現在、パッチ適用済みアプリはありません。最初のアプリにパッチを適用して変更しましょう！</string>\n  <string name=\"patched_apps_section_title\">パッチ適用済みアプリ</string>\n  <string name=\"patchable_apps_section_title\">パッチを適用できるアプリ</string>\n  <string name=\"no_patches_found\">パッチが見つかりません</string>\n  <string name=\"no_patches_description\">まだパッチがありません。下のボタンをタップしてパッチを追加してください！</string>\n  <string name=\"tap_on_patches\">パッチをタップして詳細情報を取得</string>\n  <string name=\"patches_selected\">%s を選択済み</string>\n  <string name=\"incompatible_patches\">互換性のないパッチ</string>\n  <string name=\"universal_patches\">ユニバーサルパッチ</string>\n  <string name=\"patch_selection_reset_toast\">パッチの選択とオプションが推奨されるデフォルトにリセットされました</string>\n  <string name=\"patch_options_reset_toast\">パッチオプションがリセットされました</string>\n  <string name=\"non_suggested_version_warning_title\">推奨されていないバージョン</string>\n  <string name=\"non_suggested_version_warning_description\">選択したアプリのバージョンは推奨バージョンと一致しません。\n推奨バージョンを使用してください: %s\n\nとにかく続行するには、詳細設定で「推奨アプリバージョンを必須」を無効にしてください。</string>\n  <string name=\"selection_warning_title\">デフォルトの使用を停止しますか？</string>\n  <string name=\"selection_warning_description\">デフォルトのパッチ選択とオプションを使用することをお勧めします。それらを変更すると、予期しない問題が発生する可能性があります。\n\nパッチを切り替える前に、詳細設定で「パッチの選択とオプションの変更を許可」を有効にする必要があります。</string>\n  <string name=\"universal_patch_warning_description\">ユニバーサルパッチはより汎用的な用途があり、特定のアプリを対象とするパッチほど信頼性高く機能しません。使用中に問題が発生する可能性があります。\n\nユニバーサルパッチを使用する前に、詳細設定で「ユニバーサルパッチの使用を許可」を有効にする必要があります。</string>\n  <string name=\"this_version\">このバージョン</string>\n  <string name=\"universal\">任意のアプリ</string>\n  <string name=\"search_patches\">パッチを検索</string>\n  <string name=\"app_version_not_compatible\">このパッチは選択したアプリバージョン (%1$s) と互換性がありません\n\n以下のバージョンのみと互換性があります: %2$s</string>\n  <string name=\"continue_with_version\">このバージョンで続行しますか？</string>\n  <string name=\"version_not_compatible\">すべてのパッチがこのバージョン (%s) と互換性があるわけではありません。とにかく続行しますか？</string>\n  <string name=\"download_application\">アプリケーションをダウンロードしますか？</string>\n  <string name=\"app_not_installed\">選択したアプリはインストールされていません。ダウンロードしますか？</string>\n  <string name=\"failed_to_load_apk\">APKの読み込みに失敗しました</string>\n  <string name=\"split_apk_not_supported\">分割 APK にはパッチを適用できません</string>\n  <string name=\"loading\">読み込み中…</string>\n  <string name=\"not_installed\">インストールされていません</string>\n  <string name=\"installed\">インストール済み</string>\n  <string name=\"app_info\">アプリ情報</string>\n  <string name=\"uninstall\">アンインストール</string>\n  <string name=\"unpatch\">パッチ解除</string>\n  <string name=\"repatch\">再パッチ</string>\n  <string name=\"install_type\">インストールタイプ</string>\n  <string name=\"package_name\">パッケージ名</string>\n  <string name=\"original_package_name\">元のパッケージ名</string>\n  <string name=\"applied_patches\">適用されたパッチ</string>\n  <string name=\"view_applied_patches\">適用されたパッチを表示</string>\n  <string name=\"default_install\">デフォルト</string>\n  <string name=\"mount_install\">マウント</string>\n  <string name=\"mounted\">マウント済み</string>\n  <string name=\"not_mounted\">マウントされていません</string>\n  <string name=\"mount\">マウント</string>\n  <string name=\"unmount\">アンマウント</string>\n  <string name=\"failed_to_mount\">マウントに失敗しました: %s</string>\n  <string name=\"failed_to_unmount\">アンマウントに失敗しました: %s</string>\n  <string name=\"unpatch_app\">アプリのパッチを解除しますか？</string>\n  <string name=\"unpatch_description\">このアプリのパッチを本当に解除しますか？</string>\n  <string name=\"downloader_invalid_version\">ダウンローダーが正しいバージョンを取得しませんでした</string>\n  <string name=\"downloader_app_not_found\">ダウンローダーがアプリを見つけられませんでした</string>\n  <string name=\"downloader_error\">ダウンローダーエラー: %s</string>\n  <string name=\"no_downloaders_installed\">アプリダウンローダーがインストールされていません！</string>\n  <string name=\"no_downloaders_trusted\">アプリダウンローダーが信頼されていません！設定を確認してください。</string>\n  <string name=\"already_patched\">すでにパッチ適用済み</string>\n  <string name=\"patch_selector_sheet_filter_title\">フィルタ</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">互換性</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">パッケージ</string>\n  <string name=\"patch_selector_sheet_actions_title\">アクション</string>\n  <string name=\"restore_default_selection\">デフォルトの選択に戻す</string>\n  <string name=\"deselect_all\">すべての選択を解除</string>\n  <string name=\"invert_selection\">選択を反転</string>\n  <string name=\"deselect_all_except\">%s を除くすべてを非選択</string>\n  <string name=\"scope_dialog_title\">適用対象</string>\n  <string name=\"scope_all_patches\">すべてのパッチ</string>\n  <string name=\"scope_bundle_patches\">%s のみ</string>\n  <string name=\"string_option_menu_description\">その他のオプション</string>\n  <string name=\"option_preset_custom_value\">カスタム値</string>\n  <string name=\"path_selector\">ストレージから選択</string>\n  <string name=\"path_selector_parent_dir\">親ディレクトリ</string>\n  <string name=\"path_selector_dirs\">ディレクトリ</string>\n  <string name=\"path_selector_files\">ファイル</string>\n  <string name=\"show_password_field\">パスワードを表示</string>\n  <string name=\"hide_password_field\">パスワードを非表示</string>\n  <string name=\"installer\">インストーラー</string>\n  <string name=\"install_app\">インストール</string>\n  <string name=\"install_app_success\">アプリをインストールしました</string>\n  <string name=\"install_app_fail\">アプリのインストールに失敗しました: %s</string>\n  <string name=\"reinstall_app_fail\">アプリの再インストールに失敗しました: %s</string>\n  <string name=\"uninstall_app_fail\">アプリのアンインストールに失敗しました: %s</string>\n  <string name=\"open_app\">開く</string>\n  <string name=\"save_apk\">APKを保存</string>\n  <string name=\"save_apk_success\">APKを保存しました</string>\n  <string name=\"sign_fail\">APKの署名に失敗しました: %s</string>\n  <string name=\"save_logs\">ログを保存</string>\n  <string name=\"save_as_file\">ファイルに保存</string>\n  <string name=\"export_patcher_logs\">パッチャーログをエクスポート</string>\n  <string name=\"save_logs_success\">ログを保存しました</string>\n  <string name=\"downloader_activity_dialog_body\">このダウンローダーを続行するには、ユーザーの操作が必要です。</string>\n  <string name=\"select_install_type\">インストールタイプを選択</string>\n  <string name=\"patcher_step_group_preparing\">準備中</string>\n  <string name=\"patcher_step_load_patches\">パッチを読み込み</string>\n  <string name=\"patcher_step_unpack\">パッチャーを準備</string>\n  <string name=\"patcher_step_group_patching\">パッチ適用中</string>\n  <string name=\"patcher_step_group_saving\">保存中</string>\n  <string name=\"patcher_step_write_patched\">パッチ適用済みAPKファイルを書き込み</string>\n  <string name=\"patcher_step_sign_apk\">パッチ適用済みAPKファイルに署名</string>\n  <string name=\"patcher_notification_title\">パッチ適用中…</string>\n  <string name=\"patcher_notification_text\">タップしてパッチャーに戻る</string>\n  <string name=\"patcher_stop_confirm_title\">パッチャーを停止</string>\n  <string name=\"patcher_stop_confirm_description\">パッチ適用プロセスを本当に停止しますか？</string>\n  <string name=\"patcher_install_in_progress\">インストール中です。しばらくお待ちください</string>\n  <string name=\"execute_patches\">パッチを実行</string>\n  <string name=\"executing_patch\">%sを実行</string>\n  <string name=\"failed_to_execute_patch\">%sの実行に失敗しました</string>\n  <string name=\"step_completed\">完了</string>\n  <string name=\"step_failed\">失敗</string>\n  <string name=\"step_running\">実行中</string>\n  <string name=\"step_waiting\">待機中</string>\n  <string name=\"expand_content\">展開</string>\n  <string name=\"collapse_content\">折りたたむ</string>\n  <string name=\"drag_handle\">並べ替え</string>\n  <string name=\"more\">その他</string>\n  <string name=\"less\">減らす</string>\n  <string name=\"continue_\">続行</string>\n  <string name=\"dismiss\">閉じる</string>\n  <string name=\"view_announcement\">お知らせを表示</string>\n  <string name=\"permanent_dismiss\">今後表示しない</string>\n  <string name=\"donate\">寄付</string>\n  <string name=\"website\">ウェブサイト</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">お問い合わせ</string>\n  <string name=\"license\">ライセンス</string>\n  <string name=\"source\">ソース</string>\n  <string name=\"repository\">リポジトリ</string>\n  <string name=\"bundle_information_by_author\">%1$sによる</string>\n  <string name=\"version\">バージョン</string>\n  <string name=\"version_compatibility_warning\">選択されたバージョンは、選択されたパッチと互換性がない可能性があります</string>\n  <string name=\"submit_feedback\">問題またはフィードバックを送信</string>\n  <string name=\"submit_feedback_description\">このアプリケーションの改善にご協力ください</string>\n  <string name=\"developer_options\">開発者向けオプション</string>\n  <string name=\"developer_options_description\">問題をデバッグするためのオプション</string>\n  <string name=\"patches_update_success\">更新に成功しました</string>\n  <string name=\"patches_update_unavailable\">更新はありません</string>\n  <string name=\"view_patches\">パッチを表示</string>\n  <string name=\"patches_view_any_version\">任意のバージョン</string>\n  <string name=\"patches_view_any_package\">任意のパッケージ</string>\n  <string name=\"patches_delete_single_dialog_description\">「%s」を削除してもよろしいですか？</string>\n  <string name=\"patches_delete_multiple_dialog_description\">選択したパッチを本当に削除しますか？</string>\n  <string name=\"announcements\">お知らせ</string>\n  <string name=\"archive\">アーカイブ</string>\n  <string name=\"about_revanced_manager\">ReVanced Manager について</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager は、ReVanced Patcher を使用して Android アプリにパッチを適用する Android アプリケーションです。カスタムパッチを使用してアプリをダウンロードおよびパッチ適用し、パッチ適用プロセスを管理できます。</string>\n  <string name=\"developer_options_taps\">残り%dタップ</string>\n  <string name=\"developer_options_enabled\">開発者向けオプションが有効になりました</string>\n  <string name=\"developer_options_already_enabled\">開発者向けオプションはすでに有効です</string>\n  <string name=\"update_available\">更新が利用可能です</string>\n  <string name=\"current_version\">現在のバージョン: %s</string>\n  <string name=\"new_version\">新しいバージョン: %s</string>\n  <string name=\"ready_to_install_update\">更新をインストールする準備ができました</string>\n  <string name=\"update_completed\">更新をインストールしました</string>\n  <string name=\"install_update_manager_failed\">更新のインストールに失敗しました</string>\n  <string name=\"manual_update_check\">更新を確認</string>\n  <string name=\"view_update\">アップデートを表示</string>\n  <string name=\"manual_update_check_description\">手動で更新を確認</string>\n  <string name=\"update_checking_manager\">起動時に更新を確認</string>\n  <string name=\"update_checking_manager_description\">アプリケーション起動時に ReVanced Manager の新しいバージョンを確認する</string>\n  <string name=\"update_checking_downloader\">起動時にReVancedダウンローダーのアップデートを確認</string>\n  <string name=\"update_checking_downloader_description\">アプリケーション起動時にインストール済みのReVancedダウンローダーのアップデートを確認</string>\n  <string name=\"manager_prereleases\">プレリリースを使用する</string>\n  <string name=\"manager_prereleases_description\">ReVanced Manager のプレリリースバージョンを使用する</string>\n  <string name=\"prereleases_warning\">プレリリース版は不安定でバグが含まれている可能性があります。クラッシュ、データ損失、その他の予期せぬ問題が発生する可能性があります。これらのリスクを理解している場合にのみ有効にしてください。</string>\n  <string name=\"changelog\">変更履歴を表示</string>\n  <string name=\"changelog_loading\">変更履歴を読み込み中</string>\n  <string name=\"changelog_download_fail\">変更履歴のダウンロードに失敗しました: %s</string>\n  <string name=\"changelog_description\">このアップデートの最新の変更点を確認する</string>\n  <string name=\"battery_optimization_notification\">ReVanced Manager がバックグラウンドで正しく動作するためには、バッテリー最適化をオフにする必要があります。最適化をオフにするには、ここをクリックしてください。</string>\n  <string name=\"installing_manager_update\">更新をインストール中…</string>\n  <string name=\"downloading_manager_update\">更新データをダウンロードしています…</string>\n  <string name=\"download_manager_failed\">更新のダウンロードに失敗しました: %s</string>\n  <string name=\"cancel\">キャンセル</string>\n  <string name=\"save\">保存</string>\n  <string name=\"save_with_count\">保存 (%1$s)</string>\n  <string name=\"update\">更新</string>\n  <string name=\"empty\">空</string>\n  <string name=\"installing_message\">プロンプトが表示されたら<b>更新</b>をタップしてください。\n更新時に ReVanced Manager は閉じられます。</string>\n  <string name=\"no_changelogs_found\">変更履歴が見つかりませんでした</string>\n  <string name=\"just_now\">たった今</string>\n  <string name=\"minutes_ago\">%s分前</string>\n  <string name=\"hours_ago\">%s時間前</string>\n  <string name=\"days_ago\">%s日前</string>\n  <string name=\"invalid_date\">無効な日付</string>\n  <string name=\"disable_battery_optimization\">バッテリー最適化を無効にする</string>\n  <string name=\"input_dialog_value_invalid\">無効な値</string>\n  <string name=\"option_required\">このオプションは必須です</string>\n  <string name=\"required_options_screen\">必須オプション</string>\n  <string name=\"failed_to_check_updates\">更新の確認に失敗しました: %s</string>\n  <string name=\"no_update_available\">更新はありません</string>\n  <string name=\"no_announcements_found\">お知らせが見つかりません</string>\n  <string name=\"update_check\">更新を確認中…</string>\n  <string name=\"dismiss_temporary\">後で</string>\n  <string name=\"update_available_dialog_description\">ReVanced Manager の新しいバージョン (%s) が利用可能です。</string>\n  <string name=\"failed_to_download_update\">更新のダウンロードに失敗しました: %s</string>\n  <string name=\"download\">ダウンロード</string>\n  <string name=\"download_confirmation_metered\">現在、従量制課金接続を使用しており、サービスプロバイダからのデータ料金が発生する可能性があります。\n\n続行しますか？</string>\n  <string name=\"download_update_confirmation\">更新をダウンロードしますか？</string>\n  <string name=\"no_contributors_found\">貢献者が見つかりませんでした</string>\n  <string name=\"select\">選択</string>\n  <string name=\"select_deselect_all\">すべて選択または選択解除</string>\n  <string name=\"select_patches_type_dialog_description\">URLまたはローカルファイルから新しいパッチを追加</string>\n  <string name=\"local_patches_description\">ローカルストレージからパッチを追加します。</string>\n  <string name=\"remote_patches_description\">URLからパッチを追加します。パッチは自動的に更新できます。</string>\n  <string name=\"recommended\">推奨</string>\n  <string name=\"installation_failed_dialog_title\">インストールに失敗しました</string>\n  <string name=\"installation_cancelled_dialog_title\">インストールがキャンセルされました</string>\n  <string name=\"installation_blocked_dialog_title\">インストールがブロックされました</string>\n  <string name=\"installation_conflict_dialog_title\">インストールの競合</string>\n  <string name=\"installation_incompatible_dialog_title\">インストールが互換性がありません</string>\n  <string name=\"installation_invalid_dialog_title\">インストールが無効です</string>\n  <string name=\"installation_storage_issue_dialog_title\">ストレージ不足</string>\n  <string name=\"installation_timeout_dialog_title\">インストールがタイムアウトしました</string>\n  <string name=\"installation_failed_description\">不明な理由によりインストールに失敗しました。再試行しますか？</string>\n  <string name=\"installation_aborted_description\">インストールは手動でキャンセルされました。再試行しますか？</string>\n  <string name=\"installation_blocked_description\">インストールはブロックされました。デバイスのセキュリティ設定を確認し、再試行してください。</string>\n  <string name=\"installation_conflict_description\">アプリの既存のインストールにより、インストールが妨げられました。インストール済みのアプリをアンインストールして再試行しますか？</string>\n  <string name=\"installation_incompatible_description\">アプリはこのデバイスと互換性がありません。このデバイスと互換性のあるAPKを使用して、再試行してください。</string>\n  <string name=\"installation_invalid_description\">アプリが無効です。アプリをアンインストールして再試行しますか？</string>\n  <string name=\"installation_storage_issue_description\">ストレージ不足のためアプリをインストールできませんでした。空き容量を増やして再試行してください。</string>\n  <string name=\"installation_timeout_description\">インストールに時間がかかりすぎました。再試行しますか？</string>\n  <string name=\"reinstall\">再インストール</string>\n  <string name=\"show\">表示</string>\n  <string name=\"debugging\">デバッグ</string>\n  <string name=\"about_device\">デバイスについて</string>\n  <string name=\"enter_url\">URLを入力</string>\n  <string name=\"next\">次へ</string>\n  <string name=\"auto_update\">自動更新</string>\n  <string name=\"add_patches\">パッチを追加</string>\n  <string name=\"auto_update_description\">新しいバージョンが利用可能になったときに自動的に更新する</string>\n  <string name=\"patches_prereleases\">プレリリースを使用する</string>\n  <string name=\"patches_prereleases_description\">%sのプレリリースバージョンを使用する</string>\n  <string name=\"patches_url\">パッチURL</string>\n  <string name=\"incompatible_patches_dialog\">これらのパッチは、選択したアプリのバージョン (%1$s) と互換性がありません。\n\n詳細を表示するには、パッチをクリックしてください。</string>\n  <string name=\"incompatible_patch\">互換性のないパッチ</string>\n  <string name=\"any_version\">任意</string>\n  <string name=\"never_show_again\">今後表示しない</string>\n  <string name=\"show_manager_update_dialog_on_launch\">起動時に更新メッセージを表示</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">起動時に新しい更新が利用可能になった場合にポップアップ通知を表示する</string>\n  <string name=\"failed_to_import_keystore\">キーストアのインポートに失敗しました</string>\n  <string name=\"export\">エクスポート</string>\n  <string name=\"confirm\">確認</string>\n  <string name=\"new_announcement\">新しいお知らせ:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"other\">%d 個のパッチ</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"other\">%d 個のパッチを実行</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"other\">%d件選択済み</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ka-rGE/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">პატჩერი</string>\n  <string name=\"onboarding_welcome_to\">კეთილი იყოს თქვენი მობრძანება</string>\n  <string name=\"onboarding_welcome_back\">გამარჯობა! ეს არის ახალი</string>\n  <string name=\"onboarding_apps_subtitle\">შეგიძლიათ აირჩიოთ აპლიკაცია დასაპატჩად ახლავე ან მოგვიანებით</string>\n  <string name=\"onboarding_apps_network_error\">ვერ ჩაიტვირთა პატჩები, რადგან ქსელი მიუწვდომელია ან არასტაბილურია. დაუკავშირდით სტაბილურ ქსელს და სცადეთ ხელახლა.</string>\n  <string name=\"onboarding_updates_subtitle\">დააკონფიგურირეთ ავტომატური განახლებები, რათა ReVanced Manager და პატჩები იყოს განახლებული</string>\n  <string name=\"banner_sources_not_downloaded_description\">პატჩები და გადმომწერები ვერ ჩაიტვირთა ინსტალაციის დროს. შეეხეთ განახლებას მათ ჩამოსატვირთად.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager დაუკავშირდება %s-ს საწყისი ვერსიების ჩამოსატვირთად, თუ თქვენი მოწყობილობა დაკავშირებულია ინტერნეტთან.</string>\n  <string name=\"retry\">ხელახლა ცდა</string>\n  <string name=\"onboarding_skip\">ამ ეტაპზე გამოტოვება</string>\n  <string name=\"onboarding_recommended_version\">რეკომენდებული ვერსია: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">ნებართვების გამოტოვება?</string>\n  <string name=\"onboarding_permissions_skip_description\">საჭირო ნებართვების გარეშე, ზოგიერთმა ფუნქციამ შესაძლოა სწორად არ იმუშაოს. მათი მინიჭება შეგიძლიათ მოგვიანებით, აპის პარამეტრებში.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">მაინც გამოტოვება</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager-ს სწორად მუშაობისთვის რამდენიმე ნებართვა სჭირდება</string>\n  <string name=\"permission_install_apps\">უცნობი აპების ინსტალაცია</string>\n  <string name=\"permission_install_apps_description\">საჭიროა დაპაჩული აპლიკაციების ინსტალაციისთვის</string>\n  <string name=\"permission_notifications\">შეტყობინებები</string>\n  <string name=\"permission_notifications_description\">უშვებს უწყვეტ პატჩინგს ფონურ რეჟიმში</string>\n  <string name=\"permission_battery\">ბატარეის ოპტიმიზაცია</string>\n  <string name=\"permission_battery_description\">ხელს უშლის დაპაჩვის შეწყვეტას ფონურ რეჟიმში</string>\n  <string name=\"permission_grant\">მინიჭება</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager ჩამომტვირთავის ჰოსტი</string>\n  <string name=\"downloader_host_permission_description\">გამოიყენება ReVanced Manager-ის ჩამომტვირთავებზე წვდომის გასაკონტროლებლად. ეს მხოლოდ ReVanced Manager-ს აქვს.</string>\n  <string name=\"fab_patch_app\">აპის დაპაჩვა</string>\n  <string name=\"fab_add_patches\">პაჩების დამატება</string>\n  <string name=\"new_downloader_notification\">ახალი გადმომწერი(ები) ხელმისაწვდომია. კონფიგურაციისთვის დააჭირეთ აქ.</string>\n  <string name=\"patches_not_downloaded\">პატჩები არ გადმოწერილა.</string>\n  <string name=\"app_source_dialog_option_auto_description\">გამოიყენეთ დაინსტალირებული აპლიკაცია, შემდეგ ჩამოტვირთული APK, შემდეგ ხელმისაწვდომი ჩამომტვირთველები</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">არ მოიძებნა თავსებადი აპლიკაცია ან ჩამომტვირთავი</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">დამონტაჟებული აპლიკაციების ხელახლა განახლება root წვდომის გარეშე შეუძლებელია</string>\n  <string name=\"patch_selector_item\">პაჩების არჩევა</string>\n  <string name=\"patch_selector_item_description\">%d პაჩი არჩეულია</string>\n  <string name=\"patch_selection_changed_warning\">პატჩების შერჩევა შეიცვალა</string>\n  <string name=\"apk_source_selector_item\">აირჩიეთ APK წყარო</string>\n  <string name=\"apk_source_auto\">ავტომატური</string>\n  <string name=\"apk_source_auto_installed\">ავტომატური · დაინსტალირებული APK-ის გამოყენება</string>\n  <string name=\"apk_source_auto_downloaded\">ავტომატური · ჩამოტვირთული APK-ის გამოყენება</string>\n  <string name=\"apk_source_auto_downloader\">ავტომატური · ხელმისაწვდომი ჩამომტვირთავების გამოყენებით</string>\n  <string name=\"apk_source_auto_storage\">ავტომატური · შენახვის ადგილიდან არჩევა</string>\n  <string name=\"apk_source_downloaded\">უკვე გადმოწერილია</string>\n  <string name=\"auto_updates_dialog_description\">გსურთ, რომ ReVanced Manager-მა პერიოდულად შეამოწმოს განახლებები შემდეგი კომპონენტებისთვის?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced პაჩები</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: ჩამომტვირთავები</string>\n  <string name=\"auto_updates_dialog_note\">ამ პარამეტრების შეცვლა შესაძლებელია მოგვიანებით.\n\n    ReVanced Manager დაუკავშირდება %s-ს საწყისი ვერსიების ჩამოსატვირთად, თუ თქვენი მოწყობილობა დაკავშირებულია ინტერნეტთან.</string>\n  <string name=\"announcements_filter_tag\">ფილტრი ტეგის მიხედვით</string>\n  <string name=\"announcements_show_archived\">დაარქივებულის ჩვენება</string>\n  <string name=\"updates_description\">განახლებების შემოწმება და ცვლილებების ჟურნალის ნახვა</string>\n  <string name=\"downloads_description\">გადმომწერები და გადმოწერილი აპები</string>\n  <string name=\"safeguards_toggled_warning\">დაცვები გადაირთო</string>\n  <string name=\"about_app_name\">%1$s-ის შესახებ</string>\n  <string name=\"search_languages\">ენების ძიება…</string>\n  <string name=\"keystore\">ქისტორი</string>\n  <string name=\"patches_selections\">პაჩების არჩევანი</string>\n  <string name=\"select_bundle_for_import\">აირჩიეთ ასატვირთი ნაკრები</string>\n  <string name=\"select_bundle_for_export\">აირჩიეთ ექსპორტისთვის განკუთვნილი ნაკრები</string>\n  <string name=\"patch_selection_packages\">აპები შენახული არჩევანით</string>\n  <string name=\"patch_selection_entries\">სულ არჩეული პაჩები</string>\n  <string name=\"reset_configuration\">კონფიგურაციის გადატვირთვა</string>\n  <string name=\"reset_patch_selection\">პაჩების არჩევანი</string>\n  <string name=\"reset_patch_options\">პაჩის პარამეტრები</string>\n  <string name=\"downloaders\">გადმომწერები</string>\n  <string name=\"downloader_prereleases\">გამოიყენეთ წინასწარი ვერსიები</string>\n  <string name=\"downloader_prereleases_description\">გამოიყენეთ ძირითადი ჩამომტვირთავის წინასწარი ვერსიები</string>\n  <string name=\"downloader_state_loaded\">ჩატვირთულია</string>\n  <string name=\"downloader_state_failed\">ჩატვირთვა ვერ მოხერხდა. დაწვრილებითი ინფორმაციისთვის დააჭირეთ</string>\n  <string name=\"downloader_state_missing\">არ არის</string>\n  <string name=\"downloader_delete_apps_title\">არჩეული აპების წაშლა</string>\n  <string name=\"downloader_delete_apps_description\">ნამდვილად გსურთ არჩეული აპების წაშლა?</string>\n  <string name=\"downloader_delete_single_description\">დარწმუნებული ხართ, რომ გსურთ „%s“-ის წაშლა?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager-ის მეშვეობით გადმოწერილი აპები გამოჩნდება აქ.</string>\n  <string name=\"downloader_url\">დამტვირთველის URL</string>\n  <string name=\"downloader_add\">დამტვირთველის დამატება</string>\n  <string name=\"select_downloader_type_dialog_description\">ახალი დამტვირთველების დამატება URL-დან ან ლოკალური ფაილებიდან</string>\n  <string name=\"local_downloaders_description\">დამტვირთველების დამატება ლოკალური მეხსიერებიდან.</string>\n  <string name=\"remote_downloaders_description\">დამტვირთველების დამატება URL-დან. შესაძლებელია ავტომატურად განახლება.</string>\n  <string name=\"install_revanced_downloaders\">დააინსტალირეთ გადმომწერები, რათა მიიღოთ აპები უშუალოდ ReVanced Manager-ის შიგნიდან.</string>\n  <string name=\"install_revanced_downloader\">ReVanced გადმომწერების ინსტალაცია</string>\n  <string name=\"cancel_downloader_install_title\">გადმომწერების ინსტალაციის გაუქმება?</string>\n  <string name=\"cancel_downloader_install_description\">გადმომწერების ინსტალაცია მიმდინარეობს. თუ ახლა დატოვებთ, ჩამოტვირთვა გაუქმდება.</string>\n  <string name=\"downloader_sources_unavailable_title\">ეს დამტვირთველები არ არის</string>\n  <string name=\"downloader_sources_unavailable_description\">მის გამოსასწორებლად დააჭირეთ განახლების ღილაკს.</string>\n  <string name=\"downloader_update_failed\">დამტვირთველის განახლება ვერ მოხერხდა: %s</string>\n  <string name=\"downloader_replace_fail\">დამტვირთველის იმპორტი ვერ მოხერხდა: %s</string>\n  <string name=\"select_from_storage_description\">აირჩიეთ APK ფაილი საცავიდან ფაილის ამომრჩევის გამოყენებით</string>\n  <string name=\"enable\">ჩართვა</string>\n  <string name=\"disable\">გამორთვა</string>\n  <string name=\"process_runtime_memory_limit_description\">მეხსიერების მაქსიმალური რაოდენობა, რომლის გამოყენებაც Patcher პროცესს შეუძლია</string>\n  <string name=\"reset_onboarding\">ონბორდინგის გადატვირთვა</string>\n  <string name=\"reset_onboarding_description\">აჩვენეთ ონბორდინგის ეკრანი აპის შემდეგ გაშვებაზე</string>\n  <string name=\"api_not_working_title\">API სერვისი ამჟამად მიუწვდომელია</string>\n  <string name=\"api_not_working_description\">ზოგიერთი ფუნქცია შეიძლება დაზარალდეს. შეამოწმეთ თქვენი კავშირი ან API URL პარამეტრებში.</string>\n  <string name=\"no_patched_apps_found\">არ მოიძებნა დაპაჩული აპები</string>\n  <string name=\"no_patched_apps_description\">ამჟამად არ გაქვთ დაპაჩული აპები, რომელთა შესახებ ვიცით. შეცვალეთ ეს თქვენი პირველი აპის დაპაჩვით!</string>\n  <string name=\"patched_apps_section_title\">პაჩირებული აპლიკაციები</string>\n  <string name=\"patchable_apps_section_title\">აპლიკაციები, რომელთა პაჩირებაც შესაძლებელია</string>\n  <string name=\"no_patches_found\">არ მოიძებნა პაჩები</string>\n  <string name=\"no_patches_description\">თქვენ ჯერ არ გაქვთ პაჩები. დაამატეთ პაჩები ქვემოთ ღილაკზე შეხებით!</string>\n  <string name=\"split_apk_not_supported\">გაყოფილ APK-ებზე პატჩის დადება შეუძლებელია</string>\n  <string name=\"no_downloaders_installed\">არცერთი აპის გადმომწერი არ არის დაინსტალირებული!</string>\n  <string name=\"no_downloaders_trusted\">არცერთი აპის გადმომწერი არ არის სანდოდ მიჩნეული! გთხოვთ, შეამოწმეთ თქვენი პარამეტრები.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">პაკეტები</string>\n  <string name=\"patch_selector_sheet_actions_title\">მოქმედებები</string>\n  <string name=\"restore_default_selection\">ნაგულისხმევი არჩევანის აღდგენა</string>\n  <string name=\"deselect_all\">ყველას მონიშვნის მოხსნა</string>\n  <string name=\"invert_selection\">არჩევანის ინვერსია</string>\n  <string name=\"deselect_all_except\">ყველას მოხსნა გარდა %s-ისა</string>\n  <string name=\"scope_dialog_title\">გამოყენება</string>\n  <string name=\"scope_all_patches\">ყველა პატჩზე</string>\n  <string name=\"scope_bundle_patches\">მხოლოდ %s</string>\n  <string name=\"save_as_file\">ფაილებში შენახვა</string>\n  <string name=\"export_patcher_logs\">პაჩერის ჟურნალების ექსპორტი</string>\n  <string name=\"save_logs_success\">ჟურნალები შენახულია</string>\n  <string name=\"downloader_activity_dialog_body\">მომხმარებლის ინტერაქციაა საჭირო ამ გადმომწერით გასაგრძელებლად.</string>\n  <string name=\"patcher_step_unpack\">პატჩის მომზადება</string>\n  <string name=\"view_announcement\">განცხადების ნახვა</string>\n  <string name=\"license\">ლიცენზია</string>\n  <string name=\"source\">წყარო</string>\n  <string name=\"repository\">რეპოზიტორი</string>\n  <string name=\"bundle_information_by_author\">%1$s-ის მიერ</string>\n  <string name=\"version_compatibility_warning\">არჩეული ვერსია შეიძლება შეუთავსებელი იყოს არჩეულ პატჩებთან</string>\n  <string name=\"announcements\">განცხადებები</string>\n  <string name=\"archive\">არქივი</string>\n  <string name=\"view_update\">განახლების ნახვა</string>\n  <string name=\"update_checking_downloader\">გაშვებისას ReVanced გადმომწერების განახლებების შემოწმება</string>\n  <string name=\"update_checking_downloader_description\">დაინსტალირებული ReVanced გადმომწერების განახლებების შემოწმება აპლიკაციის გაშვებისას</string>\n  <string name=\"prereleases_warning\">წინასწარი გამოშვების ვერსიები შეიძლება იყოს არასტაბილური და შეიცავდეს შეცდომებს. შესაძლოა შეგხვდეთ ავარიები, მონაცემთა დაკარგვა ან სხვა მოულოდნელი პრობლემები. ჩართეთ ეს მხოლოდ იმ შემთხვევაში, თუ მზად ხართ ამ რისკებისთვის.</string>\n  <string name=\"changelog\">ცვლილებების ჟურნალის ნახვა</string>\n  <string name=\"no_announcements_found\">განცხადებები არ მოიძებნა</string>\n  <string name=\"new_announcement\">ახალი განცხადება:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d პატჩი</item>\n    <item quantity=\"other\">%d პატჩი</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">შეასრულეთ %d პატჩი</item>\n    <item quantity=\"other\">შეასრულეთ %d პატჩი</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d არჩეული</item>\n    <item quantity=\"other\">%d არჩეული</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-kk-rKZ/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">Жамаушы</string>\n  <string name=\"onboarding_welcome_to\">Қош келдіңіз</string>\n  <string name=\"onboarding_welcome_back\">Сәлем! Бұл жаңа</string>\n  <string name=\"onboarding_apps_subtitle\">Қазір патч жасау үшін қолданбаны таңдай аласыз немесе кейінірек жасай аласыз</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager және патчтарды жаңартып отыру үшін автоматты жаңартуларды реттеңіз</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager құрылғыңыз интернетке қосылған болса, бастапқы нұсқаларды жүктеп алу үшін %s-ке қосылады.</string>\n  <string name=\"retry\">Қайталау</string>\n  <string name=\"onboarding_skip\">Әзірге өткізіп жіберу</string>\n  <string name=\"onboarding_recommended_version\">Ұсынылатын нұсқа: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Рұқсаттарды өткізіп жіберу керек пе?</string>\n  <string name=\"onboarding_permissions_skip_description\">Қажетті рұқсаттарсыз кейбір функциялар дұрыс жұмыс істемеуі мүмкін. Оларды кейінірек қолданба параметрлерінде беруге болады.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Бәрібір өткізіп жіберу</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager дұрыс жұмыс істеуі үшін бірнеше рұқсат қажет</string>\n  <string name=\"permission_install_apps\">Белгісіз қолданбаларды орнату</string>\n  <string name=\"permission_install_apps_description\">Патчталған қолданбаларды орнату үшін қажет</string>\n  <string name=\"permission_notifications\">Хабарландырулар</string>\n  <string name=\"permission_battery\">Батареяны оңтайландыру</string>\n  <string name=\"permission_battery_description\">Патчтаудың фондық режимде үзілуіне жол бермейді</string>\n  <string name=\"permission_grant\">Рұқсат беру</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager жүктеуші хосты</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager жүктеушілеріне кіруді басқару үшін қолданылады. Бұл тек ReVanced Manager-де бар.</string>\n  <string name=\"fab_patch_app\">Қолданбаны патчтау</string>\n  <string name=\"fab_add_patches\">Патчтарды қосу</string>\n  <string name=\"new_downloader_notification\">Жаңа жүктеуші(лер) қолжетімді. Оларды конфигурациялау үшін осы жерді басыңыз.</string>\n  <string name=\"patches_not_downloaded\">Патчтар жүктеп алынған жоқ.</string>\n  <string name=\"app_source_dialog_option_auto_description\">Орнатылған қолданбаны, содан кейін жүктелген APK-ны, содан кейін қолжетімді жүктеушілерді пайдаланыңыз</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Үйлесімді қолданба немесе жүктеушілер табылмады</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Орнатылған қолданбаларды root рұқсатынсыз қайта түзету мүмкін емес</string>\n  <string name=\"patch_selector_item\">Патчтарды таңдау</string>\n  <string name=\"patch_selector_item_description\">%d патч таңдалды</string>\n  <string name=\"patch_selection_changed_warning\">Патчтарды таңдау өзгертілді</string>\n  <string name=\"apk_source_selector_item\">APK дереккөзін таңдау</string>\n  <string name=\"apk_source_auto\">Авто</string>\n  <string name=\"apk_source_auto_installed\">Авто · Орнатылған APK пайдаланылуда</string>\n  <string name=\"apk_source_auto_downloaded\">Авто · Жүктелген APK пайдаланылуда</string>\n  <string name=\"apk_source_auto_downloader\">Авто · Қолжетімді жүктеушілерді пайдалана отырып</string>\n  <string name=\"apk_source_auto_storage\">Авто · Сақтау қоймасынан таңдау</string>\n  <string name=\"apk_source_downloaded\">Қазірдің өзінде жүктеп алынған</string>\n  <string name=\"auto_updates_dialog_description\">ReVanced Manager келесі компоненттер үшін жаңартуларды мезгіл-мезгіл тексеріп отырғанын қалайсыз ба?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced патчтары</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Жүктеушілер</string>\n  <string name=\"auto_updates_dialog_note\">Бұл параметрлерді кейінірек өзгертуге болады.\n\n    ReVanced Manager құрылғыңыз интернетке қосылған болса, бастапқы нұсқаларды жүктеп алу үшін %s-ке қосылады.</string>\n  <string name=\"announcements_filter_tag\">Тег бойынша сүзу</string>\n  <string name=\"announcements_show_archived\">Мұрағатталғанды көрсету</string>\n  <string name=\"updates_description\">Жаңартуларды тексеру және өзгерістер журналын көру</string>\n  <string name=\"downloads_description\">Жүктеп алушылар және жүктелген қолданбалар</string>\n  <string name=\"safeguards_toggled_warning\">Қорғау шаралары ауыстырылды</string>\n  <string name=\"about_app_name\">%1$s туралы</string>\n  <string name=\"search_languages\">Тілдерді іздеу…</string>\n  <string name=\"keystore\">Кілт қоймасы</string>\n  <string name=\"patches_selections\">Патч таңдаулары</string>\n  <string name=\"select_bundle_for_import\">Импорттау үшін топтаманы таңдаңыз</string>\n  <string name=\"select_bundle_for_export\">Экспорттау үшін топтаманы таңдаңыз</string>\n  <string name=\"patch_selection_packages\">Сақталған таңдаулары бар қолданбалар</string>\n  <string name=\"patch_selection_entries\">Барлығы таңдалған патчтар</string>\n  <string name=\"reset_configuration\">Конфигурацияны ысырап ету</string>\n  <string name=\"reset_patch_selection\">Патч таңдаулары</string>\n  <string name=\"reset_patch_options\">Патч опциялары</string>\n  <string name=\"downloaders\">Жүктеп алушылар</string>\n  <string name=\"downloader_prereleases\">Алдын ала шығарылымдарды пайдалану</string>\n  <string name=\"downloader_prereleases_description\">Негізгі жүктеушінің алдын ала шығарылым нұсқаларын пайдаланыңыз</string>\n  <string name=\"downloader_state_loaded\">Жүктелді</string>\n  <string name=\"downloader_state_failed\">Жүктелмеді. Қосымша мәліметтер алу үшін басыңыз</string>\n  <string name=\"downloader_state_missing\">Жоқ</string>\n  <string name=\"downloader_delete_apps_title\">Таңдалған қолданбаларды жою</string>\n  <string name=\"downloader_delete_apps_description\">Таңдалған қолданбаларды жоюды қалайтыныңызға сенімдісіз бе?</string>\n  <string name=\"downloader_delete_single_description\">\\\"%s\\\" жойғыңыз келетініне сенімдісіз бе?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager арқылы жүктеп алынған қолданбалар осы жерде көрсетіледі.</string>\n  <string name=\"downloader_url\">Жүктеуші URL мекенжайы</string>\n  <string name=\"downloader_add\">Жүктеушіні қосу</string>\n  <string name=\"select_downloader_type_dialog_description\">Жаңа жүктеушілерді URL мекенжайынан немесе жергілікті файлдардан қосу</string>\n  <string name=\"local_downloaders_description\">Жүктеушілерді жергілікті сақтау қоймасынан қосу.</string>\n  <string name=\"remote_downloaders_description\">Жүктеушілерді URL мекенжайынан қосу. Автоматты түрде жаңартылуы мүмкін.</string>\n  <string name=\"install_revanced_downloaders\">Қолданбаларды ReVanced Manager ішінде тікелей алу үшін жүктеушілерді орнатыңыз.</string>\n  <string name=\"install_revanced_downloader\">ReVanced жүктеушілерін орнату</string>\n  <string name=\"cancel_downloader_install_title\">Жүктеушілерді орнатуды болдырмау керек пе?</string>\n  <string name=\"cancel_downloader_install_description\">Жүктеушілерді орнату жүріп жатыр. Егер қазір шықсаңыз, жүктеу тоқтатылады.</string>\n  <string name=\"downloader_sources_unavailable_title\">Бұл жүктеушілер жоқ</string>\n  <string name=\"downloader_sources_unavailable_description\">Оны түзету үшін жаңарту түймесін басыңыз.</string>\n  <string name=\"downloader_update_failed\">Жүктеушіні жаңарту мүмкін болмады: %s</string>\n  <string name=\"downloader_replace_fail\">Жүктеушіні импорттау мүмкін болмады: %s</string>\n  <string name=\"select_from_storage_description\">Файл таңдау құралын пайдаланып жадтан APK файлын таңдаңыз</string>\n  <string name=\"enable\">Қосу</string>\n  <string name=\"disable\">Өшіру</string>\n  <string name=\"process_runtime_memory_limit_description\">Патчтау процесі пайдалана алатын ең көп жад мөлшері</string>\n  <string name=\"reset_onboarding\">Бастапқы орнатуды ысырап ету</string>\n  <string name=\"reset_onboarding_description\">Келесі қолданба іске қосылғанда бастапқы орнату экранын көрсету</string>\n  <string name=\"api_not_working_title\">API қызметі қазіргі уақытта жұмыс істемейді</string>\n  <string name=\"api_not_working_description\">Кейбір функцияларға әсер етуі мүмкін. Қосылымыңызды немесе параметрлердегі API URL мекенжайын тексеріңіз.</string>\n  <string name=\"no_patched_apps_found\">Патчталған қолданбалар табылмады</string>\n  <string name=\"no_patched_apps_description\">Бізге белгілі патчталған қолданбаларыңыз қазір жоқ. Бірінші қолданбаңызды патчтау арқылы оны өзгертіңіз!</string>\n  <string name=\"patched_apps_section_title\">Патчталған қолданбалар</string>\n  <string name=\"patchable_apps_section_title\">Патчтауға болатын қолданбалар</string>\n  <string name=\"no_patches_found\">Патчтар табылмады</string>\n  <string name=\"no_patches_description\">Сізде әлі патчтар жоқ. Төмендегі түймені басу арқылы патчтарды қосыңыз!</string>\n  <string name=\"split_apk_not_supported\">Бөлінген APK файлдарын патчтау мүмкін емес</string>\n  <string name=\"no_downloaders_installed\">Ешқандай қолданба жүктеушілері орнатылмаған!</string>\n  <string name=\"no_downloaders_trusted\">Ешқандай қолданба жүктеушілеріне сенілмеген! Параметрлеріңізді тексеріңіз.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Пакеттер</string>\n  <string name=\"patch_selector_sheet_actions_title\">Әрекеттер</string>\n  <string name=\"restore_default_selection\">Әдепкі таңдауды қалпына келтіру</string>\n  <string name=\"deselect_all\">Барлығының таңдауын алып тастау</string>\n  <string name=\"invert_selection\">Таңдауды кері өзгерту</string>\n  <string name=\"deselect_all_except\">Барлығын %s-дан басқасын таңдамау</string>\n  <string name=\"scope_dialog_title\">Қолдану</string>\n  <string name=\"scope_all_patches\">Барлық патчтар</string>\n  <string name=\"scope_bundle_patches\">%s ғана</string>\n  <string name=\"save_as_file\">Файлдарға сақтау</string>\n  <string name=\"export_patcher_logs\">Патчтаушы журналдарын экспорттау</string>\n  <string name=\"save_logs_success\">Журналдар сақталды</string>\n  <string name=\"downloader_activity_dialog_body\">Бұл жүктеп алушымен жалғастыру үшін пайдаланушы әрекеті қажет.</string>\n  <string name=\"patcher_step_unpack\">Патчерді дайындау</string>\n  <string name=\"view_announcement\">Хабарландыруды қарау</string>\n  <string name=\"license\">Лицензия</string>\n  <string name=\"source\">Дереккөз</string>\n  <string name=\"repository\">Репозиторий</string>\n  <string name=\"bundle_information_by_author\">%1$s авторы</string>\n  <string name=\"version_compatibility_warning\">Таңдалған нұсқа таңдалған патчтармен үйлесімсіз болуы мүмкін</string>\n  <string name=\"announcements\">Хабарландырулар</string>\n  <string name=\"archive\">Мұрағат</string>\n  <string name=\"view_update\">Жаңартуды қарау</string>\n  <string name=\"update_checking_downloader\">Іске қосқанда ReVanced жүктеушілерінің жаңартуларын тексеру</string>\n  <string name=\"update_checking_downloader_description\">Қолданба іске қосылғанда орнатылған ReVanced жүктеушілерінің жаңартуларын тексеру</string>\n  <string name=\"prereleases_warning\">Алдын ала шығарылған нұсқалар тұрақсыз болуы және қателерді қамтуы мүмкін. Сіз апаттарды, деректердің жоғалуын немесе басқа күтпеген мәселелерді бастан кешіруіңіз мүмкін. Егер осы тәуекелдермен келіссеңіз ғана, оны қосыңыз.</string>\n  <string name=\"changelog\">Өзгерістер журналын қарау</string>\n  <string name=\"no_announcements_found\">Хабарландырулар табылмады</string>\n  <string name=\"new_announcement\">Жаңа хабарландыру:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d патч</item>\n    <item quantity=\"other\">%d патч</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d патчты орындау</item>\n    <item quantity=\"other\">%d патчты орындау</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d таңдалды</item>\n    <item quantity=\"other\">%d таңдалды</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-km-rKH/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">កម្មវិធីបំណះ</string>\n  <string name=\"onboarding_welcome_to\">សូមស្វាគមន៍មកកាន់</string>\n  <string name=\"onboarding_welcome_back\">សួស្តី! នេះគឺជាថ្មី</string>\n  <string name=\"onboarding_apps_subtitle\">អ្នកអាចជ្រើសរើសកម្មវិធីដើម្បីបំណះឥឡូវនេះ ឬធ្វើវានៅពេលក្រោយ</string>\n  <string name=\"onboarding_updates_subtitle\">កំណត់រចនាសម្ព័ន្ធការអាប់ដេតដោយស្វ័យប្រវត្តិដើម្បីរក្សា ReVanced Manager និងបំណះឱ្យទាន់សម័យ</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager នឹងភ្ជាប់ទៅ %s ដើម្បីទាញយកកំណែដំបូង ប្រសិនបើឧបករណ៍របស់អ្នកភ្ជាប់អ៊ីនធឺណិត។</string>\n  <string name=\"retry\">ព្យាយាមម្ដងទៀត</string>\n  <string name=\"onboarding_skip\">រំលងសម្រាប់ពេលនេះ</string>\n  <string name=\"onboarding_recommended_version\">កំណែដែលបានណែនាំ: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">រំលងសិទ្ធិអនុញ្ញាតទេ?</string>\n  <string name=\"onboarding_permissions_skip_description\">ដោយគ្មានសិទ្ធិអនុញ្ញាតដែលបានទាមទារ មុខងារមួយចំនួនប្រហែលជាមិនដំណើរការត្រឹមត្រូវទេ។ អ្នកអាចផ្ដល់សិទ្ធិទាំងនោះនៅពេលក្រោយក្នុងការកំណត់កម្មវិធី។</string>\n  <string name=\"onboarding_permissions_skip_anyway\">រំលងយ៉ាងណាក៏ដោយ</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager ត្រូវការសិទ្ធិអនុញ្ញាតមួយចំនួនដើម្បីដំណើរការបានត្រឹមត្រូវ</string>\n  <string name=\"permission_install_apps\">ដំឡើងកម្មវិធីដែលមិនស្គាល់</string>\n  <string name=\"permission_install_apps_description\">ទាមទារដើម្បីដំឡើងកម្មវិធីដែលបានកែច្នៃ</string>\n  <string name=\"permission_notifications\">ការជូនដំណឹង</string>\n  <string name=\"permission_battery\">បង្កើនប្រសិទ្ធភាពថ្ម</string>\n  <string name=\"permission_battery_description\">ការពារការកែច្នៃមិនឱ្យរំខាននៅផ្ទៃខាងក្រោយ</string>\n  <string name=\"permission_grant\">ផ្ដល់សិទ្ធិ</string>\n  <string name=\"downloader_host_permission_label\">ម៉ាស៊ីន​ទាញ​យក ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">ប្រើ​សម្រាប់​គ្រប់គ្រង​សិទ្ធិ​ចូល​ប្រើ​ប្រាស់​កម្មវិធី​ទាញ​យក ReVanced Manager។ មាន​តែ ReVanced Manager ប៉ុណ្ណោះ​ដែល​មាន​នេះ។</string>\n  <string name=\"fab_patch_app\">កែច្នៃកម្មវិធី</string>\n  <string name=\"fab_add_patches\">បន្ថែម patches</string>\n  <string name=\"new_downloader_notification\">មាន downloader(s) ថ្មី។ ចុចទីនេះដើម្បីកំណត់រចនាសម្ព័ន្ធពួកវា។</string>\n  <string name=\"patches_not_downloaded\">បំណះ​មិន​ត្រូវ​បាន​ទាញ​យក​ទេ។</string>\n  <string name=\"app_source_dialog_option_auto_description\">ប្រើកម្មវិធីដែលបានដំឡើង បន្ទាប់មក APK ដែលបានទាញយក បន្ទាប់មកឧបករណ៍ទាញយកដែលមាន</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">មិនមានកម្មវិធី ឬកម្មវិធីទាញយកដែលត្រូវគ្នាអាចប្រើបានទេ</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">កម្មវិធីដែលបានភ្ជាប់មិនអាចកែប្រែបានទៀតទេបើគ្មានសិទ្ធិចូលប្រើជា root</string>\n  <string name=\"patch_selector_item\">ជ្រើសរើស patches</string>\n  <string name=\"patch_selector_item_description\">បានជ្រើសរើស patches %d</string>\n  <string name=\"patch_selection_changed_warning\">ជម្រើស​បំណះ​ត្រូវ​បាន​ផ្លាស់ប្ដូរ</string>\n  <string name=\"apk_source_selector_item\">ជ្រើសរើសប្រភព APK</string>\n  <string name=\"apk_source_auto\">ស្វ័យប្រវត្តិ</string>\n  <string name=\"apk_source_auto_installed\">ស្វ័យប្រវត្តិ · កំពុងប្រើ APK ដែលបានដំឡើង</string>\n  <string name=\"apk_source_auto_downloaded\">ស្វ័យប្រវត្តិ · កំពុងប្រើ APK ដែលបានទាញយក</string>\n  <string name=\"apk_source_auto_downloader\">ស្វ័យប្រវត្តិ · ប្រើកម្មវិធីទាញយកដែលមាន</string>\n  <string name=\"apk_source_auto_storage\">ស្វ័យប្រវត្តិ · ជ្រើសរើសពីកន្លែងផ្ទុក</string>\n  <string name=\"apk_source_downloaded\">បានទាញយករួចហើយ</string>\n  <string name=\"auto_updates_dialog_description\">តើអ្នកចង់ឱ្យ ReVanced Manager ពិនិត្យរកមើលការអាប់ដេតជាប្រចាំសម្រាប់ធាតុផ្សំខាងក្រោមនេះទេ?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Patches</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: កម្មវិធីទាញយក</string>\n  <string name=\"auto_updates_dialog_note\">ការកំណត់ទាំងនេះអាចផ្លាស់ប្តូរបាននៅពេលក្រោយ។\n\n    ReVanced Manager នឹងភ្ជាប់ទៅ %s ដើម្បីទាញយកកំណែដំបូង ប្រសិនបើឧបករណ៍របស់អ្នកភ្ជាប់អ៊ីនធឺណិត។</string>\n  <string name=\"announcements_filter_tag\">ត្រងតាមស្លាក</string>\n  <string name=\"announcements_show_archived\">បង្ហាញឯកសារដែលបានទុកក្នុងបណ្ណសារ</string>\n  <string name=\"updates_description\">ពិនិត្យរកមើលការអាប់ដេត និងមើលកំណត់ហេតុនៃការផ្លាស់ប្តូរ</string>\n  <string name=\"downloads_description\">អ្នកទាញយក និង​កម្មវិធី​ដែលបាន​ទាញយក</string>\n  <string name=\"safeguards_toggled_warning\">ការ​ការពារ​ត្រូវ​បាន​បិទ​បើក</string>\n  <string name=\"about_app_name\">អំពី %1$s</string>\n  <string name=\"search_languages\">ស្វែងរកភាសា…</string>\n  <string name=\"keystore\">ឃ្លាំងកូនសោ</string>\n  <string name=\"patches_selections\">ការជ្រើសរើស Patches</string>\n  <string name=\"select_bundle_for_import\">ជ្រើសរើស bundle ដើម្បីនាំចូលទៅក្នុង</string>\n  <string name=\"select_bundle_for_export\">ជ្រើសរើស bundle ដើម្បីនាំចេញពី</string>\n  <string name=\"patch_selection_packages\">កម្មវិធីដែលមានការជ្រើសរើសដែលបានរក្សាទុក</string>\n  <string name=\"patch_selection_entries\">ចំនួន patches ដែលបានជ្រើសរើសសរុប</string>\n  <string name=\"reset_configuration\">កំណត់រចនាសម្ព័ន្ធឡើងវិញ</string>\n  <string name=\"reset_patch_selection\">ការជ្រើសរើស Patch</string>\n  <string name=\"reset_patch_options\">ជម្រើស Patch</string>\n  <string name=\"downloaders\">អ្នកទាញយក</string>\n  <string name=\"downloader_prereleases\">ប្រើកំណែមុនចេញផ្សាយ</string>\n  <string name=\"downloader_prereleases_description\">ប្រើកំណែមុនចេញផ្សាយរបស់កម្មវិធីទាញយកមេ</string>\n  <string name=\"downloader_state_loaded\">បានផ្ទុក</string>\n  <string name=\"downloader_state_failed\">បរាជ័យ​ក្នុងការ​ផ្ទុក។ ចុច​សម្រាប់​ព័ត៌មាន​លម្អិត​បន្ថែម</string>\n  <string name=\"downloader_state_missing\">បាត់</string>\n  <string name=\"downloader_delete_apps_title\">លុប​កម្មវិធី​ដែលបាន​ជ្រើសរើស</string>\n  <string name=\"downloader_delete_apps_description\">តើ​អ្នក​ប្រាកដ​ទេ​ថា​អ្នក​ចង់​លុប​កម្មវិធី​ដែលបាន​ជ្រើសរើស?</string>\n  <string name=\"downloader_delete_single_description\">តើអ្នកប្រាកដថាអ្នកចង់លុប \\\"%s\\\" ទេ?</string>\n  <string name=\"downloader_settings_no_apps_description\">កម្មវិធីដែលបានទាញយកតាមរយៈ ReVanced Manager នឹងបង្ហាញនៅទីនេះ។</string>\n  <string name=\"downloader_url\">URL ឧបករណ៍ទាញយក</string>\n  <string name=\"downloader_add\">បន្ថែមឧបករណ៍ទាញយក</string>\n  <string name=\"select_downloader_type_dialog_description\">បន្ថែមឧបករណ៍ទាញយកថ្មីពី URL ឬឯកសារក្នុងស្រុក</string>\n  <string name=\"local_downloaders_description\">បន្ថែមឧបករណ៍ទាញយកពីកន្លែងផ្ទុកក្នុងស្រុក។</string>\n  <string name=\"remote_downloaders_description\">បន្ថែមឧបករណ៍ទាញយកពី URL។ អាចធ្វើបច្ចុប្បន្នភាពដោយស្វ័យប្រវត្តិ។</string>\n  <string name=\"install_revanced_downloaders\">ដំឡើង downloaders ដើម្បីទទួលបានកម្មវិធីដោយផ្ទាល់នៅក្នុង ReVanced Manager។</string>\n  <string name=\"install_revanced_downloader\">ដំឡើង ReVanced Downloaders</string>\n  <string name=\"cancel_downloader_install_title\">បោះបង់ការដំឡើង downloaders ទេ?</string>\n  <string name=\"cancel_downloader_install_description\">ការដំឡើង downloaders កំពុងដំណើរការ។ ប្រសិនបើអ្នកចេញឥឡូវនេះ ការទាញយកនឹងត្រូវបានបោះបង់។</string>\n  <string name=\"downloader_sources_unavailable_title\">ឧបករណ៍ទាញយកទាំងនេះបាត់</string>\n  <string name=\"downloader_sources_unavailable_description\">ចុចលើប៊ូតុងធ្វើបច្ចុប្បន្នភាពដើម្បីជួសជុលវា។</string>\n  <string name=\"downloader_update_failed\">មិនអាចធ្វើបច្ចុប្បន្នភាពឧបករណ៍ទាញយកបានទេ៖ %s</string>\n  <string name=\"downloader_replace_fail\">មិនអាចនាំចូលឧបករណ៍ទាញយកបានទេ៖ %s</string>\n  <string name=\"select_from_storage_description\">ជ្រើសរើសឯកសារ APK ពីឧបករណ៍ផ្ទុកដោយប្រើឧបករណ៍ជ្រើសរើសឯកសារ</string>\n  <string name=\"enable\">បើក</string>\n  <string name=\"disable\">បិទ</string>\n  <string name=\"process_runtime_memory_limit_description\">ចំនួនអង្គចងចាំអតិបរមាដែលដំណើរការ Patcher អាចប្រើប្រាស់បាន</string>\n  <string name=\"reset_onboarding\">កំណត់ onboarding ឡើងវិញ</string>\n  <string name=\"reset_onboarding_description\">បង្ហាញអេក្រង់ onboarding នៅពេលចាប់ផ្តើមកម្មវិធីបន្ទាប់</string>\n  <string name=\"api_not_working_title\">សេវាកម្ម API កំពុងមានបញ្ហា</string>\n  <string name=\"api_not_working_description\">មុខងារមួយចំនួនអាចនឹងរងផលប៉ះពាល់។ សូមពិនិត្យមើលការតភ្ជាប់របស់អ្នក ឬ URL API នៅក្នុងការកំណត់។</string>\n  <string name=\"no_patched_apps_found\">មិនឃើញកម្មវិធីដែលបានកែច្នៃទេ</string>\n  <string name=\"no_patched_apps_description\">បច្ចុប្បន្ននេះ អ្នកមិនមានកម្មវិធីដែលបានកែច្នៃណាមួយដែលយើងដឹងនោះទេ។ ផ្លាស់ប្តូរវាដោយកែច្នៃកម្មវិធីដំបូងរបស់អ្នក!</string>\n  <string name=\"patched_apps_section_title\">កម្មវិធីដែលបានកែប្រែ</string>\n  <string name=\"patchable_apps_section_title\">កម្មវិធីដែលអាចកែប្រែបាន</string>\n  <string name=\"no_patches_found\">មិនឃើញ patches ទេ</string>\n  <string name=\"no_patches_description\">អ្នកមិនទាន់មាន patches ណាមួយនៅឡើយទេ។ បន្ថែម patches ដោយប៉ះប៊ូតុងខាងក្រោម!</string>\n  <string name=\"split_apk_not_supported\">APK ដែលបំបែកមិនអាចកែប្រែបានទេ</string>\n  <string name=\"no_downloaders_installed\">មិនមាន app downloaders ត្រូវបានដំឡើងទេ!</string>\n  <string name=\"no_downloaders_trusted\">មិនមាន app downloaders ត្រូវបានទុកចិត្តទេ! សូមពិនិត្យមើលការកំណត់របស់អ្នក។</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">កញ្ចប់</string>\n  <string name=\"patch_selector_sheet_actions_title\">សកម្មភាព</string>\n  <string name=\"restore_default_selection\">ស្ដារការជ្រើសរើសលំនាំដើម</string>\n  <string name=\"deselect_all\">ឈប់ជ្រើសរើសទាំងអស់</string>\n  <string name=\"invert_selection\">ប្ដូរការជ្រើសរើស</string>\n  <string name=\"deselect_all_except\">ដោះធីកទាំងអស់ លើកលែងតែ %s</string>\n  <string name=\"scope_dialog_title\">អនុវត្តទៅ</string>\n  <string name=\"scope_all_patches\">បំណះទាំងអស់</string>\n  <string name=\"scope_bundle_patches\">%s តែប៉ុណ្ណោះ</string>\n  <string name=\"save_as_file\">រក្សាទុកទៅឯកសារ</string>\n  <string name=\"export_patcher_logs\">នាំចេញកំណត់ហេតុ patcher</string>\n  <string name=\"save_logs_success\">បានរក្សាទុកកំណត់ហេតុ</string>\n  <string name=\"downloader_activity_dialog_body\">ត្រូវការ​ការ​អន្តរកម្ម​ពី​អ្នកប្រើប្រាស់ ដើម្បី​បន្ត​ជាមួយ​អ្នកទាញយក​នេះ។</string>\n  <string name=\"patcher_step_unpack\">រៀបចំ Patcher</string>\n  <string name=\"view_announcement\">មើលសេចក្ដីប្រកាស</string>\n  <string name=\"license\">អាជ្ញាប័ណ្ណ</string>\n  <string name=\"source\">ប្រភព</string>\n  <string name=\"repository\">Repository</string>\n  <string name=\"bundle_information_by_author\">ដោយ %1$s</string>\n  <string name=\"version_compatibility_warning\">កំណែដែលបានជ្រើសរើសប្រហែលជាមិនត្រូវគ្នាជាមួយកម្មវិធីបំណះដែលបានជ្រើសរើសទេ</string>\n  <string name=\"announcements\">សេចក្ដីប្រកាស</string>\n  <string name=\"archive\">បណ្ណសារ</string>\n  <string name=\"view_update\">មើលការអាប់ដេត</string>\n  <string name=\"update_checking_downloader\">ពិនិត្យរកមើលការអាប់ដេត ReVanced Downloaders នៅពេលចាប់ផ្ដើម</string>\n  <string name=\"update_checking_downloader_description\">ពិនិត្យរកមើលការអាប់ដេតទៅ ReVanced Downloaders ដែលបានដំឡើងនៅពេលកម្មវិធីចាប់ផ្ដើម</string>\n  <string name=\"prereleases_warning\">កំណែមុនចេញផ្សាយអាចនឹងមិនស្ថិតស្ថេរ និងមានកំហុស។ អ្នកអាចជួបប្រទះការគាំង ការបាត់បង់ទិន្នន័យ ឬបញ្ហាដែលមិនបានរំពឹងទុកផ្សេងទៀត។ បើកដំណើរការនេះលុះត្រាតែអ្នកពេញចិត្តនឹងហានិភ័យទាំងនេះ។</string>\n  <string name=\"changelog\">មើលកំណត់ហេតុនៃការផ្លាស់ប្តូរ</string>\n  <string name=\"no_announcements_found\">មិនមានសេចក្ដីប្រកាសណាមួយទេ</string>\n  <string name=\"new_announcement\">សេចក្ដីប្រកាសថ្មី:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"other\">%d បំណះ</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"other\">អនុវត្ត %d បំណះ</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"other\">%d បានជ្រើសរើស</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-kn-rIN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">ಪ್ಯಾಚರ್</string>\n  <string name=\"onboarding_welcome_to\">ಸ್ವಾಗತ</string>\n  <string name=\"onboarding_welcome_back\">ಹಾಯ್! ಇದು ಹೊಸ</string>\n  <string name=\"onboarding_apps_subtitle\">ನೀವು ಈಗ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಪ್ಯಾಚ್ ಮಾಡಲು ಆಯ್ಕೆ ಮಾಡಬಹುದು ಅಥವಾ ಅದನ್ನು ನಂತರ ಮಾಡಬಹುದು</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager ಮತ್ತು ಪ್ಯಾಚ್‌ಗಳನ್ನು ನವೀಕೃತವಾಗಿಡಲು ಸ್ವಯಂಚಾಲಿತ ನವೀಕರಣಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ</string>\n  <string name=\"onboarding_updates_note\">ನಿಮ್ಮ ಸಾಧನವು ಇಂಟರ್ನೆಟ್‌ಗೆ ಸಂಪರ್ಕಗೊಂಡಿದ್ದರೆ, ಆರಂಭಿಕ ಆವೃತ್ತಿಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ReVanced Manager %s ಗೆ ಸಂಪರ್ಕಿಸುತ್ತದೆ.</string>\n  <string name=\"retry\">ಮರುಪ್ರಯತ್ನಿಸಿ</string>\n  <string name=\"onboarding_skip\">ಸದ್ಯಕ್ಕೆ ಬಿಟ್ಟುಬಿಡಿ</string>\n  <string name=\"onboarding_recommended_version\">ಶಿಫಾರಸು ಮಾಡಲಾದ ಆವೃತ್ತಿ: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">ಅನುಮತಿಗಳನ್ನು ಬಿಟ್ಟುಬಿಡಬೇಕೆ?</string>\n  <string name=\"onboarding_permissions_skip_description\">ಅಗತ್ಯವಿರುವ ಅನುಮತಿಗಳಿಲ್ಲದೆ, ಕೆಲವು ವೈಶಿಷ್ಟ್ಯಗಳು ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದೇ ಇರಬಹುದು. ನೀವು ಅಪ್ಲಿಕೇಶನ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಅವುಗಳನ್ನು ನಂತರ ನೀಡಬಹುದು.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">ಹೇಗಾದರೂ ಬಿಟ್ಟುಬಿಡಿ</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಕೆಲವು ಅನುಮತಿಗಳ ಅಗತ್ಯವಿದೆ</string>\n  <string name=\"permission_install_apps\">ಅಜ್ಞಾತ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಸ್ಥಾಪಿಸಿ</string>\n  <string name=\"permission_install_apps_description\">ಪ್ಯಾಚ್ ಮಾಡಿದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಸ್ಥಾಪಿಸಲು ಅಗತ್ಯವಿದೆ</string>\n  <string name=\"permission_notifications\">ಅಧಿಸೂಚನೆಗಳು</string>\n  <string name=\"permission_battery\">ಬ್ಯಾಟರಿ ಆಪ್ಟಿಮೈಸೇಶನ್</string>\n  <string name=\"permission_battery_description\">ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಪ್ಯಾಚಿಂಗ್‌ಗೆ ಅಡ್ಡಿಯಾಗುವುದನ್ನು ತಡೆಯುತ್ತದೆ</string>\n  <string name=\"permission_grant\">ಅನುಮತಿ ನೀಡಿ</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager ಡೌನ್‌ಲೋಡರ್ ಹೋಸ್ಟ್</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager ಡೌನ್‌ಲೋಡರ್‌ಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ನಿಯಂತ್ರಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ. ಕೇವಲ ReVanced Manager ಮಾತ್ರ ಇದನ್ನು ಹೊಂದಿದೆ.</string>\n  <string name=\"fab_patch_app\">ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಪ್ಯಾಚ್ ಮಾಡಿ</string>\n  <string name=\"fab_add_patches\">ಪ್ಯಾಚ್‌ಗಳನ್ನು ಸೇರಿಸಿ</string>\n  <string name=\"new_downloader_notification\">ಹೊಸ ಡೌನ್‌ಲೋಡರ್(ಗಳು) ಲಭ್ಯವಿದೆ. ಅವುಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ.</string>\n  <string name=\"patches_not_downloaded\">ಪ್ಯಾಚ್‌ಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗಿಲ್ಲ.</string>\n  <string name=\"app_source_dialog_option_auto_description\">ಸ್ಥಾಪಿಸಲಾದ ಅಪ್ಲಿಕೇಶನ್ ಬಳಸಿ, ನಂತರ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ APK, ನಂತರ ಲಭ್ಯವಿರುವ ಡೌನ್‌ಲೋಡರ್‌ಗಳು</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">ಯಾವುದೇ ಹೊಂದಾಣಿಕೆಯ ಅಪ್ಲಿಕೇಶನ್ ಅಥವಾ ಡೌನ್‌ಲೋಡರ್‌ಗಳು ಲಭ್ಯವಿಲ್ಲ</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">ರೂಟ್ ಅನುಮತಿ ಇಲ್ಲದೆ ಆರೋಹಿಸಿದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಮತ್ತೆ ಪ್ಯಾಚ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ</string>\n  <string name=\"patch_selector_item\">ಪ್ಯಾಚ್‌ಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ</string>\n  <string name=\"patch_selector_item_description\">%d ಪ್ಯಾಚ್‌ಗಳು ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</string>\n  <string name=\"patch_selection_changed_warning\">ಪ್ಯಾಚ್‌ಗಳ ಆಯ್ಕೆಯನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ</string>\n  <string name=\"apk_source_selector_item\">APK ಮೂಲವನ್ನು ಆಯ್ಕೆಮಾಡಿ</string>\n  <string name=\"apk_source_auto\">ಸ್ವಯಂ</string>\n  <string name=\"apk_source_auto_installed\">ಸ್ವಯಂ · ಸ್ಥಾಪಿಸಲಾದ APK ಬಳಸಲಾಗುತ್ತಿದೆ</string>\n  <string name=\"apk_source_auto_downloaded\">ಸ್ವಯಂ · ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ APK ಬಳಸಲಾಗುತ್ತಿದೆ</string>\n  <string name=\"apk_source_auto_downloader\">ಸ್ವಯಂ · ಲಭ್ಯವಿರುವ ಡೌನ್‌ಲೋಡರ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು</string>\n  <string name=\"apk_source_auto_storage\">ಸ್ವಯಂ · ಸಂಗ್ರಹಣೆಯಿಂದ ಆಯ್ಕೆಮಾಡಿ</string>\n  <string name=\"apk_source_downloaded\">ಈಗಾಗಲೇ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗಿದೆ</string>\n  <string name=\"auto_updates_dialog_description\">ReVanced Manager ಈ ಕೆಳಗಿನ ಘಟಕಗಳಿಗೆ ನವೀಕರಣಗಳನ್ನು ನಿಯತಕಾಲಿಕವಾಗಿ ಪರಿಶೀಲಿಸಬೇಕೆಂದು ನೀವು ಬಯಸುತ್ತೀರಾ?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced ಪ್ಯಾಚ್‌ಗಳು</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: ಡೌನ್‌ಲೋಡರ್‌ಗಳು</string>\n  <string name=\"auto_updates_dialog_note\">ಈ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ನಂತರ ಬದಲಾಯಿಸಬಹುದು.\n\n    ನಿಮ್ಮ ಸಾಧನವು ಇಂಟರ್ನೆಟ್‌ಗೆ ಸಂಪರ್ಕಗೊಂಡಿದ್ದರೆ, ಆರಂಭಿಕ ಆವೃತ್ತಿಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ReVanced Manager %s ಗೆ ಸಂಪರ್ಕಿಸುತ್ತದೆ.</string>\n  <string name=\"announcements_filter_tag\">ಟ್ಯಾಗ್ ಮೂಲಕ ಫಿಲ್ಟರ್ ಮಾಡಿ</string>\n  <string name=\"announcements_show_archived\">ಆರ್ಕೈವ್ ಮಾಡಿದವುಗಳನ್ನು ತೋರಿಸಿ</string>\n  <string name=\"updates_description\">ನವೀಕರಣಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಬದಲಾವಣೆ ದಾಖಲೆಯನ್ನು ವೀಕ್ಷಿಸಿ</string>\n  <string name=\"downloads_description\">ಡೌನ್‌ಲೋಡರ್‌ಗಳು ಮತ್ತು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು</string>\n  <string name=\"safeguards_toggled_warning\">ರಕ್ಷಣಾ ಕ್ರಮಗಳನ್ನು ಟಾಗಲ್ ಮಾಡಲಾಗಿದೆ</string>\n  <string name=\"about_app_name\">%1$s ಕುರಿತು</string>\n  <string name=\"search_languages\">ಭಾಷೆಗಳನ್ನು ಹುಡುಕಿ…</string>\n  <string name=\"keystore\">ಕೀಸ್ಟೋರ್</string>\n  <string name=\"patches_selections\">ಪ್ಯಾಚ್‌ಗಳ ಆಯ್ಕೆಗಳು</string>\n  <string name=\"select_bundle_for_import\">ಆಮದು ಮಾಡಲು ಬಂಡಲ್ ಆಯ್ಕೆಮಾಡಿ</string>\n  <string name=\"select_bundle_for_export\">ರಫ್ತು ಮಾಡಲು ಬಂಡಲ್ ಆಯ್ಕೆಮಾಡಿ</string>\n  <string name=\"patch_selection_packages\">ಉಳಿಸಿದ ಆಯ್ಕೆಗಳೊಂದಿಗೆ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು</string>\n  <string name=\"patch_selection_entries\">ಒಟ್ಟು ಆಯ್ಕೆಮಾಡಿದ ಪ್ಯಾಚ್‌ಗಳು</string>\n  <string name=\"reset_configuration\">ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಮರುಹೊಂದಿಸಿ</string>\n  <string name=\"reset_patch_selection\">ಪ್ಯಾಚ್ ಆಯ್ಕೆಗಳು</string>\n  <string name=\"reset_patch_options\">ಪ್ಯಾಚ್ ಆಯ್ಕೆಗಳು</string>\n  <string name=\"downloaders\">ಡೌನ್‌ಲೋಡರ್‌ಗಳು</string>\n  <string name=\"downloader_prereleases\">ಪೂರ್ವ-ಬಿಡುಗಡೆಗಳನ್ನು ಬಳಸಿ</string>\n  <string name=\"downloader_prereleases_description\">ಮುಖ್ಯ ಡೌನ್‌ಲೋಡರ್‌ನ ಪೂರ್ವ-ಬಿಡುಗಡೆ ಆವೃತ್ತಿಗಳನ್ನು ಬಳಸಿ</string>\n  <string name=\"downloader_state_loaded\">ಲೋಡ್ ಆಗಿದೆ</string>\n  <string name=\"downloader_state_failed\">ಲೋಡ್ ಆಗುವಲ್ಲಿ ವಿಫಲವಾಗಿದೆ. ಹೆಚ್ಚಿನ ವಿವರಗಳಿಗಾಗಿ ಕ್ಲಿಕ್ ಮಾಡಿ</string>\n  <string name=\"downloader_state_missing\">ಕಾಣೆಯಾಗಿದೆ</string>\n  <string name=\"downloader_delete_apps_title\">ಆಯ್ಕೆಮಾಡಿದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಅಳಿಸಿ</string>\n  <string name=\"downloader_delete_apps_description\">ಆಯ್ಕೆಮಾಡಿದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಅಳಿಸಲು ನೀವು ಖಚಿತವಾಗಿದ್ದೀರಾ?</string>\n  <string name=\"downloader_delete_single_description\">ನೀವು \\\"%s\\\" ಅನ್ನು ಅಳಿಸಲು ಖಚಿತವಾಗಿ ಬಯಸುತ್ತೀರಾ?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager ಮೂಲಕ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಇಲ್ಲಿ ಕಾಣಿಸುತ್ತವೆ.</string>\n  <string name=\"downloader_url\">ಡೌನ್‌ಲೋಡರ್ URL</string>\n  <string name=\"downloader_add\">ಡೌನ್‌ಲೋಡರ್ ಸೇರಿಸಿ</string>\n  <string name=\"select_downloader_type_dialog_description\">URL ಅಥವಾ ಸ್ಥಳೀಯ ಫೈಲ್‌ಗಳಿಂದ ಹೊಸ ಡೌನ್‌ಲೋಡರ್‌ಗಳನ್ನು ಸೇರಿಸಿ</string>\n  <string name=\"local_downloaders_description\">ಸ್ಥಳೀಯ ಸಂಗ್ರಹಣೆಯಿಂದ ಡೌನ್‌ಲೋಡರ್‌ಗಳನ್ನು ಸೇರಿಸಿ.</string>\n  <string name=\"remote_downloaders_description\">URL ನಿಂದ ಡೌನ್‌ಲೋಡರ್‌ಗಳನ್ನು ಸೇರಿಸಿ. ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನವೀಕರಿಸಬಹುದು.</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager ಒಳಗೆ ನೇರವಾಗಿ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಪಡೆಯಲು ಡೌನ್‌ಲೋಡರ್‌ಗಳನ್ನು ಸ್ಥಾಪಿಸಿ.</string>\n  <string name=\"install_revanced_downloader\">ReVanced ಡೌನ್‌ಲೋಡರ್‌ಗಳನ್ನು ಸ್ಥಾಪಿಸಿ</string>\n  <string name=\"cancel_downloader_install_title\">ಡೌನ್‌ಲೋಡರ್‌ಗಳ ಸ್ಥಾಪನೆಯನ್ನು ರದ್ದುಗೊಳಿಸಬೇಕೆ?</string>\n  <string name=\"cancel_downloader_install_description\">ಡೌನ್‌ಲೋಡರ್‌ಗಳ ಸ್ಥಾಪನೆಯು ಪ್ರಗತಿಯಲ್ಲಿದೆ. ನೀವು ಈಗ ಹೊರಟರೆ, ಡೌನ್‌ಲೋಡ್ ರದ್ದುಗೊಳ್ಳುತ್ತದೆ.</string>\n  <string name=\"downloader_sources_unavailable_title\">ಈ ಡೌನ್‌ಲೋಡರ್‌ಗಳು ಕಾಣೆಯಾಗಿವೆ</string>\n  <string name=\"downloader_sources_unavailable_description\">ಇದನ್ನು ಸರಿಪಡಿಸಲು ನವೀಕರಿಸು ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿ.</string>\n  <string name=\"downloader_update_failed\">ಡೌನ್‌ಲೋಡರ್ ನವೀಕರಿಸುವಲ್ಲಿ ವಿಫಲವಾಗಿದೆ: %s</string>\n  <string name=\"downloader_replace_fail\">ಡೌನ್‌ಲೋಡರ್ ಆಮದು ಮಾಡುವಲ್ಲಿ ವಿಫಲವಾಗಿದೆ: %s</string>\n  <string name=\"select_from_storage_description\">ಫೈಲ್ ಪಿಕ್ಕರ್ ಬಳಸಿ ಸಂಗ್ರಹಣೆಯಿಂದ APK ಫೈಲ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ</string>\n  <string name=\"enable\">ಸಕ್ರಿಯಗೊಳಿಸಿ</string>\n  <string name=\"disable\">ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</string>\n  <string name=\"process_runtime_memory_limit_description\">ಪ್ಯಾಚರ್ ಪ್ರಕ್ರಿಯೆಯು ಬಳಸಬಹುದಾದ ಗರಿಷ್ಠ ಪ್ರಮಾಣದ ಮೆಮೊರಿ</string>\n  <string name=\"reset_onboarding\">ಆನ್‌ಬೋರ್ಡಿಂಗ್ ಅನ್ನು ಮರುಹೊಂದಿಸಿ</string>\n  <string name=\"reset_onboarding_description\">ಮುಂದಿನ ಅಪ್ಲಿಕೇಶನ್ ಪ್ರಾರಂಭದಲ್ಲಿ ಆನ್‌ಬೋರ್ಡಿಂಗ್ ಸ್ಕ್ರೀನ್ ತೋರಿಸಿ</string>\n  <string name=\"api_not_working_title\">API ಸೇವೆ ಪ್ರಸ್ತುತ ಸ್ಥಗಿತಗೊಂಡಿದೆ</string>\n  <string name=\"api_not_working_description\">ಕೆಲವು ವೈಶಿಷ್ಟ್ಯಗಳು ಪ್ರಭಾವಿತವಾಗಬಹುದು. ನಿಮ್ಮ ಸಂಪರ್ಕ ಅಥವಾ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿನ API URL ಅನ್ನು ಪರಿಶೀಲಿಸಿ.</string>\n  <string name=\"no_patched_apps_found\">ಯಾವುದೇ ಪ್ಯಾಚ್ ಮಾಡಿದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಕಂಡುಬಂದಿಲ್ಲ</string>\n  <string name=\"no_patched_apps_description\">ಪ್ರಸ್ತುತ, ನಿಮಗೆ ತಿಳಿದಿರುವ ಯಾವುದೇ ಪ್ಯಾಚ್ ಮಾಡಿದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ನಿಮ್ಮ ಬಳಿ ಇಲ್ಲ. ನಿಮ್ಮ ಮೊದಲ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಪ್ಯಾಚ್ ಮಾಡುವ ಮೂಲಕ ಅದನ್ನು ಬದಲಾಯಿಸಿ!</string>\n  <string name=\"patched_apps_section_title\">ಪ್ಯಾಚ್ ಮಾಡಿದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು</string>\n  <string name=\"patchable_apps_section_title\">ಪ್ಯಾಚ್ ಮಾಡಬಹುದಾದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು</string>\n  <string name=\"no_patches_found\">ಯಾವುದೇ ಪ್ಯಾಚ್‌ಗಳು ಕಂಡುಬಂದಿಲ್ಲ</string>\n  <string name=\"no_patches_description\">ನಿಮ್ಮ ಬಳಿ ಇನ್ನೂ ಯಾವುದೇ ಪ್ಯಾಚ್‌ಗಳು ಇಲ್ಲ. ಕೆಳಗಿನ ಬಟನ್ ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡುವ ಮೂಲಕ ಪ್ಯಾಚ್‌ಗಳನ್ನು ಸೇರಿಸಿ!</string>\n  <string name=\"split_apk_not_supported\">ಸ್ಪ್ಲಿಟ್ APK ಗಳನ್ನು ಪ್ಯಾಚ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ</string>\n  <string name=\"no_downloaders_installed\">ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್ ಡೌನ್‌ಲೋಡರ್‌ಗಳು ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ!</string>\n  <string name=\"no_downloaders_trusted\">ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್ ಡೌನ್‌ಲೋಡರ್‌ಗಳನ್ನು ನಂಬಲಾಗಿಲ್ಲ! ದಯವಿಟ್ಟು ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">ಪ್ಯಾಕೇಜ್‌ಗಳು</string>\n  <string name=\"patch_selector_sheet_actions_title\">ಕ್ರಮಗಳು</string>\n  <string name=\"restore_default_selection\">ಡೀಫಾಲ್ಟ್ ಆಯ್ಕೆಯನ್ನು ಮರುಸ್ಥಾಪಿಸಿ</string>\n  <string name=\"deselect_all\">ಎಲ್ಲವನ್ನೂ ಆಯ್ಕೆ ರದ್ದುಗೊಳಿಸಿ</string>\n  <string name=\"invert_selection\">ಆಯ್ಕೆಯನ್ನು ವಿಲೋಮಗೊಳಿಸಿ</string>\n  <string name=\"deselect_all_except\">%s ಹೊರತುಪಡಿಸಿ ಎಲ್ಲವನ್ನೂ ಆಯ್ಕೆ ರದ್ದುಮಾಡಿ</string>\n  <string name=\"scope_dialog_title\">ಇದಕ್ಕೆ ಅನ್ವಯಿಸು</string>\n  <string name=\"scope_all_patches\">ಎಲ್ಲಾ ಪ್ಯಾಚ್‌ಗಳು</string>\n  <string name=\"scope_bundle_patches\">%s ಮಾತ್ರ</string>\n  <string name=\"save_as_file\">ಫೈಲ್‌ಗಳಿಗೆ ಉಳಿಸಿ</string>\n  <string name=\"export_patcher_logs\">ಪ್ಯಾಚರ್ ಲಾಗ್‌ಗಳನ್ನು ರಫ್ತು ಮಾಡಿ</string>\n  <string name=\"save_logs_success\">ಲಾಗ್‌ಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ</string>\n  <string name=\"downloader_activity_dialog_body\">ಈ ಡೌನ್‌ಲೋಡರ್‌ನೊಂದಿಗೆ ಮುಂದುವರಿಯಲು ಬಳಕೆದಾರರ ಸಂವಹನ ಅಗತ್ಯವಿದೆ.</string>\n  <string name=\"patcher_step_unpack\">ಪ್ಯಾಚರ್ ಸಿದ್ಧಪಡಿಸಿ</string>\n  <string name=\"view_announcement\">ಪ್ರಕಟಣೆಯನ್ನು ವೀಕ್ಷಿಸಿ</string>\n  <string name=\"license\">ಪರವಾನಗಿ</string>\n  <string name=\"source\">ಮೂಲ</string>\n  <string name=\"repository\">ರೆಪೊಸಿಟರಿ</string>\n  <string name=\"bundle_information_by_author\">%1$s ರಿಂದ</string>\n  <string name=\"version_compatibility_warning\">ಆಯ್ಕೆಮಾಡಿದ ಆವೃತ್ತಿಯು ಆಯ್ಕೆಮಾಡಿದ ಪ್ಯಾಚ್‌ಗಳೊಂದಿಗೆ ಹೊಂದಿಕೆಯಾಗದಿರಬಹುದು</string>\n  <string name=\"announcements\">ಪ್ರಕಟಣೆಗಳು</string>\n  <string name=\"archive\">ಆರ್ಕೈವ್</string>\n  <string name=\"view_update\">ನವೀಕರಣವನ್ನು ವೀಕ್ಷಿಸಿ</string>\n  <string name=\"update_checking_downloader\">ಪ್ರಾರಂಭದಲ್ಲಿ ReVanced ಡೌನ್‌ಲೋಡರ್‌ಗಳ ನವೀಕರಣಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸಿ</string>\n  <string name=\"update_checking_downloader_description\">ಅಪ್ಲಿಕೇಶನ್ ಪ್ರಾರಂಭವಾದಾಗ ಸ್ಥಾಪಿಸಲಾದ ReVanced ಡೌನ್‌ಲೋಡರ್‌ಗಳಿಗೆ ನವೀಕರಣಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸಿ</string>\n  <string name=\"prereleases_warning\">ಪೂರ್ವ-ಬಿಡುಗಡೆ ಆವೃತ್ತಿಗಳು ಅಸ್ಥಿರವಾಗಿರಬಹುದು ಮತ್ತು ದೋಷಗಳನ್ನು ಒಳಗೊಂಡಿರಬಹುದು. ನಿಮಗೆ ಕ್ರ್ಯಾಶ್‌ಗಳು, ಡೇಟಾ ನಷ್ಟ, ಅಥವಾ ಇತರ ಅನಿರೀಕ್ಷಿತ ಸಮಸ್ಯೆಗಳು ಎದುರಾಗಬಹುದು. ಈ ಅಪಾಯಗಳ ಬಗ್ಗೆ ನಿಮಗೆ ಆರಾಮದಾಯಕವಾಗಿದ್ದರೆ ಮಾತ್ರ ಇದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.</string>\n  <string name=\"changelog\">ಬದಲಾವಣೆ ದಾಖಲೆಯನ್ನು ವೀಕ್ಷಿಸಿ</string>\n  <string name=\"no_announcements_found\">ಯಾವುದೇ ಪ್ರಕಟಣೆಗಳು ಕಂಡುಬಂದಿಲ್ಲ</string>\n  <string name=\"new_announcement\">ಹೊಸ ಪ್ರಕಟಣೆ:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d ಪ್ಯಾಚ್</item>\n    <item quantity=\"other\">%d ಪ್ಯಾಚ್‌ಗಳು</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d ಪ್ಯಾಚ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಿ</item>\n    <item quantity=\"other\">%d ಪ್ಯಾಚ್‌ಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಿ</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</item>\n    <item quantity=\"other\">%d ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ko-rKR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">패처</string>\n  <string name=\"patches\">패치</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">매니저</string>\n  <string name=\"onboarding_welcome_to\">환영합니다</string>\n  <string name=\"onboarding_welcome_back\">안녕하세요!</string>\n  <string name=\"onboarding_apps_subtitle\">지금 앱을 선택하여 패치하거나 나중에 패치할 수 있습니다</string>\n  <string name=\"onboarding_apps_network_error\">네트워크를 사용할 수 없거나 불안정하여 패치를 로드할 수 없습니다. 안정적인 네트워크에 연결하여 다시 시도하십시오.</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager 및 패치를 최신 상태로 유지하려면 자동 업데이트를 설정하세요</string>\n  <string name=\"banner_sources_not_downloaded_description\">설정 중에 패치 및 다운로더를 다운로드할 수 없습니다. 다운로드하려면 업데이트를 누르십시오.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager는 기기가 인터넷에 연결되어 있으면 초기 버전을 다운로드하기 위해 %s에 연결됩니다.</string>\n  <string name=\"retry\">다시 시도</string>\n  <string name=\"onboarding_skip\">건너뛰기</string>\n  <string name=\"onboarding_recommended_version\">권장 버전: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">권한을 건너뛰시겠습니까?</string>\n  <string name=\"onboarding_permissions_skip_description\">필수 권한이 없으면 일부 기능이 제대로 작동하지 않을 수 있습니다. 나중에 앱 설정에서 권한을 부여할 수 있습니다.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">그래도 건너뛰기</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager가 제대로 작동하려면 몇 가지 권한이 필요합니다</string>\n  <string name=\"permission_install_apps\">알 수 없는 앱 설치</string>\n  <string name=\"permission_install_apps_description\">패치된 애플리케이션을 설치하는 데 필요합니다</string>\n  <string name=\"permission_notifications\">알림</string>\n  <string name=\"permission_notifications_description\">백그라운드에서 중단 없이 패치할 수 있도록 허용합니다</string>\n  <string name=\"permission_battery\">배터리 최적화</string>\n  <string name=\"permission_battery_description\">백그라운드에서 패치 작업이 중단되는 것을 방지합니다</string>\n  <string name=\"permission_grant\">허용</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager 다운로더 호스트</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager 다운로더 접근 제어에 사용됩니다. ReVanced Manager만 이 권한을 가집니다.</string>\n  <string name=\"toast_copied_to_clipboard\">복사하였습니다!</string>\n  <string name=\"copy_to_clipboard\">클립보드에 복사</string>\n  <string name=\"dashboard\">대시보드</string>\n  <string name=\"settings\">설정</string>\n  <string name=\"select_app\">앱 선택</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d 개가 선택됨</string>\n  <string name=\"fab_patch_app\">앱 패치</string>\n  <string name=\"fab_add_patches\">패치 추가</string>\n  <string name=\"new_downloader_notification\">새 다운로더를 사용할 수 있습니다. 설정하려면 여기를 탭하세요.</string>\n  <string name=\"unsupported_architecture_warning\">이 기기 아키텍처에 대한 패치는 지원되지 않으므로 실패할 가능성이 높습니다.</string>\n  <string name=\"import_\">가져오기</string>\n  <string name=\"import_patches\">패치 가져오기</string>\n  <string name=\"file_field_set\">선택됨</string>\n  <string name=\"file_field_not_set\">선택되지 않음</string>\n  <string name=\"field_not_set\">설정되지 않음</string>\n  <string name=\"patches_missing\">누락되었음</string>\n  <string name=\"patches_error\">오류</string>\n  <string name=\"patches_error_description\">패치를 불러올 수 없습니다. 오류를 보려면 여기를 탭하세요</string>\n  <string name=\"patches_not_downloaded\">패치가 다운로드되지 않았습니다.</string>\n  <string name=\"patches_name_default\">패치</string>\n  <string name=\"patches_name_fallback\">이름 없음</string>\n  <string name=\"android_11_bug_dialog_title\">Android 11 버그</string>\n  <string name=\"android_11_bug_dialog_description\">사용자 환경에 부정적인 영향을 미치는 Android 11 시스템 버그를 방지하려면 앱 설치 권한을 미리 부여해야 합니다.</string>\n  <string name=\"no_network_toast\">인터넷에 연결할 수 없습니다</string>\n  <string name=\"selected_app_meta_any_version\">사용 가능한 모든 버전</string>\n  <string name=\"app_source_dialog_title\">소스 선택</string>\n  <string name=\"app_source_dialog_option_auto\">자동</string>\n  <string name=\"app_source_dialog_option_auto_description\">설치된 앱, 다운로드된 APK, 사용 가능한 다운로더 순으로 사용합니다</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">호환되는 앱 또는 다운로더를 찾을 수 없습니다</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">마운트된 앱은 루트 권한 없이는 다시 패치할 수 없습니다</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">%s 버전이 권장 버전과 일치하지 않습니다</string>\n  <string name=\"patch_item_description\">애플리케이션 패치를 시작하였습니다</string>\n  <string name=\"patch_selector_item\">패치 선택</string>\n  <string name=\"patch_selector_item_description\">%d 개의 패치를 선택하였습니다</string>\n  <string name=\"patch_selection_changed_warning\">패치 선택이 변경되었습니다.</string>\n  <string name=\"no_patches_selected\">선택된 패치가 없습니다</string>\n  <string name=\"network_unavailable_warning\">기기가 인터넷에 연결되어 있지 않습니다. 나중에 다운로드가 실패할 수 있습니다.</string>\n  <string name=\"network_metered_warning\">현재 모바일 데이터를 사용 중입니다. 통신사 데이터 요금이 부과될 수 있습니다.</string>\n  <string name=\"apk_source_selector_item\">APK 소스 선택</string>\n  <string name=\"apk_source_auto\">자동</string>\n  <string name=\"apk_source_auto_installed\">자동 · 설치된 APK 사용</string>\n  <string name=\"apk_source_auto_downloaded\">자동 · 다운로드된 APK 사용</string>\n  <string name=\"apk_source_auto_downloader\">자동 · 사용 가능한 다운로더 사용</string>\n  <string name=\"apk_source_auto_storage\">자동 · 기기 저장소에서 선택</string>\n  <string name=\"apk_source_downloader\">\\'%s\\'를 사용합니다</string>\n  <string name=\"apk_source_installed\">설치된 APK를 사용합니다</string>\n  <string name=\"apk_source_local\">기기 APK 파일를 사용합니다</string>\n  <string name=\"apk_source_downloaded\">이미 다운로드됨</string>\n  <string name=\"legacy_import_failed\">기존 설정을 가져올 수 없습니다</string>\n  <string name=\"auto_updates_dialog_title\">업데이트 설정</string>\n  <string name=\"auto_updates_dialog_description\">ReVanced Manager에서 다음 구성 요소에 대한 업데이트를 주기적으로 확인하시겠습니까?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Patches</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Downloaders</string>\n  <string name=\"auto_updates_dialog_note\">이 설정은 나중에 변경할 수 있습니다.\n\n    ReVanced Manager는 기기가 인터넷에 연결되어 있으면 초기 버전을 다운로드하기 위해 %s에 연결됩니다.</string>\n  <string name=\"announcements_filter_tag\">태그로 필터링</string>\n  <string name=\"announcements_show_archived\">보관된 항목 보기</string>\n  <string name=\"general\">일반</string>\n  <string name=\"general_description\">앱 언어, 테마 및 동적 색상</string>\n  <string name=\"updates\">업데이트</string>\n  <string name=\"updates_description\">업데이트 확인 및 변경 사항 보기</string>\n  <string name=\"downloads\">다운로드</string>\n  <string name=\"downloads_description\">다운로더 및 다운로드된 앱</string>\n  <string name=\"import_export\">가져오기 및 내보내기</string>\n  <string name=\"import_export_description\">키스토어, 패치 옵션 및 선택 목록</string>\n  <string name=\"advanced\">고급</string>\n  <string name=\"advanced_description\">API URL, 메모리 제한 및 디버그</string>\n  <string name=\"safeguards_toggled_warning\">보안 설정이 토글되어 있습니다</string>\n  <string name=\"about\">정보</string>\n  <string name=\"about_app_name\">%1$s에 대한 정보</string>\n  <string name=\"opensource_licenses\">오픈소스 라이선스</string>\n  <string name=\"opensource_licenses_description\">이 애플리케이션을 만드는 데 사용된 모든 라이브러리를 볼 수 있습니다</string>\n  <string name=\"contributors\">도움을 주신 분들</string>\n  <string name=\"contributors_description\">ReVanced 개발에 도움을 주신 분들</string>\n  <string name=\"dynamic_color\">동적 색상</string>\n  <string name=\"dynamic_color_description\">배경화면에 맞게 색상을 조정합니다</string>\n  <string name=\"pure_black_theme\">순수 검정 테마</string>\n  <string name=\"pure_black_theme_description\">어두운 테마에서 순수 검정 배경을 사용합니다</string>\n  <string name=\"theme\">앱 테마</string>\n  <string name=\"theme_description\">밝은 테마 또는 어두운 테마를 선택하세요</string>\n  <string name=\"language\">앱 언어</string>\n  <string name=\"language_description\">앱 언어를 선택하세요</string>\n  <string name=\"language_system_default\">시스템 기본값</string>\n  <string name=\"search_languages\">언어 검색…</string>\n  <string name=\"safeguards\">보안</string>\n  <string name=\"patch_compat_check\">버전 호환성 검사 비활성화</string>\n  <string name=\"patch_compat_check_description\">앱 버전과 호환되지 않는 패치를 선택할 수 있습니다</string>\n  <string name=\"patch_compat_check_confirmation\">호환되지 않는 패치를 선택하면 앱이 손상될 수 있습니다.\n\n그래도 계속하시겠습니까?</string>\n  <string name=\"suggested_version_safeguard\">권장 앱 버전 요구</string>\n  <string name=\"suggested_version_safeguard_description\">권장되지 않는 앱 버전은 선택할 수 없습니다</string>\n  <string name=\"suggested_version_safeguard_confirmation\">권장 버전이 아닌 앱을 선택하는 경우에는 예상되지 않은 문제점이 발생할 수 있습니다.\n\n그래도 계속하시겠습니까?</string>\n  <string name=\"patch_selection_safeguard\">패치 선택 및 옵션 변경 허용</string>\n  <string name=\"patch_selection_safeguard_description\">패치를 선택하거나 선택 해제할 수 있고 옵션을 변경할 수 있습니다</string>\n  <string name=\"patch_selection_safeguard_confirmation\">패치 선택 목록을 변경하면 예상되지 않은 문제점이 발생할 수 있습니다.\n\n그래도 활성화하시겠습니까?</string>\n  <string name=\"universal_patches_safeguard\">유니버설 패치 사용 허용</string>\n  <string name=\"universal_patches_safeguard_description\">유니버설 패치를 사용할 수 있습니다</string>\n  <string name=\"universal_patches_safeguard_confirmation\">유니버설 패치는 특정 앱에 대한 패치만큼 테스트가 잘 되어 있지 않습니다.\n\n그래도 계속하시겠습니까?</string>\n  <string name=\"keystore\">키스토어</string>\n  <string name=\"patches_selections\">패치 선택 목록</string>\n  <string name=\"import_keystore\">키스토어 가져오기</string>\n  <string name=\"import_keystore_description\">사용자 정의 키스토어를 가져옵니다</string>\n  <string name=\"import_keystore_dialog_title\">키스토어 자격 증명 입력</string>\n  <string name=\"import_keystore_dialog_description\">키스토어를 가져오려면 키스토어의 자격 증명을 입력해야 합니다.</string>\n  <string name=\"import_keystore_dialog_alias_field\">사용자 이름 (별칭)</string>\n  <string name=\"import_keystore_dialog_password_field\">비밀번호</string>\n  <string name=\"import_keystore_dialog_button\">가져오기</string>\n  <string name=\"import_keystore_wrong_credentials\">잘못된 키스토어 자격 증명입니다</string>\n  <string name=\"import_keystore_success\">키스토어를 가져왔습니다</string>\n  <string name=\"export_keystore\">키스토어 내보내기</string>\n  <string name=\"export_keystore_description\">현재 사용되는 키스토어를 내보냅니다</string>\n  <string name=\"export_keystore_unavailable\">내보낼 수 있는 키스토어가 없습니다</string>\n  <string name=\"export_keystore_success\">키스토어를 내보냈습니다</string>\n  <string name=\"regenerate_keystore\">키스토어 재생성</string>\n  <string name=\"regenerate_keystore_description\">새 키스토어를 생성합니다</string>\n  <string name=\"regenerate_keystore_dialog_description\">매니저가 패치 과정 중에 사용하는 키스토어를 재생성합니다.\n\n기존 키스토어로 서명된 앱들은 업데이트할 수 없게 됩니다.</string>\n  <string name=\"regenerate_keystore_success\">키스토어를 성공적으로 교체하였습니다</string>\n  <string name=\"import_patch_selection\">패치 선택 목록 가져오기</string>\n  <string name=\"import_patch_selection_description\">패치 선택 목록을 JSON 파일에서 가져옵니다</string>\n  <string name=\"import_patch_selection_fail\">패치 선택 목록을 가져올 수 없습니다: %s</string>\n  <string name=\"import_patch_selection_success\">패치 선택 목록을 가져왔습니다</string>\n  <string name=\"select_bundle_for_import\">가져올 번들 선택</string>\n  <string name=\"export_patch_selection\">패치 선택 목록 내보내기</string>\n  <string name=\"export_patch_selection_description\">패치 선택 목록을 JSON 파일으로 내보냅니다</string>\n  <string name=\"export_patch_selection_fail\">패치 선택 목록을 내보낼 수 없습니다: %s</string>\n  <string name=\"export_patch_selection_success\">패치 선택 목록을 내보냈습니다</string>\n  <string name=\"select_bundle_for_export\">내보낼 번들 선택</string>\n  <string name=\"patch_selection_packages\">선택 목록이 저장된 앱</string>\n  <string name=\"patch_selection_entries\">총 선택된 패치</string>\n  <string name=\"reset_configuration\">설정 초기화</string>\n  <string name=\"reset_patch_selection\">패치 선택</string>\n  <string name=\"reset_patch_selection_description\">패치 선택 목록을 초기화합니다</string>\n  <string name=\"reset_patch_options\">패치 옵션</string>\n  <string name=\"reset_patch_options_description\">패치 옵션을 초기화합니다</string>\n  <string name=\"reset_patch_selection_success\">패치 선택 목록을 초기화하였습니다</string>\n  <string name=\"patch_selection_reset_all\">모든 패치 선택 목록 초기화</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">모든 패치 선택 목록을 초기화합니다. 각 패치를 직접 다시 선택해야 합니다.</string>\n  <string name=\"patch_selection_reset_all_description\">모든 패치 선택 목록을 초기화합니다</string>\n  <string name=\"patch_selection_reset_package\">앱 패치 선택 목록 초기화</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">\\'%s\\'에 대한 패치 선택 목록을 초기화합니다. 각 패치를 직접 다시 선택해야 합니다.</string>\n  <string name=\"patch_selection_reset_package_description\">단일 앱에 대한 패치 선택 목록을 초기화합니다</string>\n  <string name=\"patch_selection_reset_patches\">번들 패치 선택 목록 초기화</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">\\'%s\\'에 대한 패치 선택 목록을 초기화합니다. 각 패치를 직접 다시 선택해야 합니다.</string>\n  <string name=\"patch_selection_reset_patches_description\">단일 패치 번들에 대한 패치 선택 목록을 초기화합니다</string>\n  <string name=\"patch_options_reset_package\">앱 패치 옵션 초기화</string>\n  <string name=\"patch_options_reset_package_dialog_description\">\\'%s\\'에 대한 패치 옵션을 초기화합니다. 개별적으로 옵션을 다시 적용해야 합니다.</string>\n  <string name=\"patch_options_reset_package_description\">단일 앱에 대한 패치 옵션을 초기화합니다</string>\n  <string name=\"patch_options_reset_patches\">번들 패치 옵션 초기화</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">\\'%s\\'에 대한 패치 옵션을 초기화합니다. 개별적으로 옵션을 다시 적용해야 합니다.</string>\n  <string name=\"patch_options_reset_patches_description\">단일 패치 번들에 대한 패치 옵션을 초기화합니다</string>\n  <string name=\"patch_options_reset_all\">모든 패치 옵션 초기화</string>\n  <string name=\"patch_options_reset_all_dialog_description\">모든 패치 옵션을 초기화합니다. 개별적으로 옵션을 다시 적용해야 합니다.</string>\n  <string name=\"patch_options_reset_all_description\">모든 패치 옵션을 초기화합니다</string>\n  <string name=\"downloaders\">다운로더</string>\n  <string name=\"downloader_prereleases\">Pre-releases 버전 사용</string>\n  <string name=\"downloader_prereleases_description\">주요 다운로더의 Pre-release 버전을 사용합니다</string>\n  <string name=\"downloader_state_loaded\">로드됨</string>\n  <string name=\"downloader_state_failed\">불러올 수 없습니다. 자세한 내용을 보려면 여기를 탭하세요</string>\n  <string name=\"downloader_state_missing\">누락되었음</string>\n  <string name=\"downloader_delete_apps_title\">선택된 앱 삭제</string>\n  <string name=\"downloader_delete_apps_description\">선택된 앱을 삭제하시겠습니까?</string>\n  <string name=\"downloader_delete_single_description\">\\'%s\\'를 삭제하시겠습니까?</string>\n  <string name=\"downloader_settings_no_apps\">다운로드된 앱을 찾을 수 없습니다</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager를 통해 다운로드된 앱이 여기에 표시됩니다.</string>\n  <string name=\"downloader_url\">다운로더 URL</string>\n  <string name=\"downloader_add\">다운로더 추가</string>\n  <string name=\"select_downloader_type_dialog_description\">URL 또는 기기 파일에서 새 다운로더를 추가합니다</string>\n  <string name=\"local_downloaders_description\">기기 저장소에서 다운로더를 추가합니다.</string>\n  <string name=\"remote_downloaders_description\">URL에서 다운로더를 추가합니다. 자동으로 업데이트될 수 있습니다.</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager에서 앱을 직접 다운로드하려면 다운로더를 설치하세요.</string>\n  <string name=\"install_revanced_downloader\">ReVanced 다운로더 설치</string>\n  <string name=\"cancel_downloader_install_title\">다운로더 설치를 취소하시겠습니까?</string>\n  <string name=\"cancel_downloader_install_description\">다운로더 설치를 진행하는 중입니다. 지금 나가면 다운로드가 취소됩니다.</string>\n  <string name=\"downloader_sources_unavailable_title\">이 다운로더는 누락되었습니다</string>\n  <string name=\"downloader_sources_unavailable_description\">업데이트 버튼을 클릭하여 수정하세요.</string>\n  <string name=\"downloader_update_failed\">다운로더를 업데이트하지 못하였습니다: %s</string>\n  <string name=\"downloader_replace_fail\">다운로더를 가져오지 못하였습니다: %s</string>\n  <string name=\"search_apps\">앱 검색…</string>\n  <string name=\"loading_body\">불러오는 중…</string>\n  <string name=\"downloading_patches\">패치를 다운로드하는 중…</string>\n  <string name=\"options\">옵션</string>\n  <string name=\"ok\">확인</string>\n  <string name=\"yes\">예</string>\n  <string name=\"no\">아니요</string>\n  <string name=\"edit\">편집</string>\n  <string name=\"dialog_input_placeholder\">값</string>\n  <string name=\"reset\">초기화</string>\n  <string name=\"share\">공유</string>\n  <string name=\"patch\">패치</string>\n  <string name=\"select_from_storage\">기기 저장소에서 선택</string>\n  <string name=\"select_from_storage_description\">파일 선택기를 사용하여 기기 저장소에서 APK 파일을 선택할 수 있습니다</string>\n  <string name=\"suggested_version_info\">권장 버전: %s</string>\n  <string name=\"type_anything\">계속하려면 아무거나 입력하세요</string>\n  <string name=\"search\">패치 검색…</string>\n  <string name=\"apply\">적용</string>\n  <string name=\"help\">도움말</string>\n  <string name=\"back\">뒤로</string>\n  <string name=\"warning\">경고</string>\n  <string name=\"add\">추가</string>\n  <string name=\"enable\">활성화</string>\n  <string name=\"disable\">비활성화</string>\n  <string name=\"close\">닫기</string>\n  <string name=\"clear\">지우기</string>\n  <string name=\"system\">시스템</string>\n  <string name=\"light\">밝은</string>\n  <string name=\"dark\">어두운</string>\n  <string name=\"appearance\">디자인</string>\n  <string name=\"networking\">네트워크</string>\n  <string name=\"allow_metered_networks\">모바일 데이터 허용</string>\n  <string name=\"allow_metered_networks_description\">모바일 데이터를 사용 시 자동 업데이트를 허용합니다.\n    허용하지 않는다면 앱 사용 중에 모바일 데이터에 대한 경고 메시지가 표시될 수 있습니다</string>\n  <string name=\"downloaded_apps\">다운로드된 앱</string>\n  <string name=\"process_runtime\">다른 프로세스에서 패처 실행</string>\n  <string name=\"process_runtime_description\">별도 프로세스를 사용하여 패치 속도를 향상시킬 수 있습니다 (실험 기능)</string>\n  <string name=\"process_runtime_memory_limit\">패처 프로세스 메모리 제한</string>\n  <string name=\"process_runtime_memory_limit_description\">패처 프로세스가 사용 가능한 최대 메모리 용량을 지정할 수 있습니다</string>\n  <string name=\"debug_logs_export\">디버그 로그 내보내기</string>\n  <string name=\"debug_logs_export_read_failed\">로그를 읽을 수 없습니다 (종료 코드 %d)</string>\n  <string name=\"debug_logs_export_failed\">로그를 내보낼 수 없습니다</string>\n  <string name=\"debug_logs_export_success\">로그를 내보냈습니다</string>\n  <string name=\"api_url\">API URL</string>\n  <string name=\"api_url_description\">필요한 파일을 다운로드하는 데 사용되는 API를 설정할 수 있습니다</string>\n  <string name=\"api_url_dialog_title\">API URL 변경</string>\n  <string name=\"api_url_dialog_description\">ReVanced Manager의 API URL을 변경할 수 있습니다. ReVanced Manager는 API를 사용하여 패치 및 업데이트를 다운로드합니다.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager는 API를 연결하여 패치 및 업데이트를 다운로드할 수 있습니다. 변경하기 전에 신뢰할 수 있는 API인지 확인하세요.</string>\n  <string name=\"api_url_dialog_save\">설정</string>\n  <string name=\"api_url_dialog_reset\">API URL 초기화</string>\n  <string name=\"device\">기기</string>\n  <string name=\"device_android_version\">Android 버전</string>\n  <string name=\"device_model\">모델</string>\n  <string name=\"device_architectures\">CPU 아키텍처</string>\n  <string name=\"device_memory_limit\">메모리 제한</string>\n  <string name=\"device_memory_limit_format\">%1$d MB (일반) - %2$d MB (대용)</string>\n  <string name=\"patches_force_download\">모든 패치 번들 강제 다운로드</string>\n  <string name=\"patches_reset\">패치 번들 초기화</string>\n  <string name=\"reset_onboarding\">온보딩 초기화</string>\n  <string name=\"reset_onboarding_description\">다음 앱 실행 시 온보딩 화면을 표시합니다</string>\n  <string name=\"patching\">패치</string>\n  <string name=\"signing\">서명</string>\n  <string name=\"storage\">기기 저장소</string>\n  <string name=\"no_patch_found\">찾을 수 있는 패치가 없습니다. 패치를 확인하세요</string>\n  <string name=\"tab_apps\">앱</string>\n  <string name=\"tab_patches\">패치 번들</string>\n  <string name=\"delete\">삭제</string>\n  <string name=\"refresh\">새로고침</string>\n  <string name=\"continue_anyways\">계속</string>\n  <string name=\"download_another_version\">다른 버전을 다운로드하는 중</string>\n  <string name=\"download_app\">앱을 다운로드하는 중</string>\n  <string name=\"download_apk\">APK 파일을 다운로드하는 중</string>\n  <string name=\"patches_download_fail\">패치를 다운로드할 수 없습니다: %s</string>\n  <string name=\"api_not_working_title\">API 서비스가 현재 중단되어 있습니다</string>\n  <string name=\"api_not_working_description\">일부 기능에 영향을 받을 수 있습니다. 설정에서 연결 상태 또는 API URL을 확인하세요.</string>\n  <string name=\"patches_replace_fail\">패치를 가져올 수 없습니다: %s</string>\n  <string name=\"no_patched_apps_found\">패치된 앱을 찾을 수 없습니다</string>\n  <string name=\"no_patched_apps_description\">아직 패치된 앱이 없습니다. 첫 번째 앱을 패치해보세요!</string>\n  <string name=\"patched_apps_section_title\">패치된 앱</string>\n  <string name=\"patchable_apps_section_title\">패치 가능한 앱</string>\n  <string name=\"no_patches_found\">패치를 찾을 수 없습니다</string>\n  <string name=\"no_patches_description\">아직 패치가 없습니다. 아래 버튼을 탭하여 패치를 추가하세요!</string>\n  <string name=\"tap_on_patches\">자세한 정보를 확인하려면 패치를 탭하세요</string>\n  <string name=\"patches_selected\">%s 개 선택됨</string>\n  <string name=\"incompatible_patches\">호환되지 않는 패치</string>\n  <string name=\"universal_patches\">유니버설 패치</string>\n  <string name=\"patch_selection_reset_toast\">패치 선택 목록 및 옵션을 권장되는 기본값으로 초기화하였습니다</string>\n  <string name=\"patch_options_reset_toast\">패치 옵션을 초기화하였습니다</string>\n  <string name=\"non_suggested_version_warning_title\">권장되지 않는 버전</string>\n  <string name=\"non_suggested_version_warning_description\">선택된 버전이 권장 버전과 일치하지 않습니다.\n권장 버전을 사용하세요: %s\n\n계속하려면 고급 설정에서 \\\"권장 앱 버전 요구\\\"를 비활성화하세요.</string>\n  <string name=\"selection_warning_title\">기본값 사용을 중지하시겠습니까?</string>\n  <string name=\"selection_warning_description\">기본 패치 선택 목록 및 옵션을 사용하는 것이 좋습니다. 변경하면 예상되지 않은 문제점이 발생할 수 있습니다.\n\n패치를 전환하기 전에 고급 설정에서 \\\"패치 선택 및 옵션 변경 허용\\\"을 활성화해야 합니다.</string>\n  <string name=\"universal_patch_warning_description\">유니버설 패치는 더 일반적인 용도로 사용되므로 특정 앱을 대상으로 하는 패치만큼 안정적으로 작동하지 않습니다. 사용하면 문제점이 발생할 수 있습니다.\n\n유니버설 패치를 사용하기 전에 고급 설정에서 \\'유니버설 패치 사용 허용\\'을 활성화해야 합니다.</string>\n  <string name=\"this_version\">이 버전</string>\n  <string name=\"universal\">모든 앱</string>\n  <string name=\"search_patches\">패치 검색</string>\n  <string name=\"app_version_not_compatible\">이 패치는 선택된 앱 버전(%1$s)과 호환되지 않습니다.\n\n다음 앱 버전에만 호환됩니다: %2$s</string>\n  <string name=\"continue_with_version\">이 버전으로 계속하시겠습니까?</string>\n  <string name=\"version_not_compatible\">일부 패치가 이 버전(%s)과 호환되지 않습니다. 그래도 계속하시겠습니까?</string>\n  <string name=\"download_application\">애플리케이션을 다운로드하시겠습니까?</string>\n  <string name=\"app_not_installed\">선택된 앱이 설치되지 않았습니다. 다운로드하시겠습니까?</string>\n  <string name=\"failed_to_load_apk\">APK를 불러올 수 없습니다</string>\n  <string name=\"split_apk_not_supported\">분할 APK는 패치할 수 없습니다</string>\n  <string name=\"loading\">불러오는 중…</string>\n  <string name=\"not_installed\">설치되지 않음</string>\n  <string name=\"installed\">설치됨</string>\n  <string name=\"app_info\">앱 정보</string>\n  <string name=\"uninstall\">제거</string>\n  <string name=\"unpatch\">패치 해제</string>\n  <string name=\"repatch\">다시 패치</string>\n  <string name=\"install_type\">설치 유형</string>\n  <string name=\"package_name\">패키지 이름</string>\n  <string name=\"original_package_name\">원본 패키지 이름</string>\n  <string name=\"applied_patches\">적용된 패치</string>\n  <string name=\"view_applied_patches\">적용된 패치 보기</string>\n  <string name=\"default_install\">기본</string>\n  <string name=\"mount_install\">마운트</string>\n  <string name=\"mounted\">마운트됨</string>\n  <string name=\"not_mounted\">마운트되지 않음</string>\n  <string name=\"mount\">마운트</string>\n  <string name=\"unmount\">마운트 해제</string>\n  <string name=\"failed_to_mount\">마운트를 할 수 없습니다: %s</string>\n  <string name=\"failed_to_unmount\">마운트를 해제할 수 없습니다: %s</string>\n  <string name=\"unpatch_app\">앱을 패치 해제하시겠습니까?</string>\n  <string name=\"unpatch_description\">이 앱을 패치 해제하시겠습니까?</string>\n  <string name=\"downloader_invalid_version\">다운로더가 올바른 버전을 가져오지 못하였습니다</string>\n  <string name=\"downloader_app_not_found\">다운로더가 앱을 찾을 수 없습니다</string>\n  <string name=\"downloader_error\">다운로더 오류: %s</string>\n  <string name=\"no_downloaders_installed\">설치된 앱 다운로더가 없습니다!</string>\n  <string name=\"no_downloaders_trusted\">신뢰할 수 있는 앱 다운로더가 없습니다! 설정을 확인하세요.</string>\n  <string name=\"already_patched\">이미 패치됨</string>\n  <string name=\"patch_selector_sheet_filter_title\">필터</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">호환성</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">패키지</string>\n  <string name=\"patch_selector_sheet_actions_title\">동작</string>\n  <string name=\"restore_default_selection\">기본 선택 복원</string>\n  <string name=\"deselect_all\">모두 선택 해제</string>\n  <string name=\"invert_selection\">선택 반전</string>\n  <string name=\"deselect_all_except\">\\'%s\\'를 제외하고 모두 선택 해제</string>\n  <string name=\"scope_dialog_title\">적용 대상</string>\n  <string name=\"scope_all_patches\">모든 패치</string>\n  <string name=\"scope_bundle_patches\">%s 만</string>\n  <string name=\"string_option_menu_description\">더 많은 옵션</string>\n  <string name=\"option_preset_custom_value\">사용자 정의 값</string>\n  <string name=\"path_selector\">기기 저장소에서 선택</string>\n  <string name=\"path_selector_parent_dir\">이전 디렉터리</string>\n  <string name=\"path_selector_dirs\">디렉터리</string>\n  <string name=\"path_selector_files\">파일</string>\n  <string name=\"show_password_field\">비밀번호 표시</string>\n  <string name=\"hide_password_field\">비밀번호 숨기기</string>\n  <string name=\"installer\">설치 프로그램</string>\n  <string name=\"install_app\">설치</string>\n  <string name=\"install_app_success\">앱을 설치하였습니다</string>\n  <string name=\"install_app_fail\">앱을 설치할 수 없습니다: %s</string>\n  <string name=\"reinstall_app_fail\">앱을 다시 설치할 수 없습니다: %s</string>\n  <string name=\"uninstall_app_fail\">앱을 제거할 수 없습니다: %s</string>\n  <string name=\"open_app\">열기</string>\n  <string name=\"save_apk\">APK 저장</string>\n  <string name=\"save_apk_success\">APK를 저장하였습니다</string>\n  <string name=\"sign_fail\">APK 서명을 할 수 없습니다: %s</string>\n  <string name=\"save_logs\">로그 저장</string>\n  <string name=\"save_as_file\">파일에 저장</string>\n  <string name=\"export_patcher_logs\">패처 로그 내보내기</string>\n  <string name=\"save_logs_success\">로그 저장됨</string>\n  <string name=\"downloader_activity_dialog_body\">이 다운로더를 계속 사용하려면 사용자 상호작용이 필요합니다.</string>\n  <string name=\"select_install_type\">설치 유형 선택</string>\n  <string name=\"patcher_step_group_preparing\">준비하는 중</string>\n  <string name=\"patcher_step_load_patches\">패치를 불러오는 중</string>\n  <string name=\"patcher_step_unpack\">패처 준비</string>\n  <string name=\"patcher_step_group_patching\">패치하는 중</string>\n  <string name=\"patcher_step_group_saving\">저장하는 중</string>\n  <string name=\"patcher_step_write_patched\">패치된 APK 파일을 작성하는 중</string>\n  <string name=\"patcher_step_sign_apk\">패치된 APK 파일에 서명하는 중</string>\n  <string name=\"patcher_notification_title\">패치 진행하는 중…</string>\n  <string name=\"patcher_notification_text\">탭하여 패처로 돌아가기</string>\n  <string name=\"patcher_stop_confirm_title\">패처 중지</string>\n  <string name=\"patcher_stop_confirm_description\">패치 프로세스를 중지하시겠습니까?</string>\n  <string name=\"patcher_install_in_progress\">설치가 진행 중입니다. 잠시만 기다리세요</string>\n  <string name=\"execute_patches\">패치를 실행하는 중</string>\n  <string name=\"executing_patch\">%s</string>\n  <string name=\"failed_to_execute_patch\">\\'%s\\'을 실행할 수 없습니다</string>\n  <string name=\"step_completed\">완료하였습니다</string>\n  <string name=\"step_failed\">실패하였습니다</string>\n  <string name=\"step_running\">실행하는 중</string>\n  <string name=\"step_waiting\">기다리는 중</string>\n  <string name=\"expand_content\">펼치기</string>\n  <string name=\"collapse_content\">접기</string>\n  <string name=\"drag_handle\">다시 정렬</string>\n  <string name=\"more\">더보기</string>\n  <string name=\"less\">접기</string>\n  <string name=\"continue_\">계속</string>\n  <string name=\"dismiss\">닫기</string>\n  <string name=\"view_announcement\">공지사항 보기</string>\n  <string name=\"permanent_dismiss\">다시 보지 않기</string>\n  <string name=\"donate\">후원</string>\n  <string name=\"website\">웹사이트</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">문의</string>\n  <string name=\"license\">라이선스</string>\n  <string name=\"source\">소스</string>\n  <string name=\"repository\">저장소</string>\n  <string name=\"bundle_information_by_author\">개발자: %1$s</string>\n  <string name=\"version\">버전</string>\n  <string name=\"version_compatibility_warning\">선택된 버전은 선택된 패치와 호환되지 않을 수 있습니다</string>\n  <string name=\"submit_feedback\">문제점 또는 피드백 제출</string>\n  <string name=\"submit_feedback_description\">이 애플리케이션을 개선하는 데 도움을 주세요</string>\n  <string name=\"developer_options\">개발자 옵션</string>\n  <string name=\"developer_options_description\">디버그 옵션</string>\n  <string name=\"patches_update_success\">업데이트를 성공하였습니다</string>\n  <string name=\"patches_update_unavailable\">새 업데이트가 없습니다</string>\n  <string name=\"view_patches\">패치 목록을 자세하게 확인할 수 있습니다</string>\n  <string name=\"patches_view_any_version\">모든 버전</string>\n  <string name=\"patches_view_any_package\">모든 패키지</string>\n  <string name=\"patches_delete_single_dialog_description\">\\'%s\\'를 삭제하시겠습니까?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">선택된 패치를 삭제하시겠습니까?</string>\n  <string name=\"announcements\">공지사항</string>\n  <string name=\"archive\">보관</string>\n  <string name=\"about_revanced_manager\">ReVanced Manager에 대한 정보</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager는 ReVanced Patcher를 사용하여 Android 앱을 패치하는 Android 애플리케이션입니다. 사용자 정의 패치를 사용하여 앱을 다운로드 및 패치하고 패치 프로세스를 관리할 수 있습니다.</string>\n  <string name=\"developer_options_taps\">%d 번 더 탭해야 합니다</string>\n  <string name=\"developer_options_enabled\">개발자 옵션을 활성화하였습니다</string>\n  <string name=\"developer_options_already_enabled\">개발자 옵션이 이미 활성화되어 있습니다</string>\n  <string name=\"update_available\">업데이트 사용 가능</string>\n  <string name=\"current_version\">현재 버전: %s</string>\n  <string name=\"new_version\">새 버전: %s</string>\n  <string name=\"ready_to_install_update\">업데이트 설치 준비 완료</string>\n  <string name=\"update_completed\">업데이트하였습니다</string>\n  <string name=\"install_update_manager_failed\">업데이트를 할 수 없습니다</string>\n  <string name=\"manual_update_check\">업데이트 확인</string>\n  <string name=\"view_update\">업데이트 보기</string>\n  <string name=\"manual_update_check_description\">수동으로 업데이트를 확인할 수 있습니다</string>\n  <string name=\"update_checking_manager\">실행 시 업데이트 확인</string>\n  <string name=\"update_checking_manager_description\">앱 실행 시 ReVanced Manager의 새 버전을 확인합니다</string>\n  <string name=\"update_checking_downloader\">실행 시 ReVanced 다운로더 업데이트 확인</string>\n  <string name=\"update_checking_downloader_description\">앱 시작 시 설치된 ReVanced 다운로더의 업데이트를 확인합니다</string>\n  <string name=\"manager_prereleases\">Pre-releases 버전 사용</string>\n  <string name=\"manager_prereleases_description\">ReVanced Manager의 Pre-release 버전을 사용합니다</string>\n  <string name=\"prereleases_warning\">Pre-release 버전은 불안정할 수 있으며 버그가 포함될 수 있습니다. 앱 충돌, 데이터 손실 또는 그 외의 예상되지 않은 문제가 발생할 수 있습니다. 이러한 위험을 감수할 수 있는 경우에만 활성화하세요.</string>\n  <string name=\"changelog\">변경 사항 보기</string>\n  <string name=\"changelog_loading\">변경 사항을 불러오는 중</string>\n  <string name=\"changelog_download_fail\">변경 사항을 다운로드할 수 없습니다: %s</string>\n  <string name=\"changelog_description\">이 업데이트의 최신 변경 사항을 확인할 수 있습니다</string>\n  <string name=\"battery_optimization_notification\">ReVanced Manager가 백그라운드에서 정상적으로 작동하려면 배터리 최적화를 비활성화해야 합니다. 배터리 최적화를 비활성화하려면 여기를 탭하세요.</string>\n  <string name=\"installing_manager_update\">업데이트를 설치하는 중…</string>\n  <string name=\"downloading_manager_update\">업데이트를 다운로드하는 중…</string>\n  <string name=\"download_manager_failed\">업데이트를 다운로드할 수 없습니다: %s</string>\n  <string name=\"cancel\">취소</string>\n  <string name=\"save\">저장</string>\n  <string name=\"save_with_count\">저장 (%1$s)</string>\n  <string name=\"update\">업데이트</string>\n  <string name=\"empty\">비어있음</string>\n  <string name=\"installing_message\">요청 메시지가 표시되면 <b>업데이트</b>를 탭하세요.\n업데이트가 진행되면 ReVanced Manager가 종료됩니다.</string>\n  <string name=\"no_changelogs_found\">변경 로그를 찾을 수 없습니다</string>\n  <string name=\"just_now\">방금</string>\n  <string name=\"minutes_ago\">%s분 전</string>\n  <string name=\"hours_ago\">%s시간 전</string>\n  <string name=\"days_ago\">%s일 전</string>\n  <string name=\"invalid_date\">잘못된 날짜</string>\n  <string name=\"disable_battery_optimization\">배터리 최적화 비활성화</string>\n  <string name=\"input_dialog_value_invalid\">잘못된 값</string>\n  <string name=\"option_required\">이 옵션은 필수입니다</string>\n  <string name=\"required_options_screen\">필수 옵션</string>\n  <string name=\"failed_to_check_updates\">업데이트를 확인할 수 없습니다: %s</string>\n  <string name=\"no_update_available\">새 업데이트가 없습니다</string>\n  <string name=\"no_announcements_found\">공지사항을 찾을 수 없습니다</string>\n  <string name=\"update_check\">업데이트 확인하는 중…</string>\n  <string name=\"dismiss_temporary\">나중에</string>\n  <string name=\"update_available_dialog_description\">ReVanced Manager의 새 버전(%s)을 사용할 수 있습니다.</string>\n  <string name=\"failed_to_download_update\">업데이트를 다운로드할 수 없습니다: %s</string>\n  <string name=\"download\">다운로드</string>\n  <string name=\"download_confirmation_metered\">현재 모바일 데이터를 사용 중입니다. 통신사 데이터 요금이 부과될 수 있습니다.\n\n그래도 계속하시겠습니까?</string>\n  <string name=\"download_update_confirmation\">업데이트를 다운로드하시겠습니까?</string>\n  <string name=\"no_contributors_found\">도움을 주신 분들을 찾을 수 없습니다</string>\n  <string name=\"select\">선택</string>\n  <string name=\"select_deselect_all\">모두 선택 또는 선택 해제</string>\n  <string name=\"select_patches_type_dialog_description\">URL 또는 기기 파일에서 새 패치 번들을 추가합니다</string>\n  <string name=\"local_patches_description\">기기 저장소에서 패치 번들을 추가합니다.</string>\n  <string name=\"remote_patches_description\">URL에서 패치 번들을 추가합니다. 패치 번들은 자동으로 업데이트될 수 있습니다.</string>\n  <string name=\"recommended\">권장</string>\n  <string name=\"installation_failed_dialog_title\">설치 실패</string>\n  <string name=\"installation_cancelled_dialog_title\">설치가 취소됨</string>\n  <string name=\"installation_blocked_dialog_title\">설치가 차단됨</string>\n  <string name=\"installation_conflict_dialog_title\">설치가 충돌함</string>\n  <string name=\"installation_incompatible_dialog_title\">설치가 호환되지 않음</string>\n  <string name=\"installation_invalid_dialog_title\">설치가 유효하지 않음</string>\n  <string name=\"installation_storage_issue_dialog_title\">기기 저장소 공간이 부족함</string>\n  <string name=\"installation_timeout_dialog_title\">설치 시간이 초과됨</string>\n  <string name=\"installation_failed_description\">알 수 없는 이유로 인하여 설치할 수 없습니다. 다시 시도하시겠습니까?</string>\n  <string name=\"installation_aborted_description\">설치를 수동으로 취소하였습니다. 다시 시도하시겠습니까?</string>\n  <string name=\"installation_blocked_description\">설치가 차단되었습니다. 기기 보안 설정을 검토하고 다시 시도하세요.</string>\n  <string name=\"installation_conflict_description\">설치가 앱의 기존 설치로 인하여 차단되었습니다. 설치된 앱을 제거하고 다시 시도하시겠습니까?</string>\n  <string name=\"installation_incompatible_description\">앱이 이 기기와 호환되지 않습니다. 이 기기와 호환되는 APK를 사용하고 다시 시도하세요.</string>\n  <string name=\"installation_invalid_description\">앱이 잘못되었습니다. 앱을 제거하고 다시 시도하시겠습니까?</string>\n  <string name=\"installation_storage_issue_description\">기기 저장소 공간이 부족하여 앱을 설치할 수 없습니다. 여유 공간을 확보하고 다시 시도하세요.</string>\n  <string name=\"installation_timeout_description\">설치하는 데 시간이 너무 오래 걸렸습니다. 다시 시도하시겠습니까?</string>\n  <string name=\"reinstall\">다시 설치</string>\n  <string name=\"show\">보기</string>\n  <string name=\"debugging\">디버그</string>\n  <string name=\"about_device\">기기 정보</string>\n  <string name=\"enter_url\">URL 입력</string>\n  <string name=\"next\">다음</string>\n  <string name=\"auto_update\">자동 업데이트</string>\n  <string name=\"add_patches\">패치 번들 추가</string>\n  <string name=\"auto_update_description\">새 버전이 릴리스되었을 경우에 자동으로 업데이트합니다</string>\n  <string name=\"patches_prereleases\">Pre-releases 버전 사용</string>\n  <string name=\"patches_prereleases_description\">\\'%s\\'의 Pre-releases 버전을 사용합니다</string>\n  <string name=\"patches_url\">패치 번들 URL</string>\n  <string name=\"incompatible_patches_dialog\">이 패치는 선택된 앱 버전(%1$s)과 호환되지 않습니다.\n\n자세한 정보를 보려면 패치를 탭하세요.</string>\n  <string name=\"incompatible_patch\">호환되지 않는 패치</string>\n  <string name=\"any_version\">모든 앱 버전</string>\n  <string name=\"never_show_again\">다시 보지 않기</string>\n  <string name=\"show_manager_update_dialog_on_launch\">실행 시 업데이트 메시지 표시</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">앱 실행 시 새 업데이트가 있을 때마다 팝업 메시지를 표시합니다</string>\n  <string name=\"failed_to_import_keystore\">키스토어를 가져올 수 없습니다</string>\n  <string name=\"export\">내보내기</string>\n  <string name=\"confirm\">확인</string>\n  <string name=\"new_announcement\">새 공지사항:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"other\">%d 개의 패치</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"other\">%d 개의 패치 실행</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"other\">%d 개 선택됨</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ky-rKG/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">Патчер</string>\n  <string name=\"onboarding_welcome_to\">Кош келиңиз</string>\n  <string name=\"onboarding_welcome_back\">Салам! Бул жаңы</string>\n  <string name=\"onboarding_apps_subtitle\">Колдонмону азыр жамаачылоо үчүн тандасаңыз болот же кийинчерээк жасай аласыз</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager жана жамаачыларды жаңыртып туруу үчүн автоматтык жаңыртууларды конфигурациялаңыз</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager түзмөгүңүз интернетке туташкан болсо, баштапкы версияларды жүктөп алуу үчүн %s менен байланышат.</string>\n  <string name=\"retry\">Кайра аракет кылуу</string>\n  <string name=\"onboarding_skip\">Азырынча өткөрүп жиберүү</string>\n  <string name=\"onboarding_recommended_version\">Сунушталган версия: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Уруксаттарды өткөрүп жибересизби?</string>\n  <string name=\"onboarding_permissions_skip_description\">Талап кылынган уруксаттарсыз кээ бир функциялар туура иштебей калышы мүмкүн. Аларды кийинчерээк колдонмо жөндөөлөрүнөн бере аласыз.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Баары бир өткөрүп жиберүү</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager туура иштеши үчүн бир нече уруксаттар керек.</string>\n  <string name=\"permission_install_apps\">Белгисиз колдонмолорду орнотуу</string>\n  <string name=\"permission_install_apps_description\">Оңдолгон колдонмолорду орнотуу үчүн талап кылынат</string>\n  <string name=\"permission_notifications\">Эскертмелер</string>\n  <string name=\"permission_battery\">Батареяны оптималдаштыруу</string>\n  <string name=\"permission_battery_description\">Фондо оңдоонун үзгүлтүккө учурашына жол бербейт</string>\n  <string name=\"permission_grant\">Уруксат берүү</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager жүктөп алуучу хосту</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager жүктөп алуучуларына кирүү мүмкүнчүлүгүн башкаруу үчүн колдонулат. Бул ReVanced Manager гана бар.</string>\n  <string name=\"fab_patch_app\">Колдонмону оңдоо</string>\n  <string name=\"fab_add_patches\">Оңдоолорду кошуу</string>\n  <string name=\"new_downloader_notification\">Жаңы жүктөгүч(төр) жеткиликтүү. Аларды конфигурациялоо үчүн бул жерди басыңыз.</string>\n  <string name=\"patches_not_downloaded\">Жамаачылар жүктөлгөн жок.</string>\n  <string name=\"app_source_dialog_option_auto_description\">Орнотулган колдонмону колдонуу, андан кийин жүктөлүп алынган APK, андан кийин жеткиликтүү жүктөөчүлөр</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Шайкеш колдонмо же жүктөөчү табылган жок</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Орнотулган колдонмолорду root мүмкүнчүлүгүсүз кайра оңдоого болбойт</string>\n  <string name=\"patch_selector_item\">Оңдоолорду тандоо</string>\n  <string name=\"patch_selector_item_description\">%d оңдоо тандалды</string>\n  <string name=\"patch_selection_changed_warning\">Жамаачылардын тандоосу өзгөртүлдү.</string>\n  <string name=\"apk_source_selector_item\">APK булагын тандоо</string>\n  <string name=\"apk_source_auto\">Автоматтык</string>\n  <string name=\"apk_source_auto_installed\">Автоматтык · Орнотулган APK колдонуу</string>\n  <string name=\"apk_source_auto_downloaded\">Автоматтык · Жүктөлүп алынган APK колдонуу</string>\n  <string name=\"apk_source_auto_downloader\">Авто · Жеткиликтүү жүктөөчүлөрдү колдонуу</string>\n  <string name=\"apk_source_auto_storage\">Авто · Сактагычтан тандоо</string>\n  <string name=\"apk_source_downloaded\">Буга чейин жүктөлгөн</string>\n  <string name=\"auto_updates_dialog_description\">ReVanced Manager\\'дын төмөнкү компоненттер үчүн жаңыртууларды мезгил-мезгили менен текшеришин каалайсызбы?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Патчтары</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Жүктөөчүлөр</string>\n  <string name=\"auto_updates_dialog_note\">Бул жөндөөлөрдү кийинчерээк өзгөртсө болот.\n\n    ReVanced Manager түзмөгүңүз интернетке туташкан болсо, баштапкы версияларды жүктөп алуу үчүн %s менен байланышат.</string>\n  <string name=\"announcements_filter_tag\">Тег боюнча чыпкалоо</string>\n  <string name=\"announcements_show_archived\">Архивделгендерди көрсөтүү</string>\n  <string name=\"updates_description\">Жаңыртууларды текшерүү жана өзгөрүүлөр журналын көрүү</string>\n  <string name=\"downloads_description\">Жүктөөчүлөр жана жүктөлүп алынган колдонмолор</string>\n  <string name=\"safeguards_toggled_warning\">Коопсуздук чаралары которулду.</string>\n  <string name=\"about_app_name\">%1$s жөнүндө</string>\n  <string name=\"search_languages\">Тилдерди издөө…</string>\n  <string name=\"keystore\">Ачкыч сактагыч</string>\n  <string name=\"patches_selections\">Патчтарды тандоолор</string>\n  <string name=\"select_bundle_for_import\">Импорттоо үчүн топтомду тандаңыз</string>\n  <string name=\"select_bundle_for_export\">Экспорттоо үчүн топтомду тандаңыз</string>\n  <string name=\"patch_selection_packages\">Сакталган тандоолору бар колдонмолор</string>\n  <string name=\"patch_selection_entries\">Бардык тандалган патчтар</string>\n  <string name=\"reset_configuration\">Конфигурацияны баштапкы абалга келтирүү</string>\n  <string name=\"reset_patch_selection\">Патч тандоолору</string>\n  <string name=\"reset_patch_options\">Патч параметрлери</string>\n  <string name=\"downloaders\">Жүктөөчүлөр</string>\n  <string name=\"downloader_prereleases\">Алдын ала чыгарылгандарды колдонуу</string>\n  <string name=\"downloader_prereleases_description\">Негизги жүктөгүчтүн алдын ала чыгарылган версияларын колдонуу</string>\n  <string name=\"downloader_state_loaded\">Жүктөлдү</string>\n  <string name=\"downloader_state_failed\">Жүктөлбөй калды. Көбүрөөк маалымат алуу үчүн басыңыз</string>\n  <string name=\"downloader_state_missing\">Жок</string>\n  <string name=\"downloader_delete_apps_title\">Тандалган колдонмолорду жок кылуу</string>\n  <string name=\"downloader_delete_apps_description\">Тандалган колдонмолорду жок кылгыңыз келеби?</string>\n  <string name=\"downloader_delete_single_description\">\\\"%s\\\" файлын чындап эле жок кылгыңыз келеби?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager аркылуу жүктөлгөн колдонмолор бул жерде пайда болот.</string>\n  <string name=\"downloader_url\">Жүктөөчү URL</string>\n  <string name=\"downloader_add\">Жүктөөчүнү кошуу</string>\n  <string name=\"select_downloader_type_dialog_description\">Жаңы жүктөөчүлөрдү URL же жергиликтүү файлдардан кошуу</string>\n  <string name=\"local_downloaders_description\">Жүктөөчүлөрдү жергиликтүү сактагычтан кошуу.</string>\n  <string name=\"remote_downloaders_description\">Жүктөөчүлөрдү URL аркылуу кошуу. Автоматтык түрдө жаңыртылышы мүмкүн.</string>\n  <string name=\"install_revanced_downloaders\">Колдонмолорду ReVanced Manager ичинен түз алуу үчүн жүктөгүчтөрдү орнотуңуз.</string>\n  <string name=\"install_revanced_downloader\">ReVanced Жүктөгүчтөрүн орнотуу</string>\n  <string name=\"cancel_downloader_install_title\">Жүктөгүчтөрдү орнотууну жокко чыгарасызбы?</string>\n  <string name=\"cancel_downloader_install_description\">Жүктөгүчтөрдү орнотуу жүрүп жатат. Эгер азыр чыгып кетсеңиз, жүктөө жокко чыгарылат.</string>\n  <string name=\"downloader_sources_unavailable_title\">Бул жүктөөчүлөр жок</string>\n  <string name=\"downloader_sources_unavailable_description\">Оңдоо үчүн жаңыртуу баскычын басыңыз.</string>\n  <string name=\"downloader_update_failed\">Жүктөөчүнү жаңыртуу ишке ашкан жок: %s</string>\n  <string name=\"downloader_replace_fail\">Жүктөөчүнү импорттоо ишке ашкан жок: %s</string>\n  <string name=\"select_from_storage_description\">Файл тандоочуну колдонуп, сактагычтан APK файлын тандаңыз</string>\n  <string name=\"enable\">Иштетүү</string>\n  <string name=\"disable\">Өчүрүү</string>\n  <string name=\"process_runtime_memory_limit_description\">Патчер процесси колдоно ала турган максималдуу эс тутум</string>\n  <string name=\"reset_onboarding\">Киришүүнү баштапкы абалга келтирүү</string>\n  <string name=\"reset_onboarding_description\">Кийинки колдонмо ишке киргизилгенде киришүү экранын көрсөтүү</string>\n  <string name=\"api_not_working_title\">API кызматы учурда иштебей турат</string>\n  <string name=\"api_not_working_description\">Кээ бир функциялар иштебей калышы мүмкүн. Жөндөөлөрдөн байланышыңызды же API URL\\'ин текшериңиз.</string>\n  <string name=\"no_patched_apps_found\">Оңдолгон колдонмолор табылган жок</string>\n  <string name=\"no_patched_apps_description\">Учурда сиздин оңдолгон колдонмолоруңуз жок. Биринчи колдонмоңузду оңдоо менен муну өзгөртүңүз!</string>\n  <string name=\"patched_apps_section_title\">Оңдолгон колдонмолор</string>\n  <string name=\"patchable_apps_section_title\">Оңдолсо боло турган колдонмолор</string>\n  <string name=\"no_patches_found\">Патчтар табылган жок</string>\n  <string name=\"no_patches_description\">Сизде азырынча патчтар жок. Төмөндөгү баскычты басып, патчтарды кошуңуз!</string>\n  <string name=\"split_apk_not_supported\">Бөлүнгөн APK жамап болбойт</string>\n  <string name=\"no_downloaders_installed\">Эч кандай колдонмо жүктөгүчтөр орнотулган эмес!</string>\n  <string name=\"no_downloaders_trusted\">Эч кандай колдонмо жүктөгүчтөргө ишеним берилген эмес! Жөндөөлөрүңүздү текшериңиз.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Пакеттер</string>\n  <string name=\"patch_selector_sheet_actions_title\">Аракеттер</string>\n  <string name=\"restore_default_selection\">Демейки тандоону калыбына келтирүү</string>\n  <string name=\"deselect_all\">Баарын тандоодон алып салуу</string>\n  <string name=\"invert_selection\">Тандоону инвертирлөө</string>\n  <string name=\"deselect_all_except\">Баарын тандоодон алып салуу, %s\\'дан башкасын</string>\n  <string name=\"scope_dialog_title\">Колдонуу</string>\n  <string name=\"scope_all_patches\">Бардык оңдоолор</string>\n  <string name=\"scope_bundle_patches\">%s гана</string>\n  <string name=\"save_as_file\">Файлдарды сактоо</string>\n  <string name=\"export_patcher_logs\">Патчер журналдарын экспорттоо</string>\n  <string name=\"save_logs_success\">Журналдар сакталды</string>\n  <string name=\"downloader_activity_dialog_body\">Бул жүктөөчү менен улантуу үчүн колдонуучунун аракети талап кылынат.</string>\n  <string name=\"patcher_step_unpack\">Патчерди даярдоо</string>\n  <string name=\"view_announcement\">Жарыяны көрүү</string>\n  <string name=\"license\">Лицензия</string>\n  <string name=\"source\">Булак</string>\n  <string name=\"repository\">Репозиторий</string>\n  <string name=\"bundle_information_by_author\">%1$s тарабынан</string>\n  <string name=\"version_compatibility_warning\">Тандалган версия тандалган патчтар менен шайкеш келбеши мүмкүн.</string>\n  <string name=\"announcements\">Жарыялар</string>\n  <string name=\"archive\">Архив</string>\n  <string name=\"view_update\">Жаңыртууну көрүү</string>\n  <string name=\"update_checking_downloader\">Ишке киргизүүдө ReVanced Жүктөгүчтөрүнүн жаңыртууларын текшерүү</string>\n  <string name=\"update_checking_downloader_description\">Колдонмо башталганда орнотулган ReVanced Жүктөгүчтөрүнүн жаңыртууларын текшерүү</string>\n  <string name=\"prereleases_warning\">Алдын ала чыгарылган версиялар туруксуз болуп, мүчүлүштүктөрдү камтышы мүмкүн. Сиз колдонмонун иштебей калышын, маалыматтардын жоголушун же башка күтүлбөгөн көйгөйлөрдү баштан кечиришиңиз мүмкүн. Бул тобокелдиктерге даяр болсоңуз гана муну иштетиңиз.</string>\n  <string name=\"changelog\">Өзгөрүүлөр журналын көрүү</string>\n  <string name=\"no_announcements_found\">Жарыялар табылган жок</string>\n  <string name=\"new_announcement\">Жаңы жарыя:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d патч</item>\n    <item quantity=\"other\">%d патч</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d патч аткаруу</item>\n    <item quantity=\"other\">%d патчты аткаруу</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d тандалган</item>\n    <item quantity=\"other\">%d тандалган</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-lo-rLA/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">ຕົວແກ້ໄຂ</string>\n  <string name=\"onboarding_welcome_to\">ຍິນດີຕ້ອນຮັບສູ່</string>\n  <string name=\"onboarding_welcome_back\">ສະບາຍດີ! ນີ້ແມ່ນໃໝ່</string>\n  <string name=\"onboarding_apps_subtitle\">ທ່ານສາມາດເລືອກແອັບເພື່ອແພັດຕອນນີ້ ຫຼື ເຮັດພາຍຫຼັງໄດ້</string>\n  <string name=\"onboarding_updates_subtitle\">ຕັ້ງຄ່າການອັບເດດອັດຕະໂນມັດເພື່ອໃຫ້ ReVanced Manager ແລະ ແພັດຕ່າງໆທັນສະໄໝຢູ່ສະເໝີ</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager ຈະເຊື່ອມຕໍ່ກັບ %s ເພື່ອດາວໂຫລດເວີຊັນເລີ່ມຕົ້ນ ຖ້າອຸປະກອນຂອງທ່ານເຊື່ອມຕໍ່ອິນເຕີເນັດ.</string>\n  <string name=\"retry\">ລອງໃໝ່</string>\n  <string name=\"onboarding_skip\">ຂ້າມໄປກ່ອນ</string>\n  <string name=\"onboarding_recommended_version\">ເວີຊັນທີ່ແນະນຳ: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">ຂ້າມການອະນຸຍາດບໍ?</string>\n  <string name=\"onboarding_permissions_skip_description\">ຖ້າບໍ່ມີການອະນຸຍາດທີ່ຈຳເປັນ, ບາງຄຸນສົມບັດອາດຈະເຮັດວຽກບໍ່ຖືກຕ້ອງ. ທ່ານສາມາດໃຫ້ສິດອະນຸຍາດໄດ້ໃນພາຍຫຼັງໃນການຕັ້ງຄ່າແອັບ.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">ຂ້າມໄປເລີຍ</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager ຕ້ອງການການອະນຸຍາດສອງສາມຢ່າງເພື່ອເຮັດວຽກຢ່າງຖືກຕ້ອງ</string>\n  <string name=\"permission_install_apps\">ຕິດຕັ້ງແອັບທີ່ບໍ່ຮູ້ຈັກ</string>\n  <string name=\"permission_install_apps_description\">ຈຳເປັນສຳລັບການຕິດຕັ້ງແອັບພລິເຄຊັນທີ່ແພັດແລ້ວ</string>\n  <string name=\"permission_notifications\">ການແຈ້ງເຕືອນ</string>\n  <string name=\"permission_battery\">ການເພີ່ມປະສິດທິພາບແບັດເຕີຣີ</string>\n  <string name=\"permission_battery_description\">ປ້ອງກັນບໍ່ໃຫ້ການແພັດຖືກຂັດຈັງຫວະໃນພື້ນຫຼັງ</string>\n  <string name=\"permission_grant\">ອະນຸຍາດ</string>\n  <string name=\"downloader_host_permission_label\">ໂຮສດາວໂຫຼດ ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">ໃຊ້ເພື່ອຄວບຄຸມການເຂົ້າເຖິງຕົວດາວໂຫຼດ ReVanced Manager. ມີພຽງ ReVanced Manager ເທົ່ານັ້ນທີ່ມີສິ່ງນີ້.</string>\n  <string name=\"fab_patch_app\">ແພັດແອັບ</string>\n  <string name=\"fab_add_patches\">ເພີ່ມແພັດ</string>\n  <string name=\"new_downloader_notification\">ມີຕົວດາວໂຫລດໃໝ່. ຄລິກທີ່ນີ້ເພື່ອຕັ້ງຄ່າພວກມັນ.</string>\n  <string name=\"patches_not_downloaded\">ບໍ່ໄດ້ດາວໂຫລດແພັດ.</string>\n  <string name=\"app_source_dialog_option_auto_description\">ໃຊ້ແອັບທີ່ຕິດຕັ້ງແລ້ວ, ແລ້ວ APK ທີ່ດາວໂຫລດມາ, ແລ້ວຕົວດາວໂຫລດທີ່ມີຢູ່</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">ບໍ່ພົບແອັບ ຫຼື ຕົວດາວໂຫລດທີ່ເຂົ້າກັນໄດ້</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">ແອັບທີ່ຕິດຕັ້ງແລ້ວບໍ່ສາມາດແກ້ໄຂໄດ້ອີກໂດຍບໍ່ມີການເຂົ້າເຖິງແບບຮູທ</string>\n  <string name=\"patch_selector_item\">ເລືອກແພັດ</string>\n  <string name=\"patch_selector_item_description\">ເລືອກ %d ແພັດ</string>\n  <string name=\"patch_selection_changed_warning\">ການເລືອກແພັດໄດ້ຖືກປ່ຽນແປງ</string>\n  <string name=\"apk_source_selector_item\">ເລືອກແຫຼ່ງ APK</string>\n  <string name=\"apk_source_auto\">ອັດຕະໂນມັດ</string>\n  <string name=\"apk_source_auto_installed\">ອັດຕະໂນມັດ · ໃຊ້ APK ທີ່ຕິດຕັ້ງແລ້ວ</string>\n  <string name=\"apk_source_auto_downloaded\">ອັດຕະໂນມັດ · ໃຊ້ APK ທີ່ດາວໂຫລດມາ</string>\n  <string name=\"apk_source_auto_downloader\">ອັດຕະໂນມັດ · ໃຊ້ຕົວດາວໂຫລດທີ່ມີຢູ່ແລ້ວ</string>\n  <string name=\"apk_source_auto_storage\">ອັດຕະໂນມັດ · ເລືອກຈາກບ່ອນເກັບຂໍ້ມູນ</string>\n  <string name=\"apk_source_downloaded\">ດາວໂຫລດແລ້ວ</string>\n  <string name=\"auto_updates_dialog_description\">ທ່ານຕ້ອງການໃຫ້ ReVanced Manager ກວດສອບການອັບເດດເປັນໄລຍະສໍາລັບສ່ວນປະກອບຕໍ່ໄປນີ້ບໍ?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ແພັດ ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: ເຄື່ອງດາວໂຫລດ</string>\n  <string name=\"auto_updates_dialog_note\">ການຕັ້ງຄ່າເຫຼົ່ານີ້ສາມາດປ່ຽນແປງໄດ້ພາຍຫຼັງ.\n\n    ReVanced Manager ຈະເຊື່ອມຕໍ່ກັບ %s ເພື່ອດາວໂຫລດເວີຊັນເລີ່ມຕົ້ນ ຖ້າອຸປະກອນຂອງທ່ານເຊື່ອມຕໍ່ອິນເຕີເນັດ.</string>\n  <string name=\"announcements_filter_tag\">ກັ່ນຕອງຕາມປ້າຍ</string>\n  <string name=\"announcements_show_archived\">ສະແດງທີ່ເກັບໄວ້</string>\n  <string name=\"updates_description\">ກວດສອບການອັບເດດ ແລະເບິ່ງບັນທຶກການປ່ຽນແປງ</string>\n  <string name=\"downloads_description\">ຕົວດາວໂຫຼດ ແລະ ແອັບທີ່ດາວໂຫຼດແລ້ວ</string>\n  <string name=\"safeguards_toggled_warning\">ໄດ້ສະຫຼັບການປ້ອງກັນ</string>\n  <string name=\"about_app_name\">ກ່ຽວກັບ %1$s</string>\n  <string name=\"search_languages\">ຄົ້ນຫາພາສາ…</string>\n  <string name=\"keystore\">Keystore</string>\n  <string name=\"patches_selections\">ການເລືອກແພັດ</string>\n  <string name=\"select_bundle_for_import\">ເລືອກ Bundle ເພື່ອນຳເຂົ້າ</string>\n  <string name=\"select_bundle_for_export\">ເລືອກ Bundle ເພື່ອສົ່ງອອກ</string>\n  <string name=\"patch_selection_packages\">ແອັບທີ່ມີການເລືອກທີ່ບັນທຶກໄວ້</string>\n  <string name=\"patch_selection_entries\">ແພັດທີ່ເລືອກທັງໝົດ</string>\n  <string name=\"reset_configuration\">ຣີເຊັດການຕັ້ງຄ່າ</string>\n  <string name=\"reset_patch_selection\">ການເລືອກແພັດ</string>\n  <string name=\"reset_patch_options\">ຕົວເລືອກແພັດ</string>\n  <string name=\"downloaders\">ຕົວດາວໂຫຼດ</string>\n  <string name=\"downloader_prereleases\">ໃຊ້ເວີຊັນລ່ວງໜ້າ</string>\n  <string name=\"downloader_prereleases_description\">ໃຊ້ເວີຊັນລ່ວງໜ້າຂອງເຄື່ອງດາວໂຫລດຫຼັກ</string>\n  <string name=\"downloader_state_loaded\">ໂຫຼດແລ້ວ</string>\n  <string name=\"downloader_state_failed\">ໂຫຼດບໍ່ສຳເລັດ. ກົດເພື່ອເບິ່ງລາຍລະອຽດເພີ່ມເຕີມ</string>\n  <string name=\"downloader_state_missing\">ຫາຍໄປ</string>\n  <string name=\"downloader_delete_apps_title\">ລຶບແອັບທີ່ເລືອກ</string>\n  <string name=\"downloader_delete_apps_description\">ທ່ານແນ່ໃຈບໍ່ວ່າຕ້ອງການລຶບແອັບທີ່ເລືອກໄວ້?</string>\n  <string name=\"downloader_delete_single_description\">ທ່ານແນ່ໃຈບໍ່ວ່າຕ້ອງການລຶບ \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps_description\">ແອັບທີ່ດາວໂຫລດຜ່ານ ReVanced Manager ຈະປະກົດຢູ່ທີ່ນີ້.</string>\n  <string name=\"downloader_url\">URL ຕົວດາວໂຫຼດ</string>\n  <string name=\"downloader_add\">ເພີ່ມຕົວດາວໂຫຼດ</string>\n  <string name=\"select_downloader_type_dialog_description\">ເພີ່ມຕົວດາວໂຫຼດໃໝ່ຈາກ URL ຫຼື ໄຟລ໌ທ້ອງຖິ່ນ</string>\n  <string name=\"local_downloaders_description\">ເພີ່ມຕົວດາວໂຫຼດຈາກບ່ອນເກັບຂໍ້ມູນທ້ອງຖິ່ນ.</string>\n  <string name=\"remote_downloaders_description\">ເພີ່ມຕົວດາວໂຫຼດຈາກ URL. ສາມາດອັບເດດໄດ້ໂດຍອັດຕະໂນມັດ.</string>\n  <string name=\"install_revanced_downloaders\">ຕິດຕັ້ງຕົວດາວໂຫລດເພື່ອຮັບແອັບໂດຍກົງພາຍໃນ ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">ຕິດຕັ້ງຕົວດາວໂຫລດ ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">ຍົກເລີກການຕິດຕັ້ງຕົວດາວໂຫລດບໍ?</string>\n  <string name=\"cancel_downloader_install_description\">ການຕິດຕັ້ງຕົວດາວໂຫລດກຳລັງດຳເນີນຢູ່. ຖ້າທ່ານອອກໄປຕອນນີ້, ການດາວໂຫລດຈະຖືກຍົກເລີກ.</string>\n  <string name=\"downloader_sources_unavailable_title\">ຕົວດາວໂຫຼດເຫຼົ່ານີ້ຫາຍໄປ</string>\n  <string name=\"downloader_sources_unavailable_description\">ຄລິກທີ່ປຸ່ມອັບເດດເພື່ອແກ້ໄຂ.</string>\n  <string name=\"downloader_update_failed\">ບໍ່ສາມາດອັບເດດຕົວດາວໂຫຼດ: %s</string>\n  <string name=\"downloader_replace_fail\">ບໍ່ສາມາດນໍາເຂົ້າຕົວດາວໂຫຼດ: %s</string>\n  <string name=\"select_from_storage_description\">ເລືອກໄຟລ໌ APK ຈາກບ່ອນເກັບຂໍ້ມູນໂດຍໃຊ້ຕົວເລືອກໄຟລ໌</string>\n  <string name=\"enable\">ເປີດໃຊ້ງານ</string>\n  <string name=\"disable\">ປິດໃຊ້ງານ</string>\n  <string name=\"process_runtime_memory_limit_description\">ປະລິມານໜ່ວຍຄວາມຈໍາສູງສຸດທີ່ຂະບວນການ Patcher ສາມາດໃຊ້ໄດ້</string>\n  <string name=\"reset_onboarding\">ຣີເຊັດການເລີ່ມຕົ້ນ</string>\n  <string name=\"reset_onboarding_description\">ສະແດງໜ້າຈໍການເລີ່ມຕົ້ນເມື່ອເປີດແອັບຄັ້ງຕໍ່ໄປ</string>\n  <string name=\"api_not_working_title\">ບໍລິການ API ຢຸດການເຮັດວຽກຊົ່ວຄາວ</string>\n  <string name=\"api_not_working_description\">ບາງຄຸນສົມບັດອາດຈະໄດ້ຮັບຜົນກະທົບ. ກວດສອບການເຊື່ອມຕໍ່ຂອງທ່ານ ຫຼື URL API ໃນການຕັ້ງຄ່າ.</string>\n  <string name=\"no_patched_apps_found\">ບໍ່ພົບແອັບທີ່ແພັດແລ້ວ</string>\n  <string name=\"no_patched_apps_description\">ປັດຈຸບັນທ່ານບໍ່ມີແອັບທີ່ຖືກແພັດທີ່ພວກເຮົາຮູ້ຈັກ. ປ່ຽນແປງສິ່ງນັ້ນໂດຍການແພັດແອັບທໍາອິດຂອງທ່ານ!</string>\n  <string name=\"patched_apps_section_title\">ແອັບທີ່ຖືກແພັດ</string>\n  <string name=\"patchable_apps_section_title\">ແອັບທີ່ສາມາດແພັດໄດ້</string>\n  <string name=\"no_patches_found\">ບໍ່ພົບແພັດ</string>\n  <string name=\"no_patches_description\">ທ່ານຍັງບໍ່ມີແພັດໃດໆເທື່ອ. ເພີ່ມແພັດໂດຍການແຕະປຸ່ມຂ້າງລຸ່ມນີ້!</string>\n  <string name=\"split_apk_not_supported\">APK ແຍກບໍ່ສາມາດແກ້ໄຂໄດ້</string>\n  <string name=\"no_downloaders_installed\">ບໍ່ມີຕົວດາວໂຫລດແອັບຕິດຕັ້ງ!</string>\n  <string name=\"no_downloaders_trusted\">ບໍ່ມີຕົວດາວໂຫລດແອັບໃດຖືກເຊື່ອຖື! ກະລຸນາກວດສອບການຕັ້ງຄ່າຂອງທ່ານ.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">ແພັກເກັດ</string>\n  <string name=\"patch_selector_sheet_actions_title\">ການກະທຳ</string>\n  <string name=\"restore_default_selection\">ກູ້ຄືນການເລືອກຄ່າເລີ່ມຕົ້ນ</string>\n  <string name=\"deselect_all\">ຍົກເລີກການເລືອກທັງໝົດ</string>\n  <string name=\"invert_selection\">ປີ້ນການເລືອກ</string>\n  <string name=\"deselect_all_except\">ຍົກເລີກການເລືອກທັງໝົດ ຍົກເວັ້ນ %s</string>\n  <string name=\"scope_dialog_title\">ນຳໃຊ້ກັບ</string>\n  <string name=\"scope_all_patches\">ແພັດທັງໝົດ</string>\n  <string name=\"scope_bundle_patches\">ສະເພາະ %s</string>\n  <string name=\"save_as_file\">ບັນທຶກໃສ່ໄຟລ໌</string>\n  <string name=\"export_patcher_logs\">ສົ່ງອອກບັນທຶກ Patcher</string>\n  <string name=\"save_logs_success\">ບັນທຶກຂໍ້ມູນແລ້ວ</string>\n  <string name=\"downloader_activity_dialog_body\">ຕ້ອງມີການໂຕ້ຕອບກັບຜູ້ໃຊ້ເພື່ອດໍາເນີນການກັບຕົວດາວໂຫຼດນີ້.</string>\n  <string name=\"patcher_step_unpack\">ກະກຽມໂຕແພັດ</string>\n  <string name=\"view_announcement\">ເບິ່ງປະກາດ</string>\n  <string name=\"license\">ໃບອະນຸຍາດ</string>\n  <string name=\"source\">ແຫຼ່ງ</string>\n  <string name=\"repository\">Repository</string>\n  <string name=\"bundle_information_by_author\">ໂດຍ %1$s</string>\n  <string name=\"version_compatibility_warning\">ເວີຊັນທີ່ເລືອກໄວ້ອາດຈະໃຊ້ງານຮ່ວມກັນບໍ່ໄດ້ກັບແພັດທີ່ເລືອກໄວ້</string>\n  <string name=\"announcements\">ການປະກາດ</string>\n  <string name=\"archive\">ເກັບມ້ຽນ</string>\n  <string name=\"view_update\">ເບິ່ງການອັບເດດ</string>\n  <string name=\"update_checking_downloader\">ກວດສອບການອັບເດດຕົວດາວໂຫລດ ReVanced ເມື່ອເປີດໃຊ້</string>\n  <string name=\"update_checking_downloader_description\">ກວດສອບການອັບເດດຕົວດາວໂຫລດ ReVanced ທີ່ຕິດຕັ້ງໄວ້ເມື່ອແອັບພລິເຄຊັນເລີ່ມຕົ້ນ</string>\n  <string name=\"prereleases_warning\">ເວີຊັນກ່ອນການປ່ອຍອາດຈະບໍ່ຄົງທີ່ ແລະມີຂໍ້ຜິດພາດ. ທ່ານອາດຈະພົບກັບການຄ້າງ, ການສູນເສຍຂໍ້ມູນ, ຫຼືບັນຫາທີ່ບໍ່ຄາດຄິດອື່ນໆ. ເປີດໃຊ້ງານອັນນີ້ສະເພາະຖ້າທ່ານພໍໃຈກັບຄວາມສ່ຽງເຫຼົ່ານີ້.</string>\n  <string name=\"changelog\">ເບິ່ງບັນທຶກການປ່ຽນແປງ</string>\n  <string name=\"no_announcements_found\">ບໍ່ພົບການປະກາດ</string>\n  <string name=\"new_announcement\">ການປະກາດໃໝ່:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"other\">%d ການປັບປຸງ</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"other\">ປະຕິບັດ %d ການປັບປຸງ</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"other\">%d ຖືກເລືອກ</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-lt-rLT/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Pataisytojas</string>\n  <string name=\"patches\">Taisymai</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Tvarkyklė</string>\n  <string name=\"onboarding_welcome_to\">Sveiki atvykę į</string>\n  <string name=\"onboarding_welcome_back\">Sveiki! Tai naujas</string>\n  <string name=\"onboarding_apps_subtitle\">Galite pasirinkti programą, kurią norite pataisyti dabar arba vėliau</string>\n  <string name=\"onboarding_apps_network_error\">Nepavyko įkelti pataisų, nes tinklas nepasiekiamas arba nestabilus. Prisijunkite prie stabilaus tinklo ir bandykite dar kartą.</string>\n  <string name=\"onboarding_updates_subtitle\">Konfigūruokite automatinius naujinimus, kad ReVanced Manager ir pataisymai būtų atnaujinti</string>\n  <string name=\"banner_sources_not_downloaded_description\">Nepavyko atsisiųsti pataisų ir atsisiuntimo programų sąrankos metu. Norėdami jas atsisiųsti, bakstelėkite atnaujinti.</string>\n  <string name=\"onboarding_updates_note\">„ReVanced Manager“ prisijungs prie %s, kad atsisiųstų pradines versijas, jei jūsų įrenginys bus prijungtas prie interneto.</string>\n  <string name=\"retry\">Bandyti dar kartą</string>\n  <string name=\"onboarding_skip\">Praleisti dabar</string>\n  <string name=\"onboarding_recommended_version\">Rekomenduojama versija: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Praleisti leidimus?</string>\n  <string name=\"onboarding_permissions_skip_description\">Be reikiamų leidimų, kai kurios funkcijos gali neveikti tinkamai. Galite juos suteikti vėliau programos nustatymuose.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Vis tiek praleisti</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager reikia kelių leidimų, kad tinkamai veiktų</string>\n  <string name=\"permission_install_apps\">Diegti nežinomas programas</string>\n  <string name=\"permission_install_apps_description\">Reikalingas norint įdiegti pataisytas programas</string>\n  <string name=\"permission_notifications\">Pranešimai</string>\n  <string name=\"permission_notifications_description\">Leidžia nepertraukiamai vykdyti pataisymus fone</string>\n  <string name=\"permission_battery\">Akumuliatoriaus optimizavimas</string>\n  <string name=\"permission_battery_description\">Neleidžia, kad taisymas būtų nutrauktas fone</string>\n  <string name=\"permission_grant\">Suteikti</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager atsisiuntimo programos pagrindinis serveris</string>\n  <string name=\"downloader_host_permission_description\">Naudojama valdymui prieigos prie ReVanced Manager atsisiuntimo programų. Tik ReVanced Manager tai turi.</string>\n  <string name=\"toast_copied_to_clipboard\">Nukopijuota!</string>\n  <string name=\"copy_to_clipboard\">Kopijuoti į iškarpinę</string>\n  <string name=\"dashboard\">Prietaisų skydelis</string>\n  <string name=\"settings\">Nuostatos</string>\n  <string name=\"select_app\">Pasirinkti programą</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d pasirinkta</string>\n  <string name=\"fab_patch_app\">Taisyti programą</string>\n  <string name=\"fab_add_patches\">Pridėti taisymus</string>\n  <string name=\"new_downloader_notification\">Yra naujas (-i) atsisiuntimo įrankis (-iai). Spustelėkite čia, kad juos sukonfigūruotumėte.</string>\n  <string name=\"unsupported_architecture_warning\">Taisymai ant šio įrenginio architektūros yra nepalaikomi ir tikriausiai nepavyks.</string>\n  <string name=\"import_\">Importuoti</string>\n  <string name=\"import_patches\">Importuoti taisymus</string>\n  <string name=\"file_field_set\">Pasirinkta</string>\n  <string name=\"file_field_not_set\">Nepasirinkta</string>\n  <string name=\"field_not_set\">Nenustatyta</string>\n  <string name=\"patches_missing\">Trūksta</string>\n  <string name=\"patches_error\">Klaida</string>\n  <string name=\"patches_error_description\">Taisymų nepavyko įkelti. Spustelėkite, kad peržiūrėtumėte klaidą.</string>\n  <string name=\"patches_not_downloaded\">Lopai nebuvo atsisiųsti.</string>\n  <string name=\"patches_name_default\">Taisymai</string>\n  <string name=\"patches_name_fallback\">Be pavadinimo</string>\n  <string name=\"android_11_bug_dialog_title\">„Android 11“ klaida</string>\n  <string name=\"android_11_bug_dialog_description\">Programos diegimo leidimas turi būti suteiktas iš anksto, kad būtų išvengta „Android 11“ sistemos klaidos, kuri neigiamai paveiks naudotojo patirtį.</string>\n  <string name=\"no_network_toast\">Nėra interneto ryšio</string>\n  <string name=\"selected_app_meta_any_version\">Bet kuri prieinama versija</string>\n  <string name=\"app_source_dialog_title\">Pasirinkti šaltinį</string>\n  <string name=\"app_source_dialog_option_auto\">Automatinis</string>\n  <string name=\"app_source_dialog_option_auto_description\">Naudoti įdiegtą programą, tada atsisiųstą APK, tada galimus atsisiuntimo įrankius</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Nerasta suderinamų programų ar atsisiuntimo įrankių</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Prijungtų programų negalima taisyti dar kartą be „root“ prieigos</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Versija %s neatitinka siūlomos versijos</string>\n  <string name=\"patch_item_description\">Pradėti taisyti programą</string>\n  <string name=\"patch_selector_item\">Pasirinkti taisimus</string>\n  <string name=\"patch_selector_item_description\">%d taisymų pasirinkta</string>\n  <string name=\"patch_selection_changed_warning\">Lopų pasirinkimas buvo pakeistas</string>\n  <string name=\"no_patches_selected\">Nepasirinkta jokių taisymų</string>\n  <string name=\"network_unavailable_warning\">Jūsų įrenginys neprijungtas prie interneto. Atsisiuntimas vėliau nepavyks.</string>\n  <string name=\"network_metered_warning\">Šiuo metu esate prisijungę prie apmokestinamo ryšio. Gali būti taikomi jūsų paslaugų teikėjo duomenų mokesčiai.</string>\n  <string name=\"apk_source_selector_item\">Pasirinkti APK šaltinį</string>\n  <string name=\"apk_source_auto\">Automatinis</string>\n  <string name=\"apk_source_auto_installed\">Automatinis · Naudojant įdiegtą APK</string>\n  <string name=\"apk_source_auto_downloaded\">Automatinis · Naudojant atsisiųstą APK</string>\n  <string name=\"apk_source_auto_downloader\">Automatiškai · Naudojant galimus atsisiuntimo įrankius</string>\n  <string name=\"apk_source_auto_storage\">Automatiškai · Pasirinkti iš saugyklos</string>\n  <string name=\"apk_source_downloader\">Naudojant %s</string>\n  <string name=\"apk_source_installed\">Naudojant įdiegtą APK</string>\n  <string name=\"apk_source_local\">Naudojant vietinį APK failą</string>\n  <string name=\"apk_source_downloaded\">Jau atsisiųsta</string>\n  <string name=\"legacy_import_failed\">Nepavyko importuoti senųjų nuostatų</string>\n  <string name=\"auto_updates_dialog_title\">Konfigūruoti naujinius</string>\n  <string name=\"auto_updates_dialog_description\">Ar norite, kad ReVanced Manager periodiškai tikrintų, ar yra šių komponentų naujinimų?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced pataisymai</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Atsisiuntimo programos</string>\n  <string name=\"auto_updates_dialog_note\">Šiuos nustatymus galima pakeisti vėliau.\n\n„ReVanced Manager“ prisijungs prie %s, kad atsisiųstų pradines versijas, jei jūsų įrenginys bus prijungtas prie interneto.</string>\n  <string name=\"announcements_filter_tag\">Filtruoti pagal žymą</string>\n  <string name=\"announcements_show_archived\">Rodyti archyvuotus</string>\n  <string name=\"general\">Bendra</string>\n  <string name=\"general_description\">Kalba, tema, dinaminė spalva</string>\n  <string name=\"updates\">Naujiniai</string>\n  <string name=\"updates_description\">Tikrinti, ar yra naujinimų, ir peržiūrėti pakeitimų žurnalą</string>\n  <string name=\"downloads\">Atsisiuntimai</string>\n  <string name=\"downloads_description\">Atsisiuntėjai ir atsisiųstos programos</string>\n  <string name=\"import_export\">Importavimas &amp; eksportavimas</string>\n  <string name=\"import_export_description\">Raktų saugykla, lopo parinktys ir pasirinkimas</string>\n  <string name=\"advanced\">Išplėstinės</string>\n  <string name=\"advanced_description\">API URL, atminties limitas, derinimas</string>\n  <string name=\"safeguards_toggled_warning\">Apsaugos buvo perjungtos</string>\n  <string name=\"about\">Apie</string>\n  <string name=\"about_app_name\">Apie %1$s</string>\n  <string name=\"opensource_licenses\">Atvirojo kodo licencijos</string>\n  <string name=\"opensource_licenses_description\">Peržiūrėti visas bibliotekas, naudojamas šiai programai kurti</string>\n  <string name=\"contributors\">Dalyviai</string>\n  <string name=\"contributors_description\">Peržiūrėti ReVanced dalyvius</string>\n  <string name=\"dynamic_color\">Dinaminė spalva</string>\n  <string name=\"dynamic_color_description\">Pritaikyti spalvas prie ekrano fono</string>\n  <string name=\"pure_black_theme\">Grynai juoda tema</string>\n  <string name=\"pure_black_theme_description\">Naudoti grynai juodus fonus tamsiai temai</string>\n  <string name=\"theme\">Tema</string>\n  <string name=\"theme_description\">Pasirinkti tarp šviesios ar tamsios temos</string>\n  <string name=\"language\">Kalba</string>\n  <string name=\"language_description\">Pasirinkite programos rodymo kalbą</string>\n  <string name=\"language_system_default\">Sistemos numatytoji</string>\n  <string name=\"search_languages\">Ieškoti kalbų…</string>\n  <string name=\"safeguards\">Apsaugos priemonės</string>\n  <string name=\"patch_compat_check\">Išjungti versijos suderinamumo tikrinimą</string>\n  <string name=\"patch_compat_check_description\">Neapriboti lopų suderinamomis programos versijomis</string>\n  <string name=\"patch_compat_check_confirmation\">Pasirinkus nesuderinamus lopus, programa gali sugesti.\\n\\nAr vis tiek norite tęsti?</string>\n  <string name=\"suggested_version_safeguard\">Reikalauti siūlomos programos versijos</string>\n  <string name=\"suggested_version_safeguard_description\">Priversti pasirinkti siūlomą programos versiją</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Pasirinkus programą, kuri nėra siūlomos versijos, gali kilti netikėtų problemų.\\n\\nAr vis tiek norite tęsti?</string>\n  <string name=\"patch_selection_safeguard\">Leisti keisti lopų pasirinkimą ir parinktis</string>\n  <string name=\"patch_selection_safeguard_description\">Neužkirsti kelio pasirinkti ar atšaukti lopų pasirinkimą bei parinkčių tinkinimui</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Lopų pasirinkimo keitimas gali sukelti netikėtų problemų.\\n\\nAr vis tiek įjungti?</string>\n  <string name=\"universal_patches_safeguard\">Leisti naudoti universalius lopus</string>\n  <string name=\"universal_patches_safeguard_description\">Neužkirsti kelio naudoti universalius lopus</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Universalūs lopai nėra taip gerai išbandyti kaip tie, kurie skirti konkrečioms programoms.\\n\\nAr vis tiek įjungti?</string>\n  <string name=\"keystore\">Keystore</string>\n  <string name=\"patches_selections\">Taisymų pasirinkimai</string>\n  <string name=\"import_keystore\">Importuoti raktų saugyklą</string>\n  <string name=\"import_keystore_description\">Importuoti pasirinktinę raktų saugyklą</string>\n  <string name=\"import_keystore_dialog_title\">Įveskite raktų saugyklos prisijungimo duomenis</string>\n  <string name=\"import_keystore_dialog_description\">Norėdami ją importuoti, turėsite įvesti raktų saugyklos prisijungimo duomenis.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Naudotojo vardas (Pseudonimas)</string>\n  <string name=\"import_keystore_dialog_password_field\">Slaptažodis</string>\n  <string name=\"import_keystore_dialog_button\">Importuoti</string>\n  <string name=\"import_keystore_wrong_credentials\">Neteisingi raktų saugyklos prisijungimo duomenys</string>\n  <string name=\"import_keystore_success\">Importuota raktų saugykla</string>\n  <string name=\"export_keystore\">Eksportuoti raktų saugyklą</string>\n  <string name=\"export_keystore_description\">Eksportuoti esamą raktų saugyklą</string>\n  <string name=\"export_keystore_unavailable\">Nėra raktų saugyklos eksportavimui</string>\n  <string name=\"export_keystore_success\">Eksportuota raktų saugykla</string>\n  <string name=\"regenerate_keystore\">Iš naujo sugeneruoti raktų saugyklą</string>\n  <string name=\"regenerate_keystore_description\">Sugeneruoti naują raktų saugyklą</string>\n  <string name=\"regenerate_keystore_dialog_description\">Ketinate iš naujo sugeneruoti raktų saugyklą, kurią tvarkyklė naudos lopo diegimo metu.\\n\\nNegalėsite atnaujinti anksčiau įdiegtų programų iš šio šaltinio.</string>\n  <string name=\"regenerate_keystore_success\">Raktų saugykla buvo sėkmingai pakeista</string>\n  <string name=\"import_patch_selection\">Importuoti lopų pasirinkimą</string>\n  <string name=\"import_patch_selection_description\">Importuoti lopų pasirinkimą iš JSON failo</string>\n  <string name=\"import_patch_selection_fail\">Nepavyko importuoti lopų pasirinkimo: %s</string>\n  <string name=\"import_patch_selection_success\">Importuotas lopų pasirinkimas</string>\n  <string name=\"select_bundle_for_import\">Pasirinkite paketą, į kurį importuoti</string>\n  <string name=\"export_patch_selection\">Eksportuoti lopų pasirinkimą</string>\n  <string name=\"export_patch_selection_description\">Eksportuoti lopų pasirinkimą į JSON failą</string>\n  <string name=\"export_patch_selection_fail\">Nepavyko eksportuoti lopų pasirinkimo: %s</string>\n  <string name=\"export_patch_selection_success\">Eksportuotas lopų pasirinkimas</string>\n  <string name=\"select_bundle_for_export\">Pasirinkite paketą, iš kurio eksportuoti</string>\n  <string name=\"patch_selection_packages\">Programos su išsaugotais pasirinkimais</string>\n  <string name=\"patch_selection_entries\">Viso pasirinkta taisymų</string>\n  <string name=\"reset_configuration\">Atstatyti konfigūraciją</string>\n  <string name=\"reset_patch_selection\">Taisymų pasirinkimai</string>\n  <string name=\"reset_patch_selection_description\">Atstatyti išsaugotą lopų pasirinkimą</string>\n  <string name=\"reset_patch_options\">Taisymų parinktys</string>\n  <string name=\"reset_patch_options_description\">Atstatyti išsaugotas lopų parinktis</string>\n  <string name=\"reset_patch_selection_success\">Lopų pasirinkimas buvo atstatytas</string>\n  <string name=\"patch_selection_reset_all\">Atstatyti lopų pasirinkimą visuotinai</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Ketinate atstatyti visus lopų pasirinkimus.\\n\\nTurėsite kiekvieną lopą pasirinkti iš naujo rankiniu būdu.</string>\n  <string name=\"patch_selection_reset_all_description\">Atstato visus lopų pasirinkimus</string>\n  <string name=\"patch_selection_reset_package\">Atstatyti lopų pasirinkimą programai</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Ketinate atstatyti lopų pasirinkimą programai „%s“. Turėsite kiekvieną lopą pasirinkti iš naujo rankiniu būdu.</string>\n  <string name=\"patch_selection_reset_package_description\">Atstato lopų pasirinkimą vienai programai</string>\n  <string name=\"patch_selection_reset_patches\">Iš naujo nustatyti pataisų pasirinkimą (vieno)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Ketinate iš naujo nustatyti pataisų pasirinkimą, skirtą „%s“. Kiekvieną pataisą turėsite pasirinkti rankiniu būdu.</string>\n  <string name=\"patch_selection_reset_patches_description\">Iš naujo nustato pataisų pasirinkimą konkrečiai pataisų kolekcijai</string>\n  <string name=\"patch_options_reset_package\">Iš naujo nustatyti programos pataisų parinktis</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Ketinate iš naujo nustatyti programos „%s“ pataisų parinktis. Kiekvieną parinktį turėsite pritaikyti iš naujo.</string>\n  <string name=\"patch_options_reset_package_description\">Iš naujo nustato vienos programos pataisų parinktis</string>\n  <string name=\"patch_options_reset_patches\">Iš naujo nustatyti pataisų parinktis (vieno)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Ketinate iš naujo nustatyti pataisų parinktis, skirtas „%s“. Kiekvieną parinktį turėsite pritaikyti iš naujo.</string>\n  <string name=\"patch_options_reset_patches_description\">Iš naujo nustato pataisų parinktis konkrečiai pataisų kolekcijai</string>\n  <string name=\"patch_options_reset_all\">Iš naujo nustatyti pataisų parinktis globaliai</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Ketinate iš naujo nustatyti visas pataisų parinktis. Kiekvieną parinktį turėsite pritaikyti iš naujo.</string>\n  <string name=\"patch_options_reset_all_description\">Iš naujo nustato visas pataisų parinktis</string>\n  <string name=\"downloaders\">Atsisiuntėjai</string>\n  <string name=\"downloader_prereleases\">Naudoti išankstines versijas</string>\n  <string name=\"downloader_prereleases_description\">Naudoti pagrindinės atsisiuntimo programos išankstines versijas</string>\n  <string name=\"downloader_state_loaded\">Įkelta</string>\n  <string name=\"downloader_state_failed\">Nepavyko įkelti. Spustelėkite, norėdami gauti daugiau informacijos</string>\n  <string name=\"downloader_state_missing\">Trūksta</string>\n  <string name=\"downloader_delete_apps_title\">Ištrinti pasirinktas programas</string>\n  <string name=\"downloader_delete_apps_description\">Ar tikrai norite ištrinti pasirinktas programas?</string>\n  <string name=\"downloader_delete_single_description\">Ar tikrai norite ištrinti „%s“?</string>\n  <string name=\"downloader_settings_no_apps\">Atsisiųstų programų nerasta.</string>\n  <string name=\"downloader_settings_no_apps_description\">Čia bus rodomos programos, atsisiųstos per ReVanced Manager.</string>\n  <string name=\"downloader_url\">Atsisiuntimo URL</string>\n  <string name=\"downloader_add\">Pridėti atsisiuntiklį</string>\n  <string name=\"select_downloader_type_dialog_description\">Pridėti naujus atsisiuntiklius iš URL arba vietinių failų</string>\n  <string name=\"local_downloaders_description\">Pridėti atsisiuntiklius iš vietinės saugyklos.</string>\n  <string name=\"remote_downloaders_description\">Pridėti atsisiuntiklius iš URL. Gali būti automatiškai atnaujinta.</string>\n  <string name=\"install_revanced_downloaders\">Įdiekite atsisiuntimo įrankius, kad gautumėte programas tiesiogiai ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Įdiegti ReVanced atsisiuntimo įrankius</string>\n  <string name=\"cancel_downloader_install_title\">Atšaukti atsisiuntimo įrankių diegimą?</string>\n  <string name=\"cancel_downloader_install_description\">Vyksta atsisiuntimo įrankių diegimas. Jei išeisite dabar, atsisiuntimas bus atšauktas.</string>\n  <string name=\"downloader_sources_unavailable_title\">Šių atsisiuntiklių trūksta</string>\n  <string name=\"downloader_sources_unavailable_description\">Spustelėkite atnaujinimo mygtuką, kad tai pataisytumėte.</string>\n  <string name=\"downloader_update_failed\">Nepavyko atnaujinti atsisiuntiklio: %s</string>\n  <string name=\"downloader_replace_fail\">Nepavyko importuoti atsisiuntiklio: %s</string>\n  <string name=\"search_apps\">Ieškoti programų…</string>\n  <string name=\"loading_body\">Įkeliama…</string>\n  <string name=\"downloading_patches\">Atsisiunčiamos pataisos…</string>\n  <string name=\"options\">Parinktys</string>\n  <string name=\"ok\">Gerai</string>\n  <string name=\"yes\">Taip</string>\n  <string name=\"no\">Ne</string>\n  <string name=\"edit\">Redaguoti</string>\n  <string name=\"dialog_input_placeholder\">Reikšmė</string>\n  <string name=\"reset\">Iš naujo</string>\n  <string name=\"share\">Bendrinti</string>\n  <string name=\"patch\">Pataisa</string>\n  <string name=\"select_from_storage\">Pasirinkti iš saugyklos</string>\n  <string name=\"select_from_storage_description\">Pasirinkite APK failą iš saugyklos naudodami failų parinkiklį</string>\n  <string name=\"suggested_version_info\">Siūloma versija: %s</string>\n  <string name=\"type_anything\">Įveskite ką nors, kad tęstumėte</string>\n  <string name=\"search\">Ieškoti pataisų…</string>\n  <string name=\"apply\">Taikyti</string>\n  <string name=\"help\">Pagalba</string>\n  <string name=\"back\">Atgal</string>\n  <string name=\"warning\">Įspėjimas</string>\n  <string name=\"add\">Pridėti</string>\n  <string name=\"enable\">Įgalinti</string>\n  <string name=\"disable\">Išjungti</string>\n  <string name=\"close\">Uždaryti</string>\n  <string name=\"clear\">Išvalyti</string>\n  <string name=\"system\">Sistema</string>\n  <string name=\"light\">Šviesi</string>\n  <string name=\"dark\">Tamsi</string>\n  <string name=\"appearance\">Išvaizda</string>\n  <string name=\"networking\">Tinklas</string>\n  <string name=\"allow_metered_networks\">Leisti ribotus tinklus</string>\n  <string name=\"allow_metered_networks_description\">Leidžia automatinius atnaujinimus ribotuose tinkluose.\\n    Programa vis tiek gali įspėti apie ribotus tinklus atliekant rankines operacijas.</string>\n  <string name=\"downloaded_apps\">Atsisiųstos programos</string>\n  <string name=\"process_runtime\">Paleisti Patcher kitame procese (eksperimentinis)</string>\n  <string name=\"process_runtime_description\">Tai yra greičiau ir leidžia Patcher naudoti daugiau atminties</string>\n  <string name=\"process_runtime_memory_limit\">Patcher proceso atminties limitas</string>\n  <string name=\"process_runtime_memory_limit_description\">Maksimalus atminties kiekis, kurį gali naudoti „Patcher“ procesas</string>\n  <string name=\"debug_logs_export\">Eksportuoti derinimo žurnalus</string>\n  <string name=\"debug_logs_export_read_failed\">Nepavyko nuskaityti žurnalų (išėjimo kodas %d)</string>\n  <string name=\"debug_logs_export_failed\">Nepavyko eksportuoti žurnalų</string>\n  <string name=\"debug_logs_export_success\">Eksportuoti žurnalai</string>\n  <string name=\"api_url\">API URL</string>\n  <string name=\"api_url_description\">API, naudojamas reikalingiems failams atsisiųsti</string>\n  <string name=\"api_url_dialog_title\">Keisti API URL</string>\n  <string name=\"api_url_dialog_description\">Pakeisti ReVanced Manager API URL. ReVanced Manager naudoja API, kad atsisiųstų pataisas ir atnaujinimus.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager prisijungia prie API, kad atsisiųstų pataisas ir atnaujinimus. Įsitikinkite, kad juo pasitikite.</string>\n  <string name=\"api_url_dialog_save\">Nustatyti</string>\n  <string name=\"api_url_dialog_reset\">Iš naujo nustatyti API URL</string>\n  <string name=\"device\">Įrenginys</string>\n  <string name=\"device_android_version\">Android versija</string>\n  <string name=\"device_model\">Modelis</string>\n  <string name=\"device_architectures\">CPU architektūros</string>\n  <string name=\"device_memory_limit\">Atminties limitai</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (įprastas) – %2$dMB (didelis)</string>\n  <string name=\"patches_force_download\">Priverstinai atsisiųsti visas pataisas</string>\n  <string name=\"patches_reset\">Iš naujo nustatyti pataisas</string>\n  <string name=\"reset_onboarding\">Atstatyti pradinę konfigūraciją</string>\n  <string name=\"reset_onboarding_description\">Rodyti pradinės konfigūracijos ekraną kitą kartą paleidus programą</string>\n  <string name=\"patching\">Taisymas</string>\n  <string name=\"signing\">Pasirašymas</string>\n  <string name=\"storage\">Saugykla</string>\n  <string name=\"no_patch_found\">Pataisų nerasta. Patikrinkite savo pataisas</string>\n  <string name=\"tab_apps\">Programos</string>\n  <string name=\"tab_patches\">Pataisos</string>\n  <string name=\"delete\">Ištrinti</string>\n  <string name=\"refresh\">Atnaujinti</string>\n  <string name=\"continue_anyways\">Vis tiek tęsti</string>\n  <string name=\"download_another_version\">Atsisiųsti kitą versiją</string>\n  <string name=\"download_app\">Atsisiųsti programą</string>\n  <string name=\"download_apk\">Atsisiųsti APK failą</string>\n  <string name=\"patches_download_fail\">Nepavyko atsisiųsti pataisų: %s</string>\n  <string name=\"api_not_working_title\">API paslauga šiuo metu nepasiekiama</string>\n  <string name=\"api_not_working_description\">Kai kurios funkcijos gali būti paveiktos. Patikrinkite ryšį arba API URL nustatymuose.</string>\n  <string name=\"patches_replace_fail\">Nepavyko importuoti pataisų: %s</string>\n  <string name=\"no_patched_apps_found\">Nerasta jokių pataisytų programų</string>\n  <string name=\"no_patched_apps_description\">Šiuo metu neturite jokių pataisytų programų, apie kurias žinotume. Pakeiskite tai pataisydami savo pirmąją programą!</string>\n  <string name=\"patched_apps_section_title\">Pataisytos programos</string>\n  <string name=\"patchable_apps_section_title\">Programos, kurias galima pataisyti</string>\n  <string name=\"no_patches_found\">Nerasta jokių taisymų</string>\n  <string name=\"no_patches_description\">Jūs dar neturite jokių taisymų. Pridėkite taisymus bakstelėdami žemiau esantį mygtuką!</string>\n  <string name=\"tap_on_patches\">Bakstelėkite pataisas, kad gautumėte daugiau informacijos apie jas</string>\n  <string name=\"patches_selected\">Pasirinkta %s</string>\n  <string name=\"incompatible_patches\">Nesuderinamos pataisos</string>\n  <string name=\"universal_patches\">Universalios pataisos</string>\n  <string name=\"patch_selection_reset_toast\">Pataisų pasirinkimas ir parinktys buvo grąžintos į rekomenduojamas numatytąsias vertes</string>\n  <string name=\"patch_options_reset_toast\">Pataisų parinktys buvo iš naujo nustatytos</string>\n  <string name=\"non_suggested_version_warning_title\">Nesiūloma versija</string>\n  <string name=\"non_suggested_version_warning_description\">Jūsų pasirinkta programos versija neatitinka siūlomos versijos.\\nNaudokite siūlomą versiją: %s\\n\\nNorėdami vis tiek tęsti, išplėstiniuose nustatymuose išjunkite „Reikalauti siūlomos programos versijos“.</string>\n  <string name=\"selection_warning_title\">Nustoti naudoti numatytąsias reikšmes?</string>\n  <string name=\"selection_warning_description\">Rekomenduojama naudoti numatytąsias pataisų parinktis ir pasirinkimą. Jų keitimas gali sukelti netikėtų problemų.\\n\\nPrieš perjungiant pataisas, išplėstiniuose nustatymuose turite įjungti „Leisti keisti pataisų pasirinkimą ir parinktis“.</string>\n  <string name=\"universal_patch_warning_description\">Universalios pataisos yra bendresnio naudojimo ir neveikia taip patikimai kaip pataisos, skirtos konkrečioms programoms. Jas naudojant galite susidurti su problemomis.\\n\\nPrieš naudodami universalias pataisas, turite įjungti „Leisti naudoti universalias pataisas“ išplėstiniuose nustatymuose.</string>\n  <string name=\"this_version\">Ši versija</string>\n  <string name=\"universal\">Bet kuri programa</string>\n  <string name=\"search_patches\">Ieškoti pataisų</string>\n  <string name=\"app_version_not_compatible\">Ši pataisa nesuderinama su pasirinkta programos versija (%1$s)\\n\\nJi suderinama tik su šiomis versijomis: %2$s</string>\n  <string name=\"continue_with_version\">Tęsti su šia versija?</string>\n  <string name=\"version_not_compatible\">Ne visos pataisos yra suderinamos su šia versija (%s). Ar vis tiek norite tęsti?</string>\n  <string name=\"download_application\">Atsisiųsti programą?</string>\n  <string name=\"app_not_installed\">Jūsų pasirinkta programa neįdiegta. Ar norite ją atsisiųsti?</string>\n  <string name=\"failed_to_load_apk\">Nepavyko įkelti APK</string>\n  <string name=\"split_apk_not_supported\">Išskaidyti APK negalima pataisyti</string>\n  <string name=\"loading\">Įkeliama…</string>\n  <string name=\"not_installed\">Neįdiegta</string>\n  <string name=\"installed\">Įdiegta</string>\n  <string name=\"app_info\">Programos informacija</string>\n  <string name=\"uninstall\">Pašalinti</string>\n  <string name=\"unpatch\">Atšaukti pataisą</string>\n  <string name=\"repatch\">Pataisyti iš naujo</string>\n  <string name=\"install_type\">Diegimo tipas</string>\n  <string name=\"package_name\">Paketo pavadinimas</string>\n  <string name=\"original_package_name\">Originalus paketo pavadinimas</string>\n  <string name=\"applied_patches\">Pritaikyti pataisymai</string>\n  <string name=\"view_applied_patches\">Peržiūrėti pritaikytus pataisymus</string>\n  <string name=\"default_install\">Numatytasis</string>\n  <string name=\"mount_install\">Prijungti</string>\n  <string name=\"mounted\">Prijungtas</string>\n  <string name=\"not_mounted\">Neprijungtas</string>\n  <string name=\"mount\">Prijungti</string>\n  <string name=\"unmount\">Atjungti</string>\n  <string name=\"failed_to_mount\">Nepavyko prijungti: %s</string>\n  <string name=\"failed_to_unmount\">Nepavyko atjungti: %s</string>\n  <string name=\"unpatch_app\">Atšaukti programos pataisas?</string>\n  <string name=\"unpatch_description\">Ar tikrai norite atšaukti šios programos pataisas?</string>\n  <string name=\"downloader_invalid_version\">Atsisiuntėjas neatsiuntė teisingos versijos</string>\n  <string name=\"downloader_app_not_found\">Atsisiuntėjas nerado programos</string>\n  <string name=\"downloader_error\">Atsisiuntėjo klaida: %s</string>\n  <string name=\"no_downloaders_installed\">Nėra įdiegtų programų atsisiuntimo įrankių!</string>\n  <string name=\"no_downloaders_trusted\">Nėra patikimų programų atsisiuntimo įrankių! Patikrinkite nustatymus.</string>\n  <string name=\"already_patched\">Jau pataisyta</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filtras</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Suderinamumas</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paketai</string>\n  <string name=\"patch_selector_sheet_actions_title\">Veiksmai</string>\n  <string name=\"restore_default_selection\">Atkurti numatytąjį pasirinkimą</string>\n  <string name=\"deselect_all\">Panaikinti visų žymėjimą</string>\n  <string name=\"invert_selection\">Apversti pasirinkimą</string>\n  <string name=\"deselect_all_except\">Atžymėti visus, išskyrus %s</string>\n  <string name=\"scope_dialog_title\">Taikyti kam</string>\n  <string name=\"scope_all_patches\">Visi taisimai</string>\n  <string name=\"scope_bundle_patches\">Tik %s</string>\n  <string name=\"string_option_menu_description\">Daugiau parinkčių</string>\n  <string name=\"option_preset_custom_value\">Pasirinktinė reikšmė</string>\n  <string name=\"path_selector\">Pasirinkti iš saugyklos</string>\n  <string name=\"path_selector_parent_dir\">Ankstesnis katalogas</string>\n  <string name=\"path_selector_dirs\">Katalogai</string>\n  <string name=\"path_selector_files\">Failai</string>\n  <string name=\"show_password_field\">Rodyti slaptažodį</string>\n  <string name=\"hide_password_field\">Slėpti slaptažodį</string>\n  <string name=\"installer\">Diegimo programa</string>\n  <string name=\"install_app\">Įdiegti</string>\n  <string name=\"install_app_success\">Programa įdiegta</string>\n  <string name=\"install_app_fail\">Nepavyko įdiegti programos: %s</string>\n  <string name=\"reinstall_app_fail\">Nepavyko perinstaliuoti programos: %s</string>\n  <string name=\"uninstall_app_fail\">Nepavyko pašalinti programos: %s</string>\n  <string name=\"open_app\">Atidaryti</string>\n  <string name=\"save_apk\">Išsaugoti APK</string>\n  <string name=\"save_apk_success\">APK išsaugotas</string>\n  <string name=\"sign_fail\">Nepavyko pasirašyti APK: %s</string>\n  <string name=\"save_logs\">Išsaugoti žurnalus</string>\n  <string name=\"save_as_file\">Išsaugoti į failus</string>\n  <string name=\"export_patcher_logs\">Eksportuoti taisymo žurnalus</string>\n  <string name=\"save_logs_success\">Žurnalai išsaugoti</string>\n  <string name=\"downloader_activity_dialog_body\">Norint tęsti su šiuo atsisiuntėju, reikalingas naudotojo veiksmas.</string>\n  <string name=\"select_install_type\">Pasirinkite diegimo tipą</string>\n  <string name=\"patcher_step_group_preparing\">Ruošiama</string>\n  <string name=\"patcher_step_load_patches\">Įkelti pataisymus</string>\n  <string name=\"patcher_step_unpack\">Ruošti pataisų diegimo programą</string>\n  <string name=\"patcher_step_group_patching\">Pataisoma</string>\n  <string name=\"patcher_step_group_saving\">Išsaugoma</string>\n  <string name=\"patcher_step_write_patched\">Įrašyti pataisytą APK failą</string>\n  <string name=\"patcher_step_sign_apk\">Pasirašyti pataisytą APK failą</string>\n  <string name=\"patcher_notification_title\">Pataisoma…</string>\n  <string name=\"patcher_notification_text\">Palieskite, kad grįžtumėte į pataisymo įrankį</string>\n  <string name=\"patcher_stop_confirm_title\">Stabdyti pataisymo įrankį</string>\n  <string name=\"patcher_stop_confirm_description\">Ar tikrai norite sustabdyti pataisymo procesą?</string>\n  <string name=\"patcher_install_in_progress\">Diegimas vykdomas. Prašome palaukti</string>\n  <string name=\"execute_patches\">Vykdyti pataisymus</string>\n  <string name=\"executing_patch\">Vykdyti %s</string>\n  <string name=\"failed_to_execute_patch\">Nepavyko įvykdyti %s</string>\n  <string name=\"step_completed\">baigta</string>\n  <string name=\"step_failed\">nepavyko</string>\n  <string name=\"step_running\">veikia</string>\n  <string name=\"step_waiting\">laukia</string>\n  <string name=\"expand_content\">išskleisti</string>\n  <string name=\"collapse_content\">sutraukti</string>\n  <string name=\"drag_handle\">pertvarkyti</string>\n  <string name=\"more\">Daugiau</string>\n  <string name=\"less\">Mažiau</string>\n  <string name=\"continue_\">Tęsti</string>\n  <string name=\"dismiss\">Atmesti</string>\n  <string name=\"view_announcement\">Peržiūrėti pranešimą</string>\n  <string name=\"permanent_dismiss\">Daugiau neberodyti</string>\n  <string name=\"donate\">Paaukoti</string>\n  <string name=\"website\">Svetainė</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Susisiekti</string>\n  <string name=\"license\">Licencija</string>\n  <string name=\"source\">Šaltinis</string>\n  <string name=\"repository\">Repozitorija</string>\n  <string name=\"bundle_information_by_author\">Autorius: %1$s</string>\n  <string name=\"version\">Versija</string>\n  <string name=\"version_compatibility_warning\">Pasirinkta versija gali būti nesuderinama su pasirinktais pataisymais</string>\n  <string name=\"submit_feedback\">Pateikti problemą arba atsiliepimą</string>\n  <string name=\"submit_feedback_description\">Padėkite mums pagerinti šią programą</string>\n  <string name=\"developer_options\">Kūrėjo parinktys</string>\n  <string name=\"developer_options_description\">Parinktys problemų derinimui</string>\n  <string name=\"patches_update_success\">Atnaujinimas sėkmingas</string>\n  <string name=\"patches_update_unavailable\">Nėra galimų atnaujinimų</string>\n  <string name=\"view_patches\">Peržiūrėti pataisymus</string>\n  <string name=\"patches_view_any_version\">Bet kuri versija</string>\n  <string name=\"patches_view_any_package\">Bet koks paketas</string>\n  <string name=\"patches_delete_single_dialog_description\">Ar tikrai norite ištrinti „%s“?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Ar tikrai norite ištrinti pasirinktus pataisymus?</string>\n  <string name=\"announcements\">Pranešimai</string>\n  <string name=\"archive\">Archyvas</string>\n  <string name=\"about_revanced_manager\">Apie ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager yra „Android“ programa, kuri naudoja „ReVanced Patcher“, kad pataisytų „Android“ programas. Ji leidžia atsisiųsti ir pataisyti programas su pasirinktiniais pataisymais bei valdyti pataisymo procesą.</string>\n  <string name=\"developer_options_taps\">Liko paliesti %d kartų</string>\n  <string name=\"developer_options_enabled\">Kūrėjo parinktys įjungtos</string>\n  <string name=\"developer_options_already_enabled\">Kūrėjo parinktys jau įjungtos</string>\n  <string name=\"update_available\">Yra galimas atnaujinimas</string>\n  <string name=\"current_version\">Dabartinė versija: %s</string>\n  <string name=\"new_version\">Nauja versija: %s</string>\n  <string name=\"ready_to_install_update\">Pasiruošę įdiegti atnaujinimą</string>\n  <string name=\"update_completed\">Atnaujinimas įdiegtas</string>\n  <string name=\"install_update_manager_failed\">Nepavyko įdiegti atnaujinimo</string>\n  <string name=\"manual_update_check\">Tikrinti, ar yra atnaujinimų</string>\n  <string name=\"view_update\">Peržiūrėti naujinimą</string>\n  <string name=\"manual_update_check_description\">Rankiniu būdu tikrinti, ar yra atnaujinimų</string>\n  <string name=\"update_checking_manager\">Tikrinti atnaujinimus paleidžiant</string>\n  <string name=\"update_checking_manager_description\">Patikrinti, ar yra naujų „ReVanced Manager“ versijų, kai paleidžiama programa</string>\n  <string name=\"update_checking_downloader\">Paleidimo metu tikrinti, ar yra ReVanced atsisiuntimo įrankių naujinimų</string>\n  <string name=\"update_checking_downloader_description\">Tikrinti, ar yra įdiegtų ReVanced atsisiuntimo įrankių naujinimų, kai programa paleidžiama</string>\n  <string name=\"manager_prereleases\">Naudoti išankstines versijas</string>\n  <string name=\"manager_prereleases_description\">Naudoti išankstines „ReVanced Manager“ versijas</string>\n  <string name=\"prereleases_warning\">Išankstinės versijos gali būti nestabilios ir turėti klaidų. Galite patirti gedimus, duomenų praradimą ar kitų netikėtų problemų. Įgalinkite tai tik tuo atveju, jei esate susitaikę su šiomis rizikomis.</string>\n  <string name=\"changelog\">Peržiūrėti pakeitimų žurnalą</string>\n  <string name=\"changelog_loading\">Įkeliamas pakeitimų žurnalas</string>\n  <string name=\"changelog_download_fail\">Nepavyko atsisiųsti pakeitimų žurnalo: %s</string>\n  <string name=\"changelog_description\">Peržiūrėkite naujausius šio atnaujinimo pakeitimus</string>\n  <string name=\"battery_optimization_notification\">Baterijos optimizavimas turi būti išjungtas, kad „ReVanced Manager“ tinkamai veiktų fone. Spustelėkite čia, kad išjungtumėte optimizavimą.</string>\n  <string name=\"installing_manager_update\">Diegiamas atnaujinimas…</string>\n  <string name=\"downloading_manager_update\">Atsisiunčiamas atnaujinimas…</string>\n  <string name=\"download_manager_failed\">Nepavyko atsisiųsti atnaujinimo: %s</string>\n  <string name=\"cancel\">Atšaukti</string>\n  <string name=\"save\">Išsaugoti</string>\n  <string name=\"save_with_count\">Išsaugoti (%1$s)</string>\n  <string name=\"update\">Atnaujinti</string>\n  <string name=\"empty\">Tuščia</string>\n  <string name=\"installing_message\">Palieskite &lt;b&gt;Atnaujinti&lt;/b&gt;, kai būsite paraginti.\n„ReVanced Manager“ užsidarys atnaujinimo metu.</string>\n  <string name=\"no_changelogs_found\">Pakeitimų žurnalų nerasta</string>\n  <string name=\"just_now\">Ką tik</string>\n  <string name=\"minutes_ago\">prieš %sm</string>\n  <string name=\"hours_ago\">prieš %sh</string>\n  <string name=\"days_ago\">prieš %sd</string>\n  <string name=\"invalid_date\">Neteisinga data</string>\n  <string name=\"disable_battery_optimization\">Išjungti baterijos optimizavimą</string>\n  <string name=\"input_dialog_value_invalid\">Neteisinga reikšmė</string>\n  <string name=\"option_required\">Ši parinktis yra privaloma</string>\n  <string name=\"required_options_screen\">Privalomos parinktys</string>\n  <string name=\"failed_to_check_updates\">Nepavyko patikrinti, ar yra atnaujinimų: %s</string>\n  <string name=\"no_update_available\">Nėra galimų atnaujinimų</string>\n  <string name=\"no_announcements_found\">Skelbimų nerasta</string>\n  <string name=\"update_check\">Tikrinama, ar yra atnaujinimų…</string>\n  <string name=\"dismiss_temporary\">Ne dabar</string>\n  <string name=\"update_available_dialog_description\">Yra pasiekiama nauja „ReVanced Manager“ versija (%s).</string>\n  <string name=\"failed_to_download_update\">Nepavyko atsisiųsti atnaujinimo: %s</string>\n  <string name=\"download\">Atsisiųsti</string>\n  <string name=\"download_confirmation_metered\">Šiuo metu naudojate apmokestinamą ryšį, ir jūsų paslaugų teikėjas gali taikyti duomenų mokesčius.\n\nAr vis tiek norite tęsti?</string>\n  <string name=\"download_update_confirmation\">Atsisiųsti atnaujinimą?</string>\n  <string name=\"no_contributors_found\">Dalyvių nerasta</string>\n  <string name=\"select\">Pasirinkti</string>\n  <string name=\"select_deselect_all\">Pažymėti arba atžymėti visus</string>\n  <string name=\"select_patches_type_dialog_description\">Pridėti naujus pataisymus iš URL arba vietinių failų</string>\n  <string name=\"local_patches_description\">Pridėti pataisymus iš vietinės saugyklos.</string>\n  <string name=\"remote_patches_description\">Pridėti pataisymus iš URL. Pataisymai gali automatiškai atnaujinti.</string>\n  <string name=\"recommended\">Rekomenduojama</string>\n  <string name=\"installation_failed_dialog_title\">Diegimas nepavyko</string>\n  <string name=\"installation_cancelled_dialog_title\">Diegimas atšauktas</string>\n  <string name=\"installation_blocked_dialog_title\">Diegimas užblokuotas</string>\n  <string name=\"installation_conflict_dialog_title\">Diegimo konfliktas</string>\n  <string name=\"installation_incompatible_dialog_title\">Diegimas nesuderinamas</string>\n  <string name=\"installation_invalid_dialog_title\">Diegimas neteisingas</string>\n  <string name=\"installation_storage_issue_dialog_title\">Nepakanka vietos atmintyje</string>\n  <string name=\"installation_timeout_dialog_title\">Diegimo laikas baigėsi</string>\n  <string name=\"installation_failed_description\">Diegimas nepavyko dėl nežinomos priežasties. Bandyti dar kartą?</string>\n  <string name=\"installation_aborted_description\">Diegimas buvo atšauktas rankiniu būdu. Bandyti dar kartą?</string>\n  <string name=\"installation_blocked_description\">Diegimas buvo užblokuotas. Peržiūrėkite savo įrenginio saugos nustatymus ir bandykite dar kartą.</string>\n  <string name=\"installation_conflict_description\">Diegimui sutrukdė jau esanti programos instaliacija. Pašalinti įdiegtą programą ir bandyti dar kartą?</string>\n  <string name=\"installation_incompatible_description\">Programa nesuderinama su šiuo įrenginiu. Naudokite APK, suderinamą su šiuo įrenginiu, ir bandykite dar kartą.</string>\n  <string name=\"installation_invalid_description\">Programa neteisinga. Pašalinti programą ir bandyti dar kartą?</string>\n  <string name=\"installation_storage_issue_description\">Programos nepavyko įdiegti dėl nepakankamos vietos atmintyje. Atlaisvinkite vietos ir bandykite dar kartą.</string>\n  <string name=\"installation_timeout_description\">Diegimas užtruko per ilgai. Bandyti dar kartą?</string>\n  <string name=\"reinstall\">Perinstaliuoti</string>\n  <string name=\"show\">Rodyti</string>\n  <string name=\"debugging\">Derinimas</string>\n  <string name=\"about_device\">Apie įrenginį</string>\n  <string name=\"enter_url\">Įvesti URL</string>\n  <string name=\"next\">Kitas</string>\n  <string name=\"auto_update\">Automatinis atnaujinimas</string>\n  <string name=\"add_patches\">Pridėti pataisymus</string>\n  <string name=\"auto_update_description\">Automatiškai atnaujinti, kai pasiekiama nauja versija</string>\n  <string name=\"patches_prereleases\">Naudoti išankstines versijas</string>\n  <string name=\"patches_prereleases_description\">Naudoti išankstines %s versijas</string>\n  <string name=\"patches_url\">Pataisymų URL</string>\n  <string name=\"incompatible_patches_dialog\">Šie pataisymai nesuderinami su pasirinkta programos versija (%1$s).\n\nSpustelėkite pataisymus, kad pamatytumėte daugiau informacijos.</string>\n  <string name=\"incompatible_patch\">Nesuderinamas pataisymas</string>\n  <string name=\"any_version\">Bet koks</string>\n  <string name=\"never_show_again\">Daugiau niekada nerodyti</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Rodyti atnaujinimo pranešimą paleidžiant</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Rodyti iššokantį pranešimą, kai paleidžiant yra pasiekiama nauja atnaujinimo versija</string>\n  <string name=\"failed_to_import_keystore\">Nepavyko importuoti raktų saugyklos</string>\n  <string name=\"export\">Eksportuoti</string>\n  <string name=\"confirm\">Patvirtinti</string>\n  <string name=\"new_announcement\">Naujas skelbimas:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d taisymas</item>\n    <item quantity=\"few\">%d taisymai</item>\n    <item quantity=\"many\">%d taisymų</item>\n    <item quantity=\"other\">%d taisymų</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Vykdyti %d taisymą</item>\n    <item quantity=\"few\">Vykdyti %d taisymus</item>\n    <item quantity=\"many\">Vykdyti %d taisymų</item>\n    <item quantity=\"other\">Vykdyti %d taisymų</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d pasirinktas</item>\n    <item quantity=\"few\">%d pasirinkti</item>\n    <item quantity=\"many\">%d pasirinktų</item>\n    <item quantity=\"other\">%d pasirinktų</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-lv-rLV/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Labotājs</string>\n  <string name=\"patches\">Pači</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Pārvaldnieks</string>\n  <string name=\"onboarding_welcome_to\">Laipni lūdzam</string>\n  <string name=\"onboarding_welcome_back\">Sveiki! Tas ir jaunais</string>\n  <string name=\"onboarding_apps_subtitle\">Varat izvēlēties lietotni labošanai tagad vai darīt to vēlāk</string>\n  <string name=\"onboarding_updates_subtitle\">Konfigurējiet automātiskos atjauninājumus, lai saglabātu ReVanced Manager un labojumus atjauninātus</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager izveidos savienojumu ar %s, lai lejupielādētu sākotnējās versijas, ja jūsu ierīce ir savienota ar internetu.</string>\n  <string name=\"retry\">Mēģināt vēlreiz</string>\n  <string name=\"onboarding_skip\">Pagaidām izlaist</string>\n  <string name=\"onboarding_recommended_version\">Ieteicamā versija: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Izlaist atļaujas?</string>\n  <string name=\"onboarding_permissions_skip_description\">Bez nepieciešamajām atļaujām dažas funkcijas var nedarboties pareizi. Tās varat piešķirt vēlāk lietotnes iestatījumos.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Tomēr izlaist</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager ir nepieciešamas dažas atļaujas, lai darbotos pareizi</string>\n  <string name=\"permission_install_apps\">Instalēt nezināmas lietotnes</string>\n  <string name=\"permission_install_apps_description\">Nepieciešams, lai instalētu labotās lietotnes</string>\n  <string name=\"permission_notifications\">Paziņojumi</string>\n  <string name=\"permission_battery\">Akumulatora optimizācija</string>\n  <string name=\"permission_battery_description\">Novērš labošanas pārtraukšanu fonā</string>\n  <string name=\"permission_grant\">Piešķirt</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager lejupielādētāja resursdators</string>\n  <string name=\"downloader_host_permission_description\">Izmanto, lai kontrolētu piekļuvi ReVanced Manager lejupielādētājiem. Tikai ReVanced Manager ir šī iespēja.</string>\n  <string name=\"toast_copied_to_clipboard\">Nokopēts!</string>\n  <string name=\"copy_to_clipboard\">Kopēt starpliktuvē</string>\n  <string name=\"dashboard\">Informācijas panelis</string>\n  <string name=\"settings\">Iestatījumi</string>\n  <string name=\"select_app\">Atlasīt lietotni</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d atlasīts</string>\n  <string name=\"fab_patch_app\">Labot lietotni</string>\n  <string name=\"fab_add_patches\">Pievienot labojumus</string>\n  <string name=\"new_downloader_notification\">Pieejami jauni lejupielādētāji. Noklikšķiniet šeit, lai tos konfigurētu.</string>\n  <string name=\"unsupported_architecture_warning\">Ielāpošana šajā ierīces arhitektūrā netiek atbalstīta un, visticamāk, neizdosies.</string>\n  <string name=\"import_\">Importēt</string>\n  <string name=\"import_patches\">Importēt ielāpus</string>\n  <string name=\"file_field_set\">Atlasīts</string>\n  <string name=\"file_field_not_set\">Nav atlasīts</string>\n  <string name=\"field_not_set\">Nav iestatīts</string>\n  <string name=\"patches_missing\">Trūkst</string>\n  <string name=\"patches_error\">Kļūda</string>\n  <string name=\"patches_error_description\">Ielāpus nevarēja ielādēt. Noklikšķiniet, lai apskatītu kļūdu</string>\n  <string name=\"patches_not_downloaded\">Plāksteri nav lejupielādēti.</string>\n  <string name=\"patches_name_default\">Ielāpi</string>\n  <string name=\"patches_name_fallback\">Bez nosaukuma</string>\n  <string name=\"android_11_bug_dialog_title\">Android 11 kļūda</string>\n  <string name=\"android_11_bug_dialog_description\">Lietotņu instalēšanas atļauja jāpiešķir iepriekš, lai izvairītos no kļūdas Android 11 sistēmā, kas negatīvi ietekmēs lietotāja pieredzi.</string>\n  <string name=\"no_network_toast\">Nav pieejams interneta savienojums</string>\n  <string name=\"selected_app_meta_any_version\">Jebkura pieejamā versija</string>\n  <string name=\"app_source_dialog_title\">Atlasīt avotu</string>\n  <string name=\"app_source_dialog_option_auto\">Automātiski</string>\n  <string name=\"app_source_dialog_option_auto_description\">Izmantot instalēto lietotni, pēc tam lejupielādēto APK, tad pieejamos lejupielādētājus</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Nav pieejama saderīga lietotne vai lejupielādētājs</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Uzstādītās lietotnes nevar vēlreiz labot bez root piekļuves</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Versija %s neatbilst ieteiktajai versijai</string>\n  <string name=\"patch_item_description\">Sākt lietotnes ielāpošanu</string>\n  <string name=\"patch_selector_item\">Atlasīt labojumus</string>\n  <string name=\"patch_selector_item_description\">%d labojumi atlasīti</string>\n  <string name=\"patch_selection_changed_warning\">Plāksteru atlase ir mainīta.</string>\n  <string name=\"no_patches_selected\">Nav atlasīti ielāpi</string>\n  <string name=\"network_unavailable_warning\">Jūsu ierīce nav savienota ar internetu. Lejupielāde vēlāk neizdosies.</string>\n  <string name=\"network_metered_warning\">Jūs pašlaik izmantojat ierobežota datu apjoma savienojumu. Var tikt piemērota maksa par datu izmantošanu no jūsu pakalpojumu sniedzēja.</string>\n  <string name=\"apk_source_selector_item\">Atlasīt APK avotu</string>\n  <string name=\"apk_source_auto\">Automātiski</string>\n  <string name=\"apk_source_auto_installed\">Automātiski · Izmantojot instalētu APK</string>\n  <string name=\"apk_source_auto_downloaded\">Automātiski · Izmantojot lejupielādētu APK</string>\n  <string name=\"apk_source_auto_downloader\">Automātiski · Izmantojot pieejamos lejupielādētājus</string>\n  <string name=\"apk_source_auto_storage\">Automātiski · Izvēlēties no krātuves</string>\n  <string name=\"apk_source_downloader\">Izmantojot %s</string>\n  <string name=\"apk_source_installed\">Izmantojot instalēto APK</string>\n  <string name=\"apk_source_local\">Izmantojot lokālo APK failu</string>\n  <string name=\"apk_source_downloaded\">Jau lejupielādēts</string>\n  <string name=\"legacy_import_failed\">Nevarēja importēt mantotos iestatījumus</string>\n  <string name=\"auto_updates_dialog_title\">Konfigurēt atjauninājumus</string>\n  <string name=\"auto_updates_dialog_description\">Vai vēlaties, lai ReVanced Manager periodiski pārbaudītu atjauninājumus šādām komponentēm?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced labojumi</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Lejupielādētāji</string>\n  <string name=\"auto_updates_dialog_note\">Šos iestatījumus var mainīt vēlāk.\n\n    ReVanced Manager izveidos savienojumu ar %s, lai lejupielādētu sākotnējās versijas, ja jūsu ierīce ir savienota ar internetu.</string>\n  <string name=\"announcements_filter_tag\">Filtrēt pēc birkas</string>\n  <string name=\"announcements_show_archived\">Rādīt arhivētos</string>\n  <string name=\"general\">Vispārīgi</string>\n  <string name=\"general_description\">Valoda, tēma, dinamiskā krāsa</string>\n  <string name=\"updates\">Atjauninājumi</string>\n  <string name=\"updates_description\">Pārbaudīt atjauninājumus un skatīt izmaiņu žurnālu</string>\n  <string name=\"downloads\">Lejupielādes</string>\n  <string name=\"downloads_description\">Lejupielādētāji un lejupielādētās lietotnes</string>\n  <string name=\"import_export\">Importēt &amp; eksportēt</string>\n  <string name=\"import_export_description\">Atslēgu krātuve, ielāpu opcijas un atlase</string>\n  <string name=\"advanced\">Papildu</string>\n  <string name=\"advanced_description\">API URL, atmiņas ierobežojums, atkļūdošana</string>\n  <string name=\"safeguards_toggled_warning\">Aizsardzības pasākumi ir pārslēgti.</string>\n  <string name=\"about\">Par</string>\n  <string name=\"about_app_name\">Par %1$s</string>\n  <string name=\"opensource_licenses\">Atvērtā koda licences</string>\n  <string name=\"opensource_licenses_description\">Skatīt visas bibliotēkas, kas izmantotas šīs lietojumprogrammas izveidei</string>\n  <string name=\"contributors\">Līdzautori</string>\n  <string name=\"contributors_description\">Skatīt ReVanced līdzautorus</string>\n  <string name=\"dynamic_color\">Dinamiskā krāsa</string>\n  <string name=\"dynamic_color_description\">Pielāgot krāsas fona attēlam</string>\n  <string name=\"pure_black_theme\">Tīri melna tēma</string>\n  <string name=\"pure_black_theme_description\">Izmantot tīri melnus fonus tumšai tēmai</string>\n  <string name=\"theme\">Tēma</string>\n  <string name=\"theme_description\">Izvēlēties starp gaišo vai tumšo tēmu</string>\n  <string name=\"language\">Valoda</string>\n  <string name=\"language_description\">Izvēlēties lietotnes attēlošanas valodu</string>\n  <string name=\"language_system_default\">Sistēmas noklusējums</string>\n  <string name=\"search_languages\">Meklēt valodas…</string>\n  <string name=\"safeguards\">Aizsardzība</string>\n  <string name=\"patch_compat_check\">Atspējot versijas saderības pārbaudi</string>\n  <string name=\"patch_compat_check_description\">Neierobežot ielāpus saderīgām lietotnes versijām</string>\n  <string name=\"patch_compat_check_confirmation\">Nesaderīgu ielāpu atlase var radīt nestrādājošu lietotni.\\n\\nVai tomēr vēlaties turpināt?</string>\n  <string name=\"suggested_version_safeguard\">Pieprasīt ieteikto lietotnes versiju</string>\n  <string name=\"suggested_version_safeguard_description\">Pieprasīt ieteiktās lietotnes versijas atlasi</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Lietotnes atlase, kas nav ieteiktajā versijā, var radīt neparedzētas problēmas.\\n\\nVai tomēr vēlaties turpināt?</string>\n  <string name=\"patch_selection_safeguard\">Atļaut mainīt ielāpu atlasi un opcijas</string>\n  <string name=\"patch_selection_safeguard_description\">Neaizliegt ielāpu atlasi vai atcelšanu un opciju pielāgošanu</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Ielāpu atlases maiņa var radīt neparedzētas problēmas.\\n\\nTomēr iespējot?</string>\n  <string name=\"universal_patches_safeguard\">Atļaut izmantot universālus ielāpus</string>\n  <string name=\"universal_patches_safeguard_description\">Neaizliegt izmantot universālus ielāpus</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Universālie ielāpi nav tik labi pārbaudīti kā tie, kas paredzēti konkrētām lietotnēm.\\n\\nTomēr iespējot?</string>\n  <string name=\"keystore\">Atslēgu krātuve</string>\n  <string name=\"patches_selections\">Labojumu atlase</string>\n  <string name=\"import_keystore\">Importēt atslēgu krātuvi</string>\n  <string name=\"import_keystore_description\">Importēt pielāgotu atslēgu krātuvi</string>\n  <string name=\"import_keystore_dialog_title\">Ievadiet atslēgu krātuves akreditācijas datus</string>\n  <string name=\"import_keystore_dialog_description\">Lai importētu atslēgu krātuvi, jums būs jāievada tās akreditācijas dati.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Lietotājvārds (aizstājvārds)</string>\n  <string name=\"import_keystore_dialog_password_field\">Parole</string>\n  <string name=\"import_keystore_dialog_button\">Importēt</string>\n  <string name=\"import_keystore_wrong_credentials\">Nepareizi atslēgu krātuves akreditācijas dati</string>\n  <string name=\"import_keystore_success\">Importēta atslēgu krātuve</string>\n  <string name=\"export_keystore\">Eksportēt atslēgu krātuvi</string>\n  <string name=\"export_keystore_description\">Eksportēt pašreizējo atslēgu krātuvi</string>\n  <string name=\"export_keystore_unavailable\">Nav atslēgu krātuves, ko eksportēt</string>\n  <string name=\"export_keystore_success\">Eksportēta atslēgu krātuve</string>\n  <string name=\"regenerate_keystore\">Reģenerēt atslēgu krātuvi</string>\n  <string name=\"regenerate_keystore_description\">Ģenerēt jaunu atslēgu krātuvi</string>\n  <string name=\"regenerate_keystore_dialog_description\">Jūs gatavojaties reģenerēt savu atslēgu krātuvi, ko pārvaldnieks izmantos ielāpošanas procesā.\\n\\nJūs nevarēsiet atjaunināt iepriekš instalētās lietotnes no šī avota.</string>\n  <string name=\"regenerate_keystore_success\">Atslēgu krātuve ir veiksmīgi aizstāta</string>\n  <string name=\"import_patch_selection\">Importēt ielāpu atlasi</string>\n  <string name=\"import_patch_selection_description\">Importēt ielāpu atlasi no JSON faila</string>\n  <string name=\"import_patch_selection_fail\">Nevarēja importēt ielāpu atlasi: %s</string>\n  <string name=\"import_patch_selection_success\">Importēta ielāpu atlase</string>\n  <string name=\"select_bundle_for_import\">Atlasīt pakotni, kurā importēt</string>\n  <string name=\"export_patch_selection\">Eksportēt ielāpu atlasi</string>\n  <string name=\"export_patch_selection_description\">Eksportēt ielāpu atlasi uz JSON failu</string>\n  <string name=\"export_patch_selection_fail\">Nevarēja eksportēt ielāpu atlasi: %s</string>\n  <string name=\"export_patch_selection_success\">Eksportēta ielāpu atlase</string>\n  <string name=\"select_bundle_for_export\">Atlasīt pakotni, no kuras eksportēt</string>\n  <string name=\"patch_selection_packages\">Lietotnes ar saglabātām atlasēm</string>\n  <string name=\"patch_selection_entries\">Kopā atlasīti labojumi</string>\n  <string name=\"reset_configuration\">Atiestatīt konfigurāciju</string>\n  <string name=\"reset_patch_selection\">Labojumu atlases</string>\n  <string name=\"reset_patch_selection_description\">Atiestatīt saglabāto ielāpu atlasi</string>\n  <string name=\"reset_patch_options\">Labošanas opcijas</string>\n  <string name=\"reset_patch_options_description\">Atiestatīt saglabātās ielāpu opcijas</string>\n  <string name=\"reset_patch_selection_success\">Ielāpu atlase ir atiestatīta</string>\n  <string name=\"patch_selection_reset_all\">Globāli atiestatīt ielāpu atlasi</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Jūs gatavojaties atiestatīt visas ielāpu atlases. Jums būs manuāli jāatlasa katrs ielāps no jauna.</string>\n  <string name=\"patch_selection_reset_all_description\">Atiestata visas ielāpu atlases</string>\n  <string name=\"patch_selection_reset_package\">Atiestatīt ielāpu atlasi lietotnei</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Jūs gatavojaties atiestatīt ielāpu atlasi lietotnei \\\"%s\\\". Jums būs manuāli jāatlasa katrs ielāps no jauna.</string>\n  <string name=\"patch_selection_reset_package_description\">Atiestata ielāpu izvēli vienai lietotnei</string>\n  <string name=\"patch_selection_reset_patches\">Atiestatīt ielāpu izvēli (vienai)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Jūs gatavojaties atiestatīt ielāpu izvēli \\\"%s\\\". Jums būs manuāli jāatlasa katrs ielāps no jauna.</string>\n  <string name=\"patch_selection_reset_patches_description\">Atiestata ielāpu izvēli noteiktai ielāpu kolekcijai</string>\n  <string name=\"patch_options_reset_package\">Atiestatīt ielāpu opcijas lietotnei</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Jūs gatavojaties atiestatīt ielāpu opcijas lietotnei \\\"%s\\\". Jums būs jāpiemēro katra opcija no jauna.</string>\n  <string name=\"patch_options_reset_package_description\">Atiestata ielāpu opcijas vienai lietotnei</string>\n  <string name=\"patch_options_reset_patches\">Atiestatīt ielāpu opcijas (vienai)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Jūs gatavojaties atiestatīt ielāpu opcijas \\\"%s\\\". Jums būs jāpiemēro katra opcija no jauna.</string>\n  <string name=\"patch_options_reset_patches_description\">Atiestata ielāpu opcijas noteiktai ielāpu kolekcijai</string>\n  <string name=\"patch_options_reset_all\">Atiestatīt ielāpu opcijas globāli</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Jūs gatavojaties atiestatīt visas ielāpu opcijas. Jums būs jāpiemēro katra opcija no jauna.</string>\n  <string name=\"patch_options_reset_all_description\">Atiestata visas ielāpu opcijas</string>\n  <string name=\"downloaders\">Lejupielādētāji</string>\n  <string name=\"downloader_prereleases\">Izmantot priekšizlaides</string>\n  <string name=\"downloader_prereleases_description\">Izmantot galvenā lejupielādētāja priekšizlaides versijas</string>\n  <string name=\"downloader_state_loaded\">Ielādēts</string>\n  <string name=\"downloader_state_failed\">Neizdevās ielādēt. Noklikšķiniet, lai iegūtu sīkāku informāciju</string>\n  <string name=\"downloader_state_missing\">Trūkst</string>\n  <string name=\"downloader_delete_apps_title\">Dzēst atlasītās lietotnes</string>\n  <string name=\"downloader_delete_apps_description\">Vai tiešām vēlaties dzēst atlasītās lietotnes?</string>\n  <string name=\"downloader_delete_single_description\">Vai tiešām vēlaties dzēst \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Nav atrasta neviena lejupielādēta lietotne.</string>\n  <string name=\"downloader_settings_no_apps_description\">Lietotnes, kas lejupielādētas, izmantojot ReVanced Manager, parādīsies šeit.</string>\n  <string name=\"downloader_url\">Lejupielādētāja URL</string>\n  <string name=\"downloader_add\">Pievienot lejupielādētāju</string>\n  <string name=\"select_downloader_type_dialog_description\">Pievienot jaunus lejupielādētājus no URL vai lokāliem failiem</string>\n  <string name=\"local_downloaders_description\">Pievienot lejupielādētājus no lokālās krātuves.</string>\n  <string name=\"remote_downloaders_description\">Pievienot lejupielādētājus no URL. Var tikt automātiski atjaunināti.</string>\n  <string name=\"install_revanced_downloaders\">Instalējiet lejupielādētājus, lai iegūtu lietotnes tieši ReVanced Manager ietvaros.</string>\n  <string name=\"install_revanced_downloader\">Instalēt ReVanced lejupielādētājus</string>\n  <string name=\"cancel_downloader_install_title\">Atcelt lejupielādētāju instalēšanu?</string>\n  <string name=\"cancel_downloader_install_description\">Notiek lejupielādētāju instalēšana. Ja tagad aiziesit, lejupielāde tiks atcelta.</string>\n  <string name=\"downloader_sources_unavailable_title\">Šie lejupielādētāji trūkst</string>\n  <string name=\"downloader_sources_unavailable_description\">Noklikšķiniet uz atjaunināšanas pogas, lai to labotu.</string>\n  <string name=\"downloader_update_failed\">Neizdevās atjaunināt lejupielādētāju: %s</string>\n  <string name=\"downloader_replace_fail\">Neizdevās importēt lejupielādētāju: %s</string>\n  <string name=\"search_apps\">Meklēt lietotnes…</string>\n  <string name=\"loading_body\">Notiek ielāde…</string>\n  <string name=\"downloading_patches\">Notiek ielāpu lejupielāde…</string>\n  <string name=\"options\">Opcijas</string>\n  <string name=\"ok\">Labi</string>\n  <string name=\"yes\">Jā</string>\n  <string name=\"no\">Nē</string>\n  <string name=\"edit\">Rediģēt</string>\n  <string name=\"dialog_input_placeholder\">Vērtība</string>\n  <string name=\"reset\">Atiestatīt</string>\n  <string name=\"share\">Kopīgot</string>\n  <string name=\"patch\">Ielāps</string>\n  <string name=\"select_from_storage\">Atlasīt no krātuves</string>\n  <string name=\"select_from_storage_description\">Atlasīt APK failu no krātuves, izmantojot failu atlasītāju</string>\n  <string name=\"suggested_version_info\">Ieteiktā versija: %s</string>\n  <string name=\"type_anything\">Ierakstiet jebko, lai turpinātu</string>\n  <string name=\"search\">Meklēt ielāpus…</string>\n  <string name=\"apply\">Lietot</string>\n  <string name=\"help\">Palīdzība</string>\n  <string name=\"back\">Atpakaļ</string>\n  <string name=\"warning\">Brīdinājums</string>\n  <string name=\"add\">Pievienot</string>\n  <string name=\"enable\">Iespējot</string>\n  <string name=\"disable\">Atspējot</string>\n  <string name=\"close\">Aizvērt</string>\n  <string name=\"clear\">Notīrīt</string>\n  <string name=\"system\">Sistēma</string>\n  <string name=\"light\">Gaišs</string>\n  <string name=\"dark\">Tumšs</string>\n  <string name=\"appearance\">Izskats</string>\n  <string name=\"networking\">Tīklošana</string>\n  <string name=\"allow_metered_networks\">Atļaut ierobežotus tīklus</string>\n  <string name=\"allow_metered_networks_description\">Atļauj automātiskus atjauninājumus ierobežotos tīklos.\\n    Lietojumprogramma joprojām var brīdināt par ierobežotiem tīkliem manuālām darbībām.</string>\n  <string name=\"downloaded_apps\">Lejupielādētās lietotnes</string>\n  <string name=\"process_runtime\">Palaist ielāpotāju citā procesā (eksperimentāli)</string>\n  <string name=\"process_runtime_description\">Tas ir ātrāk un ļauj ielāpotājam izmantot vairāk atmiņas</string>\n  <string name=\"process_runtime_memory_limit\">Ielāpotāja procesa atmiņas ierobežojums</string>\n  <string name=\"process_runtime_memory_limit_description\">Maksimālais atmiņas apjoms, ko var izmantot Patcher process</string>\n  <string name=\"debug_logs_export\">Eksportēt atkļūdošanas žurnālus</string>\n  <string name=\"debug_logs_export_read_failed\">Neizdevās nolasīt žurnālus (izejas kods %d)</string>\n  <string name=\"debug_logs_export_failed\">Neizdevās eksportēt žurnālus</string>\n  <string name=\"debug_logs_export_success\">Eksportēti žurnāli</string>\n  <string name=\"api_url\">API URL</string>\n  <string name=\"api_url_description\">API, ko izmanto nepieciešamo failu lejupielādei</string>\n  <string name=\"api_url_dialog_title\">Mainīt API URL</string>\n  <string name=\"api_url_dialog_description\">Mainīt ReVanced Manager API URL. ReVanced Manager izmanto API, lai lejupielādētu ielāpus un atjauninājumus.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager savienojas ar API, lai lejupielādētu ielāpus un atjauninājumus. Pārliecinieties, ka tam uzticaties.</string>\n  <string name=\"api_url_dialog_save\">Iestatīt</string>\n  <string name=\"api_url_dialog_reset\">Atiestatīt API URL</string>\n  <string name=\"device\">Ierīce</string>\n  <string name=\"device_android_version\">Android versija</string>\n  <string name=\"device_model\">Modelis</string>\n  <string name=\"device_architectures\">CPU arhitektūras</string>\n  <string name=\"device_memory_limit\">Atmiņas ierobežojumi</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normāls) - %2$dMB (Liels)</string>\n  <string name=\"patches_force_download\">Piespiedu kārtā lejupielādēt visus ielāpus</string>\n  <string name=\"patches_reset\">Atiestatīt ielāpus</string>\n  <string name=\"reset_onboarding\">Atiestatīt iepazīstināšanu</string>\n  <string name=\"reset_onboarding_description\">Rādīt iepazīstināšanas ekrānu nākamajā lietotnes palaišanā</string>\n  <string name=\"patching\">Ielāpošana</string>\n  <string name=\"signing\">Parakstīšana</string>\n  <string name=\"storage\">Krātuve</string>\n  <string name=\"no_patch_found\">Nav atrasts neviens ielāps. Pārbaudiet savus ielāpus</string>\n  <string name=\"tab_apps\">Lietotnes</string>\n  <string name=\"tab_patches\">Ielāpi</string>\n  <string name=\"delete\">Dzēst</string>\n  <string name=\"refresh\">Atsvaidzināt</string>\n  <string name=\"continue_anyways\">Tik un tā turpināt</string>\n  <string name=\"download_another_version\">Lejupielādēt citu versiju</string>\n  <string name=\"download_app\">Lejupielādēt lietotni</string>\n  <string name=\"download_apk\">Lejupielādēt APK failu</string>\n  <string name=\"patches_download_fail\">Neizdevās lejupielādēt ielāpus: %s</string>\n  <string name=\"api_not_working_title\">API pakalpojums pašlaik nedarbojas</string>\n  <string name=\"api_not_working_description\">Dažas funkcijas varētu būt ietekmētas. Pārbaudiet savienojumu vai API URL iestatījumos.</string>\n  <string name=\"patches_replace_fail\">Neizdevās importēt ielāpus: %s</string>\n  <string name=\"no_patched_apps_found\">Nav atrasta neviena labota lietotne</string>\n  <string name=\"no_patched_apps_description\">Pašlaik nav nevienas labotas lietotnes, par kurām mēs zinātu. Mainiet to, labojot savu pirmo lietotni!</string>\n  <string name=\"patched_apps_section_title\">Ielāpotas lietotnes</string>\n  <string name=\"patchable_apps_section_title\">Lietotnes, ko var ielāpot</string>\n  <string name=\"no_patches_found\">Nav atrasts neviens labojums</string>\n  <string name=\"no_patches_description\">Jums vēl nav nevienu labojumu. Pievienojiet labojumus, pieskaroties zemāk esošajai pogai!</string>\n  <string name=\"tap_on_patches\">Pieskarieties ielāpiem, lai iegūtu vairāk informācijas par tiem</string>\n  <string name=\"patches_selected\">%s atlasīts</string>\n  <string name=\"incompatible_patches\">Nesaderīgi ielāpi</string>\n  <string name=\"universal_patches\">Universālie ielāpi</string>\n  <string name=\"patch_selection_reset_toast\">Ielāpu izvēle un opcijas ir atiestatītas uz ieteiktajiem noklusējumiem</string>\n  <string name=\"patch_options_reset_toast\">Ielāpu opcijas ir atiestatītas</string>\n  <string name=\"non_suggested_version_warning_title\">Neieteiktā versija</string>\n  <string name=\"non_suggested_version_warning_description\">Atlasītā lietotnes versija neatbilst ieteiktajai versijai.\\nLūdzu, izmantojiet ieteikto versiju: %s\\n\\nLai tik un tā turpinātu, atspējojiet \\\"Pieprasīt ieteikto lietotnes versiju\\\" papildu iestatījumos.</string>\n  <string name=\"selection_warning_title\">Pārtraukt izmantot noklusējuma iestatījumus?</string>\n  <string name=\"selection_warning_description\">Ieteicams izmantot noklusējuma ielāpu izvēli un opcijas. To maiņa var radīt neparedzētas problēmas.\\n\\nPirms ielāpu ieslēgšanas jums ir jāieslēdz \\\"Atļaut mainīt ielāpu izvēli un opcijas\\\" papildu iestatījumos.</string>\n  <string name=\"universal_patch_warning_description\">Universālajiem ielāpiem ir vispārīgāks pielietojums, un tie nedarbojas tik uzticami kā ielāpi, kas paredzēti konkrētām lietotnēm. Tos izmantojot, var rasties problēmas.\\n\\nPirms universālo ielāpu izmantošanas jums ir jāieslēdz \\\"Atļaut izmantot universālos ielāpus\\\" papildu iestatījumos.</string>\n  <string name=\"this_version\">Šī versija</string>\n  <string name=\"universal\">Jebkura lietotne</string>\n  <string name=\"search_patches\">Meklēt ielāpus</string>\n  <string name=\"app_version_not_compatible\">Šis ielāps nav saderīgs ar atlasīto lietotnes versiju (%1$s)\\n\\nTas ir saderīgs tikai ar šādām versijām: %2$s</string>\n  <string name=\"continue_with_version\">Turpināt ar šo versiju?</string>\n  <string name=\"version_not_compatible\">Ne visi ielāpi ir saderīgi ar šo versiju (%s). Vai vēlaties tik un tā turpināt?</string>\n  <string name=\"download_application\">Lejupielādēt lietojumprogrammu?</string>\n  <string name=\"app_not_installed\">Atlasītā lietotne nav instalēta. Vai vēlaties to lejupielādēt?</string>\n  <string name=\"failed_to_load_apk\">Neizdevās ielādēt APK</string>\n  <string name=\"split_apk_not_supported\">Sadalītos APK nevar ielāpīt</string>\n  <string name=\"loading\">Notiek ielāde…</string>\n  <string name=\"not_installed\">Nav instalēts</string>\n  <string name=\"installed\">Instalēts</string>\n  <string name=\"app_info\">Lietotnes informācija</string>\n  <string name=\"uninstall\">Atinstalēt</string>\n  <string name=\"unpatch\">Atcelt ielāpu</string>\n  <string name=\"repatch\">Atkārtoti ielāpot</string>\n  <string name=\"install_type\">Instalēšanas veids</string>\n  <string name=\"package_name\">Pakotnes nosaukums</string>\n  <string name=\"original_package_name\">Oriģinālās pakotnes nosaukums</string>\n  <string name=\"applied_patches\">Lietotās ielāpes</string>\n  <string name=\"view_applied_patches\">Skatīt lietotās ielāpes</string>\n  <string name=\"default_install\">Noklusējums</string>\n  <string name=\"mount_install\">Pievienot</string>\n  <string name=\"mounted\">Pievienots</string>\n  <string name=\"not_mounted\">Nav pievienots</string>\n  <string name=\"mount\">Pievienot</string>\n  <string name=\"unmount\">Atvienot</string>\n  <string name=\"failed_to_mount\">Neizdevās pievienot: %s</string>\n  <string name=\"failed_to_unmount\">Neizdevās atvienot: %s</string>\n  <string name=\"unpatch_app\">Noņemt ielāpi lietotnei?</string>\n  <string name=\"unpatch_description\">Vai tiešām vēlaties noņemt ielāpi šai lietotnei?</string>\n  <string name=\"downloader_invalid_version\">Lejupielādētājs neielādēja pareizo versiju</string>\n  <string name=\"downloader_app_not_found\">Lejupielādētājs neatrada lietotni</string>\n  <string name=\"downloader_error\">Lejupielādētāja kļūda: %s</string>\n  <string name=\"no_downloaders_installed\">Nav instalēts neviens lietotņu lejupielādētājs!</string>\n  <string name=\"no_downloaders_trusted\">Neviens lietotņu lejupielādētājs nav uzticams! Lūdzu, pārbaudiet iestatījumus.</string>\n  <string name=\"already_patched\">Jau ielāpīts</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filtrēt</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Saderība</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Pakotnes</string>\n  <string name=\"patch_selector_sheet_actions_title\">Darbības</string>\n  <string name=\"restore_default_selection\">Atjaunot noklusējuma atlasi</string>\n  <string name=\"deselect_all\">Atsaukt visu atlasi</string>\n  <string name=\"invert_selection\">Apgriezt atlasi</string>\n  <string name=\"deselect_all_except\">Atcelt visu atlasi, izņemot %s</string>\n  <string name=\"scope_dialog_title\">Piemērot</string>\n  <string name=\"scope_all_patches\">Visi ielāpi</string>\n  <string name=\"scope_bundle_patches\">Tikai %s</string>\n  <string name=\"string_option_menu_description\">Vairāk opciju</string>\n  <string name=\"option_preset_custom_value\">Pielāgota vērtība</string>\n  <string name=\"path_selector\">Atlasīt no krātuves</string>\n  <string name=\"path_selector_parent_dir\">Iepriekšējā direktorija</string>\n  <string name=\"path_selector_dirs\">Direktorijas</string>\n  <string name=\"path_selector_files\">Faili</string>\n  <string name=\"show_password_field\">Rādīt paroli</string>\n  <string name=\"hide_password_field\">Slēpt paroli</string>\n  <string name=\"installer\">Instalētājs</string>\n  <string name=\"install_app\">Instalēt</string>\n  <string name=\"install_app_success\">Lietotne instalēta</string>\n  <string name=\"install_app_fail\">Neizdevās instalēt lietotni: %s</string>\n  <string name=\"reinstall_app_fail\">Neizdevās atkārtoti instalēt lietotni: %s</string>\n  <string name=\"uninstall_app_fail\">Neizdevās atinstalēt lietotni: %s</string>\n  <string name=\"open_app\">Atvērt</string>\n  <string name=\"save_apk\">Saglabāt APK</string>\n  <string name=\"save_apk_success\">APK saglabāts</string>\n  <string name=\"sign_fail\">Neizdevās parakstīt APK: %s</string>\n  <string name=\"save_logs\">Saglabāt žurnālus</string>\n  <string name=\"save_as_file\">Saglabāt failos</string>\n  <string name=\"export_patcher_logs\">Eksportēt labotāja žurnālus</string>\n  <string name=\"save_logs_success\">Žurnāli saglabāti</string>\n  <string name=\"downloader_activity_dialog_body\">Lai turpinātu ar šo lejupielādētāju, nepieciešama lietotāja mijiedarbība.</string>\n  <string name=\"select_install_type\">Atlasīt instalēšanas veidu</string>\n  <string name=\"patcher_step_group_preparing\">Gatavojas</string>\n  <string name=\"patcher_step_load_patches\">Ielādēt ielāpes</string>\n  <string name=\"patcher_step_unpack\">Sagatavot ielāpotāju</string>\n  <string name=\"patcher_step_group_patching\">Ielāpīšana</string>\n  <string name=\"patcher_step_group_saving\">Saglabāšana</string>\n  <string name=\"patcher_step_write_patched\">Rakstīt ielāpītu APK failu</string>\n  <string name=\"patcher_step_sign_apk\">Parakstīt ielāpītu APK failu</string>\n  <string name=\"patcher_notification_title\">Ielāpīšana notiek…</string>\n  <string name=\"patcher_notification_text\">Pieskarieties, lai atgrieztos pie ielāpītāja</string>\n  <string name=\"patcher_stop_confirm_title\">Apturēt ielāpītāju</string>\n  <string name=\"patcher_stop_confirm_description\">Vai tiešām vēlaties apturēt ielāpīšanas procesu?</string>\n  <string name=\"patcher_install_in_progress\">Instalēšana notiek. Lūdzu, uzgaidiet</string>\n  <string name=\"execute_patches\">Izpildīt ielāpes</string>\n  <string name=\"executing_patch\">Izpildīt %s</string>\n  <string name=\"failed_to_execute_patch\">Neizdevās izpildīt %s</string>\n  <string name=\"step_completed\">pabeigts</string>\n  <string name=\"step_failed\">neizdevās</string>\n  <string name=\"step_running\">darbojas</string>\n  <string name=\"step_waiting\">gaida</string>\n  <string name=\"expand_content\">izvērst</string>\n  <string name=\"collapse_content\">sakļaut</string>\n  <string name=\"drag_handle\">pārkārtot</string>\n  <string name=\"more\">Vairāk</string>\n  <string name=\"less\">Mazāk</string>\n  <string name=\"continue_\">Turpināt</string>\n  <string name=\"dismiss\">Atmest</string>\n  <string name=\"view_announcement\">Skatīt paziņojumu</string>\n  <string name=\"permanent_dismiss\">Nerādīt vairs</string>\n  <string name=\"donate\">Ziedot</string>\n  <string name=\"website\">Tīmekļa vietne</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Saziņa</string>\n  <string name=\"license\">Licence</string>\n  <string name=\"source\">Avots</string>\n  <string name=\"repository\">Repozitorijs</string>\n  <string name=\"bundle_information_by_author\">Autors: %1$s</string>\n  <string name=\"version\">Versija</string>\n  <string name=\"version_compatibility_warning\">Izvēlētā versija var būt nesaderīga ar atlasītajiem labojumiem</string>\n  <string name=\"submit_feedback\">Iesniegt problēmu vai atsauksmes</string>\n  <string name=\"submit_feedback_description\">Palīdziet mums uzlabot šo lietotni</string>\n  <string name=\"developer_options\">Izstrādātāja opcijas</string>\n  <string name=\"developer_options_description\">Iespējas problēmu atkļūdošanai</string>\n  <string name=\"patches_update_success\">Atjaunināšana veiksmīga</string>\n  <string name=\"patches_update_unavailable\">Nav pieejams jauns atjauninājums</string>\n  <string name=\"view_patches\">Skatīt ielāpes</string>\n  <string name=\"patches_view_any_version\">Jebkura versija</string>\n  <string name=\"patches_view_any_package\">Jebkura pakotne</string>\n  <string name=\"patches_delete_single_dialog_description\">Vai tiešām vēlaties dzēst \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Vai tiešām vēlaties dzēst atlasītās ielāpes?</string>\n  <string name=\"announcements\">Paziņojumi</string>\n  <string name=\"archive\">Arhivs</string>\n  <string name=\"about_revanced_manager\">Par ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager ir Android lietotne, kas izmanto ReVanced Patcher, lai ielāpītu Android lietotnes. Tā ļauj lejupielādēt un ielāpītu lietotnes ar pielāgotām ielāpēm, kā arī pārvaldīt ielāpīšanas procesu.</string>\n  <string name=\"developer_options_taps\">Atlikuši %d pieskārieni</string>\n  <string name=\"developer_options_enabled\">Izstrādātāja opcijas iespējotas</string>\n  <string name=\"developer_options_already_enabled\">Izstrādātāja opcijas jau ir iespējotas</string>\n  <string name=\"update_available\">Ir pieejams atjauninājums</string>\n  <string name=\"current_version\">Pašreizējā versija: %s</string>\n  <string name=\"new_version\">Jaunā versija: %s</string>\n  <string name=\"ready_to_install_update\">Gatavs instalēt atjauninājumu</string>\n  <string name=\"update_completed\">Atjauninājums instalēts</string>\n  <string name=\"install_update_manager_failed\">Neizdevās instalēt atjauninājumu</string>\n  <string name=\"manual_update_check\">Pārbaudīt atjauninājumus</string>\n  <string name=\"view_update\">Skatīt atjauninājumu</string>\n  <string name=\"manual_update_check_description\">Manuāli pārbaudīt atjauninājumus</string>\n  <string name=\"update_checking_manager\">Pārbaudīt atjauninājumus palaišanas brīdī</string>\n  <string name=\"update_checking_manager_description\">Pārbaudīt ReVanced Manager jaunas versijas, kad lietojumprogramma tiek startēta</string>\n  <string name=\"update_checking_downloader\">Pārbaudīt ReVanced lejupielādētāju atjauninājumus palaišanas laikā</string>\n  <string name=\"update_checking_downloader_description\">Pārbaudīt instalēto ReVanced lejupielādētāju atjauninājumus, kad lietotne startē</string>\n  <string name=\"manager_prereleases\">Izmantot pirmsizlaides versijas</string>\n  <string name=\"manager_prereleases_description\">Izmantot ReVanced Manager pirmsizlaides versijas</string>\n  <string name=\"prereleases_warning\">Pirmsizlaides versijas var būt nestabilas un saturēt kļūdas. Var rasties avārijas, datu zudumi vai citas neparedzētas problēmas. Iespējojiet to tikai tad, ja esat gatavs šiem riskiem.</string>\n  <string name=\"changelog\">Skatīt izmaiņu žurnālu</string>\n  <string name=\"changelog_loading\">Ielādē izmaiņu žurnālu</string>\n  <string name=\"changelog_download_fail\">Neizdevās lejupielādēt izmaiņu žurnālu: %s</string>\n  <string name=\"changelog_description\">Apskatiet jaunākās izmaiņas šajā atjauninājumā</string>\n  <string name=\"battery_optimization_notification\">Akumulatora optimizācijām jābūt izslēgtām, lai ReVanced Manager pareizi darbotos fonā. Noklikšķiniet šeit, lai izslēgtu optimizācijas.</string>\n  <string name=\"installing_manager_update\">Instalē atjauninājumu…</string>\n  <string name=\"downloading_manager_update\">Lejupielādē atjauninājumu…</string>\n  <string name=\"download_manager_failed\">Neizdevās lejupielādēt atjauninājumu: %s</string>\n  <string name=\"cancel\">Atcelt</string>\n  <string name=\"save\">Saglabāt</string>\n  <string name=\"save_with_count\">Saglabāt (%1$s)</string>\n  <string name=\"update\">Atjaunināt</string>\n  <string name=\"empty\">Tukšs</string>\n  <string name=\"installing_message\">Pieskarieties pie <b>Atjaunināt</b>, kad tiek prasīts.\nReVanced Manager aizvērsies, kad notiks atjaunināšana.</string>\n  <string name=\"no_changelogs_found\">Nav atrasti izmaiņu žurnāli</string>\n  <string name=\"just_now\">Tikko</string>\n  <string name=\"minutes_ago\">Pirms %s min</string>\n  <string name=\"hours_ago\">Pirms %s h</string>\n  <string name=\"days_ago\">Pirms %s d</string>\n  <string name=\"invalid_date\">Nederīgs datums</string>\n  <string name=\"disable_battery_optimization\">Atspējot akumulatora optimizāciju</string>\n  <string name=\"input_dialog_value_invalid\">Nederīga vērtība</string>\n  <string name=\"option_required\">Šī opcija ir obligāta</string>\n  <string name=\"required_options_screen\">Obligātās opcijas</string>\n  <string name=\"failed_to_check_updates\">Neizdevās pārbaudīt atjauninājumus: %s</string>\n  <string name=\"no_update_available\">Nav pieejams atjauninājums</string>\n  <string name=\"no_announcements_found\">Nav atrasti paziņojumi</string>\n  <string name=\"update_check\">Pārbauda atjauninājumus…</string>\n  <string name=\"dismiss_temporary\">Ne tagad</string>\n  <string name=\"update_available_dialog_description\">Ir pieejama jauna ReVanced Manager (%s) versija.</string>\n  <string name=\"failed_to_download_update\">Neizdevās lejupielādēt atjauninājumu: %s</string>\n  <string name=\"download\">Lejupielādēt</string>\n  <string name=\"download_confirmation_metered\">Jūs pašlaik izmantojat ierobežotu savienojumu, un jūsu pakalpojumu sniedzējs var piemērot datu maksu.\n\nVai joprojām vēlaties turpināt?</string>\n  <string name=\"download_update_confirmation\">Lejupielādēt atjauninājumu?</string>\n  <string name=\"no_contributors_found\">Nav atrasti atbalstītāji</string>\n  <string name=\"select\">Atlasīt</string>\n  <string name=\"select_deselect_all\">Atlasīt vai atcelt visu atlasi</string>\n  <string name=\"select_patches_type_dialog_description\">Pievienot jaunas ielāpes no URL vai lokāliem failiem</string>\n  <string name=\"local_patches_description\">Pievienot ielāpes no lokālās krātuves.</string>\n  <string name=\"remote_patches_description\">Pievienot ielāpes no URL. Ielāpes var automātiski atjaunināties.</string>\n  <string name=\"recommended\">Ieteicams</string>\n  <string name=\"installation_failed_dialog_title\">Instalēšana neizdevās</string>\n  <string name=\"installation_cancelled_dialog_title\">Instalēšana atcelta</string>\n  <string name=\"installation_blocked_dialog_title\">Instalēšana bloķēta</string>\n  <string name=\"installation_conflict_dialog_title\">Instalēšanas konflikts</string>\n  <string name=\"installation_incompatible_dialog_title\">Instalēšana nesaderīga</string>\n  <string name=\"installation_invalid_dialog_title\">Instalēšana nederīga</string>\n  <string name=\"installation_storage_issue_dialog_title\">Nepietiek vietas krātuvē</string>\n  <string name=\"installation_timeout_dialog_title\">Instalēšanas laiks ir beidzies</string>\n  <string name=\"installation_failed_description\">Instalēšana neizdevās nezināma iemesla dēļ. Mēģināt vēlreiz?</string>\n  <string name=\"installation_aborted_description\">Instalēšana tika manuāli atcelta. Mēģināt vēlreiz?</string>\n  <string name=\"installation_blocked_description\">Instalēšana tika bloķēta. Pārskatiet ierīces drošības iestatījumus un mēģiniet vēlreiz.</string>\n  <string name=\"installation_conflict_description\">Instalēšanu novērsa esošā lietotnes instalācija. Atinstalēt instalēto lietotni un mēģināt vēlreiz?</string>\n  <string name=\"installation_incompatible_description\">Lietotne nav saderīga ar šo ierīci. Izmantojiet šai ierīcei saderīgu APK un mēģiniet vēlreiz.</string>\n  <string name=\"installation_invalid_description\">Lietotne ir nederīga. Atinstalēt lietotni un mēģināt vēlreiz?</string>\n  <string name=\"installation_storage_issue_description\">Lietotni nevarēja instalēt nepietiekamas krātuves dēļ. Atbrīvojiet vietu un mēģiniet vēlreiz.</string>\n  <string name=\"installation_timeout_description\">Instalēšana aizņēma pārāk ilgu laiku. Mēģināt vēlreiz?</string>\n  <string name=\"reinstall\">Pārinstalēt</string>\n  <string name=\"show\">Rādīt</string>\n  <string name=\"debugging\">Atkļūdošana</string>\n  <string name=\"about_device\">Par ierīci</string>\n  <string name=\"enter_url\">Ievadiet URL</string>\n  <string name=\"next\">Tālāk</string>\n  <string name=\"auto_update\">Automātiska atjaunināšana</string>\n  <string name=\"add_patches\">Pievienot ielāpes</string>\n  <string name=\"auto_update_description\">Automātiski atjaunināt, kad ir pieejama jauna versija</string>\n  <string name=\"patches_prereleases\">Izmantot pirmsizlaides versijas</string>\n  <string name=\"patches_prereleases_description\">Izmantot %s pirmsizlaides versijas</string>\n  <string name=\"patches_url\">Ielāpju URL</string>\n  <string name=\"incompatible_patches_dialog\">Šīs ielāpes nav saderīgas ar atlasīto lietotnes versiju (%1$s).\n\nNoklikšķiniet uz ielāpēm, lai skatītu sīkāku informāciju.</string>\n  <string name=\"incompatible_patch\">Nesaderīga ielāpe</string>\n  <string name=\"any_version\">Jebkura</string>\n  <string name=\"never_show_again\">Vairs nerādīt</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Rādīt atjauninājuma ziņojumu palaišanas brīdī</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Rādīt uznirstošo paziņojumu ikreiz, kad palaišanas brīdī ir pieejams jauns atjauninājums</string>\n  <string name=\"failed_to_import_keystore\">Neizdevās importēt atslēgu krātuvi</string>\n  <string name=\"export\">Eksportēt</string>\n  <string name=\"confirm\">Apstiprināt</string>\n  <string name=\"new_announcement\">Jauns paziņojums:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"zero\">%d ielāpu</item>\n    <item quantity=\"one\">%d ielāps</item>\n    <item quantity=\"other\">%d ielāpi</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"zero\">Izpildīt %d ielāpu</item>\n    <item quantity=\"one\">Izpildīt %d ielāpu</item>\n    <item quantity=\"other\">Izpildīt %d ielāpus</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"zero\">%d atlasīti</item>\n    <item quantity=\"one\">%d atlasīts</item>\n    <item quantity=\"other\">%d atlasīti</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-mk-rMK/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">Закрпувач</string>\n  <string name=\"onboarding_welcome_to\">Добредојдовте во</string>\n  <string name=\"onboarding_welcome_back\">Здраво! Тоа е новиот</string>\n  <string name=\"onboarding_apps_subtitle\">Можете да изберете апликација за закрпување сега или да го направите тоа подоцна</string>\n  <string name=\"onboarding_apps_network_error\">Не можеше да се вчитаат закрпите бидејќи мрежата е недостапна или нестабилна. Поврзете се на стабилна мрежа и обидете се повторно.</string>\n  <string name=\"onboarding_updates_subtitle\">Конфигурирајте автоматски ажурирања за да ги одржувате ReVanced Manager и закрпите ажурирани</string>\n  <string name=\"banner_sources_not_downloaded_description\">Закрпите и преземачите не можеа да бидат преземени за време на поставувањето. Допрете ажурирање за да ги преземете.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager ќе се поврзе со %s за да преземе почетни верзии доколку вашиот уред е поврзан на интернет.</string>\n  <string name=\"retry\">Повторен обид</string>\n  <string name=\"onboarding_skip\">Прескокни засега</string>\n  <string name=\"onboarding_recommended_version\">Препорачана верзија: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Прескокни дозволи?</string>\n  <string name=\"onboarding_permissions_skip_description\">Без потребните дозволи, некои функции може да не работат правилно. Можете да ги доделите подоцна во поставките на апликацијата.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Сепак прескокни</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager има потреба од неколку дозволи за правилно функционирање</string>\n  <string name=\"permission_install_apps\">Инсталирај непознати апликации</string>\n  <string name=\"permission_install_apps_description\">Потребно за инсталирање закрпени апликации</string>\n  <string name=\"permission_notifications\">Известувања</string>\n  <string name=\"permission_notifications_description\">Овозможува непречено закрпување во позадина</string>\n  <string name=\"permission_battery\">Оптимизација на батерија</string>\n  <string name=\"permission_battery_description\">Спречува прекин на закрпувањето во заднина</string>\n  <string name=\"permission_grant\">Додели</string>\n  <string name=\"downloader_host_permission_label\">Домаќин за преземање ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Се користи за контрола на пристап до преземачите на ReVanced Manager. Само ReVanced Manager го има ова.</string>\n  <string name=\"fab_patch_app\">Закрпи апликација</string>\n  <string name=\"fab_add_patches\">Додај закрпи</string>\n  <string name=\"new_downloader_notification\">Достапен(ни) е(се) нов(и) преземач(и). Кликнете тука за да ги конфигурирате.</string>\n  <string name=\"patches_not_downloaded\">Закрпите не се преземени.</string>\n  <string name=\"app_source_dialog_option_auto_description\">Користи инсталирана апликација, потоа преземена APK, потоа достапни преземачи</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Не се пронајдени компатибилни апликации или достапни преземачи</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Поставените апликации не може повторно да се закрпат без root пристап</string>\n  <string name=\"patch_selector_item\">Изберете закрпи</string>\n  <string name=\"patch_selector_item_description\">%d закрпи избрани</string>\n  <string name=\"patch_selection_changed_warning\">Изборот на закрпи е променет</string>\n  <string name=\"apk_source_selector_item\">Изберете извор на APK</string>\n  <string name=\"apk_source_auto\">Автоматски</string>\n  <string name=\"apk_source_auto_installed\">Автоматски · Користи инсталирана APK</string>\n  <string name=\"apk_source_auto_downloaded\">Автоматски · Користи преземена APK</string>\n  <string name=\"apk_source_auto_downloader\">Авто · Користење достапни преземачи</string>\n  <string name=\"apk_source_auto_storage\">Авто · Избери од складиште</string>\n  <string name=\"apk_source_downloaded\">Веќе преземено</string>\n  <string name=\"auto_updates_dialog_description\">Дали сакате ReVanced Manager периодично да проверува за ажурирања на следните компоненти?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced закрпи</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Преземачи</string>\n  <string name=\"auto_updates_dialog_note\">Овие поставки може да се променат подоцна.\n\n    ReVanced Manager ќе се поврзе со %s за да преземе почетни верзии доколку вашиот уред е поврзан на интернет.</string>\n  <string name=\"announcements_filter_tag\">Филтрирај по ознака</string>\n  <string name=\"announcements_show_archived\">Прикажи архивирани</string>\n  <string name=\"updates_description\">Проверете за ажурирања и прегледајте го дневникот на промени</string>\n  <string name=\"downloads_description\">Преземачи и преземени апликации</string>\n  <string name=\"safeguards_toggled_warning\">Заштитните мерки се променети</string>\n  <string name=\"about_app_name\">За %1$s</string>\n  <string name=\"search_languages\">Пребарај јазици…</string>\n  <string name=\"keystore\">Хранилиште на клучеви</string>\n  <string name=\"patches_selections\">Избори на закрпи</string>\n  <string name=\"select_bundle_for_import\">Изберете пакет за увоз</string>\n  <string name=\"select_bundle_for_export\">Изберете пакет за извоз</string>\n  <string name=\"patch_selection_packages\">Апликации со зачувани избори</string>\n  <string name=\"patch_selection_entries\">Вкупно избрани закрпи</string>\n  <string name=\"reset_configuration\">Ресетирај конфигурација</string>\n  <string name=\"reset_patch_selection\">Избори на закрпи</string>\n  <string name=\"reset_patch_options\">Опции за закрпување</string>\n  <string name=\"downloaders\">Преземачи</string>\n  <string name=\"downloader_prereleases\">Користи претходни изданија</string>\n  <string name=\"downloader_prereleases_description\">Користи претходни верзии на главниот преземач</string>\n  <string name=\"downloader_state_loaded\">Вчитано</string>\n  <string name=\"downloader_state_failed\">Неуспешно вчитување. Кликнете за повеќе детали</string>\n  <string name=\"downloader_state_missing\">Недостасува</string>\n  <string name=\"downloader_delete_apps_title\">Избриши избрани апликации</string>\n  <string name=\"downloader_delete_apps_description\">Дали сте сигурни дека сакате да ги избришете избраните апликации?</string>\n  <string name=\"downloader_delete_single_description\">Дали сте сигурни дека сакате да го избришете \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps_description\">Апликациите преземени преку ReVanced Manager ќе се појават тука.</string>\n  <string name=\"downloader_url\">URL на преземачот</string>\n  <string name=\"downloader_add\">Додај преземач</string>\n  <string name=\"select_downloader_type_dialog_description\">Додај нови преземачи од URL или локални датотеки</string>\n  <string name=\"local_downloaders_description\">Додај преземачи од локално складирање.</string>\n  <string name=\"remote_downloaders_description\">Додај преземачи од URL. Може автоматски да се ажурира.</string>\n  <string name=\"install_revanced_downloaders\">Инсталирајте преземачи за да добиете апликации директно во ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Инсталирај ReVanced преземачи</string>\n  <string name=\"cancel_downloader_install_title\">Откажи инсталација на преземачи?</string>\n  <string name=\"cancel_downloader_install_description\">Инсталацијата на преземачи е во тек. Ако заминете сега, преземањето ќе биде откажано.</string>\n  <string name=\"downloader_sources_unavailable_title\">Овие преземачи недостасуваат</string>\n  <string name=\"downloader_sources_unavailable_description\">Кликнете на копчето за ажурирање за да го поправите.</string>\n  <string name=\"downloader_update_failed\">Неуспешно ажурирање на преземачот: %s</string>\n  <string name=\"downloader_replace_fail\">Неуспешно увезување на преземачот: %s</string>\n  <string name=\"select_from_storage_description\">Изберете APK датотека од складиштето користејќи избирач на датотеки</string>\n  <string name=\"enable\">Овозможи</string>\n  <string name=\"disable\">Оневозможи</string>\n  <string name=\"process_runtime_memory_limit_description\">Максимална количина на меморија што може да ја користи процесот на закрпување</string>\n  <string name=\"reset_onboarding\">Ресетирај го воведот</string>\n  <string name=\"reset_onboarding_description\">Прикажи го воведниот екран при следното стартување на апликацијата</string>\n  <string name=\"api_not_working_title\">Услугата API моментално не е достапна</string>\n  <string name=\"api_not_working_description\">Некои функции може да бидат засегнати. Проверете ја вашата врска или API URL-то во поставките.</string>\n  <string name=\"no_patched_apps_found\">Не се пронајдени закрпени апликации</string>\n  <string name=\"no_patched_apps_description\">Моментално немате закрпени апликации за кои знаеме. Променете го тоа со закрпување на вашата прва апликација!</string>\n  <string name=\"patched_apps_section_title\">Закрпени апликации</string>\n  <string name=\"patchable_apps_section_title\">Апликации кои може да се закрпат</string>\n  <string name=\"no_patches_found\">Не се пронајдени закрпи</string>\n  <string name=\"no_patches_description\">Сè уште немате закрпи. Додадете закрпи со допирање на копчето подолу!</string>\n  <string name=\"split_apk_not_supported\">Поделени APK-и не можат да се закрпат</string>\n  <string name=\"no_downloaders_installed\">Нема инсталирани преземачи на апликации!</string>\n  <string name=\"no_downloaders_trusted\">Нема доделено доверба на ниту еден преземач на апликации! Ве молиме проверете ги вашите поставки.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Пакети</string>\n  <string name=\"patch_selector_sheet_actions_title\">Дејства</string>\n  <string name=\"restore_default_selection\">Врати го стандардниот избор</string>\n  <string name=\"deselect_all\">Поништи го изборот на сите</string>\n  <string name=\"invert_selection\">Инвертирај избор</string>\n  <string name=\"deselect_all_except\">Отштиклирај ги сите освен %s</string>\n  <string name=\"scope_dialog_title\">Примени на</string>\n  <string name=\"scope_all_patches\">Сите закрпи</string>\n  <string name=\"scope_bundle_patches\">%s само</string>\n  <string name=\"save_as_file\">Зачувај во датотеки</string>\n  <string name=\"export_patcher_logs\">Извези дневници на закрпувачот</string>\n  <string name=\"save_logs_success\">Дневниците се зачувани</string>\n  <string name=\"downloader_activity_dialog_body\">Потребна е интеракција со корисникот за да се продолжи со овој преземач.</string>\n  <string name=\"patcher_step_unpack\">Подготви крпач</string>\n  <string name=\"view_announcement\">Погледни објава</string>\n  <string name=\"license\">Лиценца</string>\n  <string name=\"source\">Извор</string>\n  <string name=\"repository\">Складиште</string>\n  <string name=\"bundle_information_by_author\">Од %1$s</string>\n  <string name=\"version_compatibility_warning\">Избраната верзија може да е некомпатибилна со избраните закрпи</string>\n  <string name=\"announcements\">Објави</string>\n  <string name=\"archive\">Архива</string>\n  <string name=\"view_update\">Погледни ажурирање</string>\n  <string name=\"update_checking_downloader\">Провери за ажурирања на ReVanced Downloaders при стартување</string>\n  <string name=\"update_checking_downloader_description\">Проверете за ажурирања на инсталираните ReVanced Downloaders кога ќе се стартува апликацијата</string>\n  <string name=\"prereleases_warning\">Пред-изданијата може да бидат нестабилни и да содржат грешки. Може да доживеете падови, губење податоци или други неочекувани проблеми. Овозможете го ова само ако сте запознаени со овие ризици.</string>\n  <string name=\"changelog\">Погледни дневник на промени</string>\n  <string name=\"no_announcements_found\">Не се пронајдени објави</string>\n  <string name=\"new_announcement\">Нова објава:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d крпка</item>\n    <item quantity=\"other\">%d крпки</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Изврши %d крпка</item>\n    <item quantity=\"other\">Изврши %d крпки</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d избрано</item>\n    <item quantity=\"other\">%d избрани</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ml-rIN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">പാച്ചർ</string>\n  <string name=\"onboarding_welcome_to\">ലേക്ക് സ്വാഗതം</string>\n  <string name=\"onboarding_welcome_back\">ഹായ്! ഇത് പുതിയ</string>\n  <string name=\"onboarding_apps_subtitle\">നിങ്ങൾക്ക് ഇപ്പോൾ ഒരു ആപ്പ് പാച്ച് ചെയ്യാനോ പിന്നീട് ചെയ്യാനോ തിരഞ്ഞെടുക്കാം</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager-നെയും പാച്ചുകളെയും കാലികമായി നിലനിർത്താൻ ഓട്ടോമാറ്റിക് അപ്ഡേറ്റുകൾ കോൺഫിഗർ ചെയ്യുക</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager നിങ്ങളുടെ ഉപകരണം ഇൻ്റർനെറ്റുമായി ബന്ധിപ്പിച്ചിട്ടുണ്ടെങ്കിൽ, ആദ്യകാല പതിപ്പുകൾ ഡൗൺലോഡ് ചെയ്യുന്നതിനായി %s ലേക്ക് കണക്ട് ചെയ്യും.</string>\n  <string name=\"retry\">വീണ്ടും ശ്രമിക്കുക</string>\n  <string name=\"onboarding_skip\">ഇപ്പോൾ ഒഴിവാക്കുക</string>\n  <string name=\"onboarding_recommended_version\">ശുപാർശ ചെയ്യുന്ന പതിപ്പ്: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">അനുമതികൾ ഒഴിവാക്കണോ?</string>\n  <string name=\"onboarding_permissions_skip_description\">ആവശ്യമായ അനുമതികളില്ലാതെ, ചില സവിശേഷതകൾ ശരിയായി പ്രവർത്തിച്ചേക്കില്ല. ആപ്പ് ക്രമീകരണങ്ങളിൽ നിങ്ങൾക്ക് അവ പിന്നീട് നൽകാം.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">എന്തായാലും ഒഴിവാക്കുക</string>\n  <string name=\"onboarding_permissions_subtitle\">ശരിയായി പ്രവർത്തിക്കാൻ ReVanced Manager-ന് ചില അനുമതികൾ ആവശ്യമാണ്</string>\n  <string name=\"permission_install_apps\">അജ്ഞാത ആപ്പുകൾ ഇൻസ്റ്റാൾ ചെയ്യുക</string>\n  <string name=\"permission_install_apps_description\">പാച്ച് ചെയ്ത ആപ്ലിക്കേഷനുകൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ ആവശ്യമാണ്</string>\n  <string name=\"permission_notifications\">അറിയിപ്പുകൾ</string>\n  <string name=\"permission_battery\">ബാറ്ററി ഒപ്റ്റിമൈസേഷൻ</string>\n  <string name=\"permission_battery_description\">പശ്ചാത്തലത്തിൽ പാച്ചിംഗ് തടസ്സപ്പെടുന്നത് തടയുന്നു</string>\n  <string name=\"permission_grant\">അനുവദിക്കുക</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager ഡൗൺലോഡർ ഹോസ്റ്റ്</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager ഡൗൺലോഡറുകളിലേക്കുള്ള ലഭ്യത നിയന്ത്രിക്കാൻ ഉപയോഗിക്കുന്നു. ReVanced Manager-ന് മാത്രം ഇതിനുള്ള അധികാരമുണ്ട്.</string>\n  <string name=\"fab_patch_app\">ഒരു ആപ്പ് പാച്ച് ചെയ്യുക</string>\n  <string name=\"fab_add_patches\">പാച്ചുകൾ ചേർക്കുക</string>\n  <string name=\"new_downloader_notification\">പുതിയ ഡൗൺലോഡർ(കൾ) ലഭ്യമാണ്. അവ കോൺഫിഗർ ചെയ്യാൻ ഇവിടെ ക്ലിക്ക് ചെയ്യുക.</string>\n  <string name=\"patches_not_downloaded\">പാച്ചുകൾ ഡൗൺലോഡ് ചെയ്തിട്ടില്ല.</string>\n  <string name=\"app_source_dialog_option_auto_description\">ഇൻസ്റ്റാൾ ചെയ്ത ആപ്പ് ഉപയോഗിക്കുക, തുടർന്ന് ഡൗൺലോഡ് ചെയ്ത APK, തുടർന്ന് ലഭ്യമായ ഡൗൺലോഡറുകൾ</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">അനുയോജ്യമായ ആപ്പോ ഡൗൺലോഡറുകളോ ലഭ്യമല്ല</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">റൂട്ട് അനുമതിയില്ലാതെ മൗണ്ട് ചെയ്ത ആപ്പുകൾക്ക് വീണ്ടും പാച്ച് ചെയ്യാൻ കഴിയില്ല</string>\n  <string name=\"patch_selector_item\">പാച്ചുകൾ തിരഞ്ഞെടുക്കുക</string>\n  <string name=\"patch_selector_item_description\">%d പാച്ചുകൾ തിരഞ്ഞെടുത്തു</string>\n  <string name=\"patch_selection_changed_warning\">പാച്ചുകളുടെ തിരഞ്ഞെടുപ്പ് മാറ്റിയിരിക്കുന്നു</string>\n  <string name=\"apk_source_selector_item\">APK ഉറവിടം തിരഞ്ഞെടുക്കുക</string>\n  <string name=\"apk_source_auto\">ഓട്ടോ</string>\n  <string name=\"apk_source_auto_installed\">ഓട്ടോ · ഇൻസ്റ്റാൾ ചെയ്ത APK ഉപയോഗിക്കുന്നു</string>\n  <string name=\"apk_source_auto_downloaded\">ഓട്ടോ · ഡൗൺലോഡ് ചെയ്ത APK ഉപയോഗിക്കുന്നു</string>\n  <string name=\"apk_source_auto_downloader\">ഓട്ടോ · ലഭ്യമായ ഡൗൺലോഡറുകൾ ഉപയോഗിച്ച്</string>\n  <string name=\"apk_source_auto_storage\">ഓട്ടോ · സ്റ്റോറേജിൽ നിന്ന് തിരഞ്ഞെടുക്കുക</string>\n  <string name=\"apk_source_downloaded\">ഇതിനകം ഡൗൺലോഡ് ചെയ്തത്</string>\n  <string name=\"auto_updates_dialog_description\">താഴെ പറയുന്ന ഘടകങ്ങൾക്കായി ReVanced Manager പതിവായി അപ്ഡേറ്റുകൾ പരിശോധിക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced പാച്ചുകൾ</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: ഡൗൺലോഡറുകൾ</string>\n  <string name=\"auto_updates_dialog_note\">ഈ ക്രമീകരണങ്ങൾ പിന്നീട് മാറ്റാവുന്നതാണ്.\n\n    ReVanced Manager നിങ്ങളുടെ ഉപകരണം ഇൻ്റർനെറ്റുമായി ബന്ധിപ്പിച്ചിട്ടുണ്ടെങ്കിൽ, ആദ്യകാല പതിപ്പുകൾ ഡൗൺലോഡ് ചെയ്യുന്നതിനായി %s ലേക്ക് കണക്ട് ചെയ്യും.</string>\n  <string name=\"announcements_filter_tag\">ടാഗ് ഉപയോഗിച്ച് ഫിൽട്ടർ ചെയ്യുക</string>\n  <string name=\"announcements_show_archived\">ആർക്കൈവ് ചെയ്തവ കാണിക്കുക</string>\n  <string name=\"updates_description\">അപ്ഡേറ്റുകൾക്കായി പരിശോധിക്കുകയും ചേഞ്ച്‌ലോഗ് കാണുകയും ചെയ്യുക</string>\n  <string name=\"downloads_description\">ഡൗൺലോഡറുകളും ഡൗൺലോഡ് ചെയ്ത ആപ്പുകളും</string>\n  <string name=\"safeguards_toggled_warning\">സുരക്ഷാ സംവിധാനങ്ങൾ മാറ്റിയിരിക്കുന്നു</string>\n  <string name=\"about_app_name\">%1$s നെക്കുറിച്ച്</string>\n  <string name=\"search_languages\">ഭാഷകൾ തിരയുക…</string>\n  <string name=\"keystore\">കീസ്റ്റോർ</string>\n  <string name=\"patches_selections\">പാച്ചുകൾ തിരഞ്ഞെടുക്കലുകൾ</string>\n  <string name=\"select_bundle_for_import\">ഇറക്കുമതി ചെയ്യാൻ ബണ്ടിൽ തിരഞ്ഞെടുക്കുക</string>\n  <string name=\"select_bundle_for_export\">കയറ്റുമതി ചെയ്യാൻ ബണ്ടിൽ തിരഞ്ഞെടുക്കുക</string>\n  <string name=\"patch_selection_packages\">സംരക്ഷിച്ച തിരഞ്ഞെടുക്കലുകളുള്ള ആപ്പുകൾ</string>\n  <string name=\"patch_selection_entries\">ആകെ തിരഞ്ഞെടുത്ത പാച്ചുകൾ</string>\n  <string name=\"reset_configuration\">കോൺഫിഗറേഷൻ പുനഃസജ്ജമാക്കുക</string>\n  <string name=\"reset_patch_selection\">പാച്ച് തിരഞ്ഞെടുക്കലുകൾ</string>\n  <string name=\"reset_patch_options\">പാച്ച് ഓപ്ഷനുകൾ</string>\n  <string name=\"downloaders\">ഡൗൺലോഡറുകൾ</string>\n  <string name=\"downloader_prereleases\">പ്രീ-റിലീസുകൾ ഉപയോഗിക്കുക</string>\n  <string name=\"downloader_prereleases_description\">പ്രധാന ഡൗൺലോഡറിന്റെ പ്രീ-റിലീസ് പതിപ്പുകൾ ഉപയോഗിക്കുക</string>\n  <string name=\"downloader_state_loaded\">ലോഡ് ചെയ്തു</string>\n  <string name=\"downloader_state_failed\">ലോഡ് ചെയ്യാൻ കഴിഞ്ഞില്ല. കൂടുതൽ വിവരങ്ങൾക്കായി ക്ലിക്ക് ചെയ്യുക</string>\n  <string name=\"downloader_state_missing\">കാണുന്നില്ല</string>\n  <string name=\"downloader_delete_apps_title\">തിരഞ്ഞെടുത്ത ആപ്പുകൾ ഇല്ലാതാക്കുക</string>\n  <string name=\"downloader_delete_apps_description\">തിരഞ്ഞെടുത്ത ആപ്പുകൾ ഇല്ലാതാക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടെന്ന് ഉറപ്പാണോ?</string>\n  <string name=\"downloader_delete_single_description\">\\\"%s\\\" ഇല്ലാതാക്കാൻ നിങ്ങൾ ഉറപ്പാണോ?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager വഴി ഡൗൺലോഡ് ചെയ്ത ആപ്പുകൾ ഇവിടെ ദൃശ്യമാകും.</string>\n  <string name=\"downloader_url\">ഡൗൺലോഡർ URL</string>\n  <string name=\"downloader_add\">ഡൗൺലോഡർ ചേർക്കുക</string>\n  <string name=\"select_downloader_type_dialog_description\">URL-ൽ നിന്നോ പ്രാദേശിക ഫയലുകളിൽ നിന്നോ പുതിയ ഡൗൺലോഡറുകൾ ചേർക്കുക</string>\n  <string name=\"local_downloaders_description\">പ്രാദേശിക സ്റ്റോറേജിൽ നിന്ന് ഡൗൺലോഡറുകൾ ചേർക്കുക.</string>\n  <string name=\"remote_downloaders_description\">URL-ൽ നിന്ന് ഡൗൺലോഡറുകൾ ചേർക്കുക. ഇത് സ്വയമേവ അപ്‌ഡേറ്റ് ചെയ്യാൻ കഴിയും.</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager-നുള്ളിൽ നിന്ന് നേരിട്ട് ആപ്പുകൾ ലഭിക്കുന്നതിന് ഡൗൺലോഡറുകൾ ഇൻസ്റ്റാൾ ചെയ്യുക.</string>\n  <string name=\"install_revanced_downloader\">ReVanced ഡൗൺലോഡറുകൾ ഇൻസ്റ്റാൾ ചെയ്യുക</string>\n  <string name=\"cancel_downloader_install_title\">ഡൗൺലോഡറുകൾ ഇൻസ്റ്റാളേഷൻ റദ്ദാക്കണോ?</string>\n  <string name=\"cancel_downloader_install_description\">ഡൗൺലോഡറുകൾ ഇൻസ്റ്റാളേഷൻ നടന്നുകൊണ്ടിരിക്കുന്നു. ഇപ്പോൾ നിങ്ങൾ ഉപേക്ഷിക്കുകയാണെങ്കിൽ, ഡൗൺലോഡ് റദ്ദാക്കപ്പെടും.</string>\n  <string name=\"downloader_sources_unavailable_title\">ഈ ഡൗൺലോഡറുകൾ കാണുന്നില്ല</string>\n  <string name=\"downloader_sources_unavailable_description\">ഇത് ശരിയാക്കാൻ അപ്‌ഡേറ്റ് ബട്ടണിൽ ക്ലിക്കുചെയ്യുക.</string>\n  <string name=\"downloader_update_failed\">ഡൗൺലോഡർ അപ്‌ഡേറ്റ് ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു: %s</string>\n  <string name=\"downloader_replace_fail\">ഡൗൺലോഡർ ഇമ്പോർട്ട് ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു: %s</string>\n  <string name=\"select_from_storage_description\">ഫയൽ പിക്കർ ഉപയോഗിച്ച് സ്റ്റോറേജിൽ നിന്ന് ഒരു APK ഫയൽ തിരഞ്ഞെടുക്കുക</string>\n  <string name=\"enable\">പ്രവർത്തനക്ഷമമാക്കുക</string>\n  <string name=\"disable\">പ്രവർത്തനരഹിതമാക്കുക</string>\n  <string name=\"process_runtime_memory_limit_description\">പാച്ചർ പ്രോസസ്സിന് ഉപയോഗിക്കാൻ കഴിയുന്ന പരമാവധി മെമ്മറി അളവ്</string>\n  <string name=\"reset_onboarding\">ഓൺബോർഡിംഗ് പുനഃസജ്ജമാക്കുക</string>\n  <string name=\"reset_onboarding_description\">അടുത്ത ആപ്പ് ലോഞ്ചിൽ ഓൺബോർഡിംഗ് സ്ക്രീൻ കാണിക്കുക</string>\n  <string name=\"api_not_working_title\">API സേവനം നിലവിൽ ലഭ്യമല്ല</string>\n  <string name=\"api_not_working_description\">ചില ഫീച്ചറുകളെ ഇത് ബാധിച്ചേക്കാം. നിങ്ങളുടെ കണക്ഷൻ അല്ലെങ്കിൽ API URL ക്രമീകരണങ്ങളിൽ പരിശോധിക്കുക.</string>\n  <string name=\"no_patched_apps_found\">പാച്ച് ചെയ്ത ആപ്പുകളൊന്നും കണ്ടെത്തിയില്ല</string>\n  <string name=\"no_patched_apps_description\">നിലവിൽ നിങ്ങൾക്ക് പാച്ച് ചെയ്ത ആപ്പുകളൊന്നും ഉള്ളതായി ഞങ്ങൾക്കറിയില്ല. നിങ്ങളുടെ ആദ്യ ആപ്പ് പാച്ച് ചെയ്തുകൊണ്ട് അത് മാറ്റുക!</string>\n  <string name=\"patched_apps_section_title\">പാച്ച് ചെയ്ത ആപ്പുകൾ</string>\n  <string name=\"patchable_apps_section_title\">പാച്ച് ചെയ്യാൻ കഴിയുന്ന ആപ്പുകൾ</string>\n  <string name=\"no_patches_found\">പാച്ചുകളൊന്നും കണ്ടെത്തിയില്ല</string>\n  <string name=\"no_patches_description\">നിങ്ങൾക്ക് ഇതുവരെ പാച്ചുകളൊന്നും ലഭിച്ചിട്ടില്ല. താഴെയുള്ള ബട്ടണിൽ ടാപ്പുചെയ്ത് പാച്ചുകൾ ചേർക്കുക!</string>\n  <string name=\"split_apk_not_supported\">സ്പ്ലിറ്റ് APK-കൾ പാച്ച് ചെയ്യാൻ കഴിയില്ല</string>\n  <string name=\"no_downloaders_installed\">ആപ്പ് ഡൗൺലോഡറുകളൊന്നും ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല!</string>\n  <string name=\"no_downloaders_trusted\">ആപ്പ് ഡൗൺലോഡറുകളൊന്നും വിശ്വസനീയമാക്കിയിട്ടില്ല! നിങ്ങളുടെ ക്രമീകരണങ്ങൾ പരിശോധിക്കുക.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">പാക്കേജുകൾ</string>\n  <string name=\"patch_selector_sheet_actions_title\">പ്രവർത്തനങ്ങൾ</string>\n  <string name=\"restore_default_selection\">ഡിഫോൾട്ട് തിരഞ്ഞെടുക്കൽ പുനഃസ്ഥാപിക്കുക</string>\n  <string name=\"deselect_all\">എല്ലാം തിരഞ്ഞെടുക്കുന്നത് റദ്ദാക്കുക</string>\n  <string name=\"invert_selection\">തിരഞ്ഞെടുക്കൽ വിപരീതമാക്കുക</string>\n  <string name=\"deselect_all_except\">%s ഒഴികെ മറ്റെല്ലാം തിരഞ്ഞെടുക്കൽ റദ്ദാക്കുക.</string>\n  <string name=\"scope_dialog_title\">ഇതിലേക്ക് പ്രയോഗിക്കുക.</string>\n  <string name=\"scope_all_patches\">എല്ലാ പാച്ചുകളും.</string>\n  <string name=\"scope_bundle_patches\">%s മാത്രം.</string>\n  <string name=\"save_as_file\">ഫയലുകളിലേക്ക് സംരക്ഷിക്കുക</string>\n  <string name=\"export_patcher_logs\">പാച്ചർ ലോഗുകൾ കയറ്റുമതി ചെയ്യുക</string>\n  <string name=\"save_logs_success\">ലോഗുകൾ സംരക്ഷിച്ചു</string>\n  <string name=\"downloader_activity_dialog_body\">ഈ ഡൗൺലോഡറുമായി മുന്നോട്ട് പോകാൻ ഉപയോക്തൃ ഇടപെടൽ ആവശ്യമാണ്.</string>\n  <string name=\"patcher_step_unpack\">പാച്ചർ തയ്യാറാക്കുക</string>\n  <string name=\"view_announcement\">അറിയിപ്പ് കാണുക</string>\n  <string name=\"license\">ലൈസൻസ്</string>\n  <string name=\"source\">ഉറവിടം</string>\n  <string name=\"repository\">റിപ്പോസിറ്ററി</string>\n  <string name=\"bundle_information_by_author\">%1$s എഴുതിയത്</string>\n  <string name=\"version_compatibility_warning\">തിരഞ്ഞെടുത്ത പതിപ്പ് തിരഞ്ഞെടുത്ത പാച്ചുകളുമായി അനുയോജ്യമല്ലാതിരിക്കാം</string>\n  <string name=\"announcements\">അറിയിപ്പുകൾ</string>\n  <string name=\"archive\">ആർക്കൈവ്</string>\n  <string name=\"view_update\">അപ്ഡേറ്റ് കാണുക</string>\n  <string name=\"update_checking_downloader\">ലോഞ്ചിൽ ReVanced ഡൗൺലോഡറുകൾ അപ്ഡേറ്റുകൾക്കായി പരിശോധിക്കുക</string>\n  <string name=\"update_checking_downloader_description\">ആപ്ലിക്കേഷൻ ആരംഭിക്കുമ്പോൾ ഇൻസ്റ്റാൾ ചെയ്ത ReVanced ഡൗൺലോഡറുകളുടെ അപ്ഡേറ്റുകൾക്കായി പരിശോധിക്കുക</string>\n  <string name=\"prereleases_warning\">പ്രീ-റിലീസ് പതിപ്പുകൾ അസ്ഥിരമായിരിക്കാം കൂടാതെ ബഗുകൾ അടങ്ങിയിരിക്കാം. നിങ്ങൾക്ക് ക്രാഷുകൾ, ഡാറ്റാ നഷ്ടം, അല്ലെങ്കിൽ മറ്റ് അപ്രതീക്ഷിത പ്രശ്നങ്ങൾ എന്നിവ അനുഭവപ്പെട്ടേക്കാം. ഈ അപകടസാധ്യതകൾ സ്വീകാര്യമാണെങ്കിൽ മാത്രം ഇത് പ്രവർത്തനക്ഷമമാക്കുക.</string>\n  <string name=\"changelog\">ചേഞ്ച്‌ലോഗ് കാണുക</string>\n  <string name=\"no_announcements_found\">പ്രഖ്യാപനങ്ങളൊന്നും കണ്ടെത്തിയില്ല</string>\n  <string name=\"new_announcement\">പുതിയ പ്രഖ്യാപനം:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d പാച്ച്</item>\n    <item quantity=\"other\">%d പാച്ചുകൾ</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d പാച്ച് പ്രവർത്തിപ്പിക്കുക</item>\n    <item quantity=\"other\">%d പാച്ചുകൾ പ്രവർത്തിപ്പിക്കുക</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d തിരഞ്ഞെടുത്തു</item>\n    <item quantity=\"other\">%d തിരഞ്ഞെടുത്തു</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-mn-rMN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">Нөхөгч</string>\n  <string name=\"onboarding_welcome_to\">Тавтай морилно уу</string>\n  <string name=\"onboarding_welcome_back\">Сайн уу! Энэ бол шинэ</string>\n  <string name=\"onboarding_apps_subtitle\">Та одоо засварлах апп сонгох эсвэл дараа хийх боломжтой</string>\n  <string name=\"onboarding_apps_network_error\">Сүлжээ боломжгүй эсвэл тогтворгүй байгаа тул нөхөөсүүдийг ачаалж чадсангүй. Тогтвортой сүлжээнд холбогдоод дахин оролдоно уу.</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager болон засваруудыг орчин үеийн байлгахын тулд автомат шинэчлэлтүүдийг тохируулах</string>\n  <string name=\"banner_sources_not_downloaded_description\">Тохируулах явцад нөхөөс болон татагчдыг татаж авч чадаагүй. Татаж авахын тулд шинэчлэх товчийг дарна уу.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager таны төхөөрөмж интернетэд холбогдсон бол анхны хувилбаруудыг татаж авахын тулд %s-т холбогдоно.</string>\n  <string name=\"retry\">Дахин оролдох</string>\n  <string name=\"onboarding_skip\">Одоохондоо алгасах</string>\n  <string name=\"onboarding_recommended_version\">Санал болгосон хувилбар: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Зөвшөөрлүүдийг алгасах уу?</string>\n  <string name=\"onboarding_permissions_skip_description\">Шаардлагатай зөвшөөрөлгүйгээр зарим функцууд зөв ажиллахгүй байж болно. Та дараа нь аппын тохиргооноос зөвшөөрөл олгож болно.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Ямар ч байсан алгасах</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager зөв ажиллахын тулд хэд хэдэн зөвшөөрөл шаардлагатай.</string>\n  <string name=\"permission_install_apps\">Үл мэдэгдэх апп-уудыг суулгах</string>\n  <string name=\"permission_install_apps_description\">Нөхсөн аппликешнүүдийг суулгахад шаардлагатай</string>\n  <string name=\"permission_notifications\">Мэдэгдлүүд</string>\n  <string name=\"permission_notifications_description\">Арын дэвсгэр дээр тасралтгүй нөхөөс хийх боломжийг олгоно</string>\n  <string name=\"permission_battery\">Зайны оновчлол</string>\n  <string name=\"permission_battery_description\">Нөхөлтийг цаана нь тасалдахаас сэргийлнэ</string>\n  <string name=\"permission_grant\">Олгох</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager татагчийн хост</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager татагчид нэвтрэх эрхийг хянах зорилгоор ашиглана. Зөвхөн ReVanced Manager-т энэ нь бий.</string>\n  <string name=\"fab_patch_app\">Апп нөхөх</string>\n  <string name=\"fab_add_patches\">Нөхөлтүүд нэмэх</string>\n  <string name=\"new_downloader_notification\">Шинэ татагч(ууд) бэлэн байна. Тохируулахын тулд энд дарна уу.</string>\n  <string name=\"patches_not_downloaded\">Нөхөөсийг татаагүй байна.</string>\n  <string name=\"app_source_dialog_option_auto_description\">Суулгасан апп-ыг ашиглана, дараа нь татаж авсан APK, дараа нь боломжтой татагчдыг</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Тохиромжтой апп эсвэл татагч олдсонгүй</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Суулгасан апп-уудыг root хандалтгүйгээр дахин засварлах боломжгүй</string>\n  <string name=\"patch_selector_item\">Нөхөлтүүдийг сонгох</string>\n  <string name=\"patch_selector_item_description\">%d нөхөлт сонгогдсон</string>\n  <string name=\"patch_selection_changed_warning\">Нөхөөсний сонголтыг өөрчилсөн байна</string>\n  <string name=\"apk_source_selector_item\">APK эх үүсвэрийг сонгох</string>\n  <string name=\"apk_source_auto\">Авто</string>\n  <string name=\"apk_source_auto_installed\">Авто · Суулгасан APK-г ашиглах</string>\n  <string name=\"apk_source_auto_downloaded\">Авто · Татаж авсан APK-г ашиглах</string>\n  <string name=\"apk_source_auto_downloader\">Автомат · боломжтой татагчдыг ашиглан</string>\n  <string name=\"apk_source_auto_storage\">Автомат · санах ойн хэсгээс сонгох</string>\n  <string name=\"apk_source_downloaded\">Аль хэдийн татагдсан</string>\n  <string name=\"auto_updates_dialog_description\">ReVanced Manager-ийг дараах бүрэлдэхүүн хэсгүүдийн шинэчлэлтийг үе үе шалгахыг хүсэж байна уу?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Нөхөлтүүд</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Татагчид</string>\n  <string name=\"auto_updates_dialog_note\">Эдгээр тохиргоог дараа нь өөрчилж болно.\n\n    ReVanced Manager таны төхөөрөмж интернетэд холбогдсон бол анхны хувилбаруудыг татаж авахын тулд %s-т холбогдоно.</string>\n  <string name=\"announcements_filter_tag\">Шошгоор шүүх</string>\n  <string name=\"announcements_show_archived\">Архивлагдсаныг харуулах</string>\n  <string name=\"updates_description\">Шинэчлэлтүүдийг шалгах ба өөрчлөлтийн бүртгэлийг харах</string>\n  <string name=\"downloads_description\">Татаж авагчид болон татагдсан аппууд</string>\n  <string name=\"safeguards_toggled_warning\">Хамгаалалтыг асааж/унтраасан байна</string>\n  <string name=\"about_app_name\">%1$s-ийн тухай</string>\n  <string name=\"search_languages\">Хэл хайх…</string>\n  <string name=\"keystore\">Кейсторе</string>\n  <string name=\"patches_selections\">Нөхөлтийн сонголтууд</string>\n  <string name=\"select_bundle_for_import\">Импортлох багцыг сонгоно уу</string>\n  <string name=\"select_bundle_for_export\">Экспортлох багцыг сонгоно уу</string>\n  <string name=\"patch_selection_packages\">Хадгалсан сонголттой апп-ууд</string>\n  <string name=\"patch_selection_entries\">Нийт сонгогдсон нөхөлтүүд</string>\n  <string name=\"reset_configuration\">Тохиргоог дахин тохируулах</string>\n  <string name=\"reset_patch_selection\">Нөхөлтийн сонголтууд</string>\n  <string name=\"reset_patch_options\">Нөхөлтийн сонголтууд</string>\n  <string name=\"downloaders\">Татаж авагчид</string>\n  <string name=\"downloader_prereleases\">Урьдчилан гаргасан хувилбаруудыг ашиглах</string>\n  <string name=\"downloader_prereleases_description\">Үндсэн татагчийн урьдчилан гаргасан хувилбаруудыг ашиглах</string>\n  <string name=\"downloader_state_loaded\">Ачааллагдсан</string>\n  <string name=\"downloader_state_failed\">Ачаалж чадсангүй. Дэлгэрэнгүй мэдээлэл авахыг хүсвэл дарна уу</string>\n  <string name=\"downloader_state_missing\">Алдагдсан</string>\n  <string name=\"downloader_delete_apps_title\">Сонгосон аппуудыг устгах</string>\n  <string name=\"downloader_delete_apps_description\">Сонгосон аппуудыг устгахдаа итгэлтэй байна уу?</string>\n  <string name=\"downloader_delete_single_description\">\\\"%s\\\"-ийг устгахдаа итгэлтэй байна уу?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager-ээр татагдсан апп-ууд энд харагдах болно.</string>\n  <string name=\"downloader_url\">Татаж авагчийн URL</string>\n  <string name=\"downloader_add\">Татаж авагч нэмэх</string>\n  <string name=\"select_downloader_type_dialog_description\">Шинэ татаж авагчдыг URL эсвэл дотоод файлуудаас нэмнэ үү</string>\n  <string name=\"local_downloaders_description\">Дотоод санах ойгоос татаж авагчдыг нэмнэ үү.</string>\n  <string name=\"remote_downloaders_description\">URL-ээс татаж авагчдыг нэмнэ үү. Автоматаар шинэчлэгдэх боломжтой.</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager дотор апп-уудыг шууд авахын тулд татагчуудыг суулгана уу.</string>\n  <string name=\"install_revanced_downloader\">ReVanced Татагчуудыг суулгах</string>\n  <string name=\"cancel_downloader_install_title\">Татагчуудын суулгалтыг цуцлах уу?</string>\n  <string name=\"cancel_downloader_install_description\">Татагчуудын суулгалт явагдаж байна. Хэрэв та одоо гарах юм бол таталт цуцлагдах болно.</string>\n  <string name=\"downloader_sources_unavailable_title\">Эдгээр татаж авагчид алдагдсан байна</string>\n  <string name=\"downloader_sources_unavailable_description\">Шийдэхийн тулд шинэчлэх товчийг дарна уу.</string>\n  <string name=\"downloader_update_failed\">Татаж авагчийг шинэчлэх амжилтгүй боллоо: %s</string>\n  <string name=\"downloader_replace_fail\">Татаж авагчийг импортлох амжилтгүй боллоо: %s</string>\n  <string name=\"select_from_storage_description\">Файлын сонгогч ашиглан хадгалахаас APK файлыг сонгоно уу</string>\n  <string name=\"enable\">Идэвхжүүлэх</string>\n  <string name=\"disable\">Идэвхгүй болгох</string>\n  <string name=\"process_runtime_memory_limit_description\">Нөхөгч процессийн ашиглах боломжтой хамгийн их санах ойн хэмжээ</string>\n  <string name=\"reset_onboarding\">Анхны тохиргоог дахин тохируулах</string>\n  <string name=\"reset_onboarding_description\">Дараагийн апп эхлүүлэхэд анхны тохиргооны дэлгэцийг харуулах</string>\n  <string name=\"api_not_working_title\">API үйлчилгээ одоогоор ажиллахгүй байна</string>\n  <string name=\"api_not_working_description\">Зарим функцэд нөлөөлж болзошгүй. Тохиргооноос холболт эсвэл API URL-ээ шалгана уу.</string>\n  <string name=\"no_patched_apps_found\">Нөхсөн апп олдсонгүй</string>\n  <string name=\"no_patched_apps_description\">Та одоогоор бидний мэдэх нэг ч нөхсөн апп байхгүй байна. Эхний апп-аа нөхөж үүнийг өөрчил!</string>\n  <string name=\"patched_apps_section_title\">Нөхсөн аппууд</string>\n  <string name=\"patchable_apps_section_title\">Нөхөж болох аппууд</string>\n  <string name=\"no_patches_found\">Нөхөлт олдсонгүй</string>\n  <string name=\"no_patches_description\">Та одоогоор нөхөлтгүй байна. Доорх товчийг товшиж нөхөлтүүд нэмнэ үү!</string>\n  <string name=\"split_apk_not_supported\">Хуваагдсан APK-уудыг засварлах боломжгүй</string>\n  <string name=\"no_downloaders_installed\">Апп татагч суулгаагүй байна!</string>\n  <string name=\"no_downloaders_trusted\">Апп татагчдад итгэмжлээгүй байна! Тохиргоогоо шалгана уу.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Багцууд</string>\n  <string name=\"patch_selector_sheet_actions_title\">Үйлдлүүд</string>\n  <string name=\"restore_default_selection\">Өгөгдмөл сонголтыг сэргээх</string>\n  <string name=\"deselect_all\">Бүгдийг болиулах</string>\n  <string name=\"invert_selection\">Сонголтыг эргүүлэх</string>\n  <string name=\"deselect_all_except\">%s-ээс бусдыг нь сонгохгүй байх</string>\n  <string name=\"scope_dialog_title\">Хэрэглэх</string>\n  <string name=\"scope_all_patches\">Бүх нөхөөс</string>\n  <string name=\"scope_bundle_patches\">Зөвхөн %s</string>\n  <string name=\"save_as_file\">Файл руу хадгалах</string>\n  <string name=\"export_patcher_logs\">Нөхөгчийн бүртгэлүүдийг экспортлох</string>\n  <string name=\"save_logs_success\">Бүртгэлүүд хадгалагдсан</string>\n  <string name=\"downloader_activity_dialog_body\">Энэ татаж авагчаар үргэлжлүүлэхийн тулд хэрэглэгчийн оролцоо шаардлагатай.</string>\n  <string name=\"patcher_step_unpack\">Паатчер бэлтгэх</string>\n  <string name=\"view_announcement\">Мэдэгдлийг харах</string>\n  <string name=\"license\">Лиценз</string>\n  <string name=\"source\">Эх үүсвэр</string>\n  <string name=\"repository\">Репозитор</string>\n  <string name=\"bundle_information_by_author\">%1$s-ээр</string>\n  <string name=\"version_compatibility_warning\">Сонгосон хувилбар нь сонгосон засваруудтай таарахгүй байж болзошгүй</string>\n  <string name=\"announcements\">Мэдэгдлүүд</string>\n  <string name=\"archive\">Архив</string>\n  <string name=\"view_update\">Шинэчлэлтийг харах</string>\n  <string name=\"update_checking_downloader\">Эхлүүлэх үед ReVanced Татагчуудын шинэчлэлтийг шалгах</string>\n  <string name=\"update_checking_downloader_description\">Аппликешн эхлэх үед суулгасан ReVanced Татагчуудын шинэчлэлтийг шалгах</string>\n  <string name=\"prereleases_warning\">Урьдчилсан хувилбарууд тогтворгүй байж, алдаатай байж болно. Та апп унах, өгөгдөл алдагдах эсвэл бусад гэнэтийн асуудлуудтай тулгарч болно. Эдгээр эрсдлүүдийг хүлээн зөвшөөрч байвал л үүнийг идэвхжүүлнэ үү.</string>\n  <string name=\"changelog\">Өөрчлөлтийн бүртгэлийг харах</string>\n  <string name=\"no_announcements_found\">Зар олдоогүй байна</string>\n  <string name=\"new_announcement\">Шинэ зар:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d нөхөөс</item>\n    <item quantity=\"other\">%d нөхөөс</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d нөхөөс гүйцэтгэх</item>\n    <item quantity=\"other\">%d нөхөөс гүйцэтгэх</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d сонгогдсон</item>\n    <item quantity=\"other\">%d сонгогдсон</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-mr-rIN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">पॅचर</string>\n  <string name=\"onboarding_welcome_to\">स्वागत आहे</string>\n  <string name=\"onboarding_welcome_back\">नमस्ते! हे नवीन आहे</string>\n  <string name=\"onboarding_apps_subtitle\">तुम्ही आता पॅच करण्यासाठी एखादे ॲप निवडू शकता किंवा नंतर करू शकता</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager आणि पॅचेस अद्ययावित ठेवण्यासाठी स्वयंचलित अद्यतने कॉन्फिगर करा</string>\n  <string name=\"onboarding_updates_note\">तुमचे डिव्हाइस इंटरनेटशी कनेक्ट केलेले असल्यास, सुरुवातीच्या आवृत्त्या डाउनलोड करण्यासाठी ReVanced Manager %s शी कनेक्ट होईल.</string>\n  <string name=\"retry\">पुन्हा प्रयत्न करा</string>\n  <string name=\"onboarding_skip\">आत्तापुरते वगळा</string>\n  <string name=\"onboarding_recommended_version\">शिफारस केलेली आवृत्ती: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">परवानग्या वगळायच्या?</string>\n  <string name=\"onboarding_permissions_skip_description\">आवश्यक परवानग्यांशिवाय, काही वैशिष्ट्ये योग्यरित्या कार्य करू शकत नाहीत. तुम्ही त्या नंतर ॲप सेटिंग्जमध्ये देऊ शकता.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">तरीही वगळा</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager ला योग्यरित्या कार्य करण्यासाठी काही परवानग्या आवश्यक आहेत</string>\n  <string name=\"permission_install_apps\">अज्ञात ॲप्स स्थापित करा</string>\n  <string name=\"permission_install_apps_description\">पॅच केलेले ॲप्लिकेशन स्थापित करण्यासाठी आवश्यक</string>\n  <string name=\"permission_notifications\">सूचना</string>\n  <string name=\"permission_battery\">बॅटरी ऑप्टिमायझेशन</string>\n  <string name=\"permission_battery_description\">पार्श्वभूमीमध्ये पॅचिंगला व्यत्यय येण्यापासून प्रतिबंधित करते</string>\n  <string name=\"permission_grant\">अनुमती द्या</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager डाउनलोडर होस्ट</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager डाउनलोडरमध्ये प्रवेश नियंत्रित करण्यासाठी वापरले जाते. फक्त ReVanced Manager कडे हे आहे.</string>\n  <string name=\"fab_patch_app\">ॲप पॅच करा</string>\n  <string name=\"fab_add_patches\">पॅच जोडा</string>\n  <string name=\"new_downloader_notification\">नवीन डाउनलोडर उपलब्ध आहे/आहेत. ते कॉन्फिगर करण्यासाठी येथे क्लिक करा.</string>\n  <string name=\"patches_not_downloaded\">पॅचेस डाउनलोड झाले नाहीत.</string>\n  <string name=\"app_source_dialog_option_auto_description\">स्थापित ॲप वापरा, त्यानंतर डाउनलोड केलेला APK, त्यानंतर उपलब्ध डाउनलोडर्स</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">सुसंगत अ‍ॅप किंवा डाउनलोडर उपलब्ध नाहीत</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">रूट अ‍ॅक्सेसशिवाय माउंटेड अ‍ॅप्स पुन्हा पॅच केली जाऊ शकत नाहीत</string>\n  <string name=\"patch_selector_item\">पॅच निवडा</string>\n  <string name=\"patch_selector_item_description\">%d पॅच निवडले</string>\n  <string name=\"patch_selection_changed_warning\">पॅचेसची निवड बदलली आहे</string>\n  <string name=\"apk_source_selector_item\">APK स्रोत निवडा</string>\n  <string name=\"apk_source_auto\">स्वयंचलित</string>\n  <string name=\"apk_source_auto_installed\">स्वयंचलित · स्थापित APK वापरून</string>\n  <string name=\"apk_source_auto_downloaded\">स्वयंचलित · डाउनलोड केलेला APK वापरून</string>\n  <string name=\"apk_source_auto_downloader\">स्वयंचलित · उपलब्ध डाउनलोडर वापरून</string>\n  <string name=\"apk_source_auto_storage\">स्वयंचलित · स्टोरेजमधून निवडा</string>\n  <string name=\"apk_source_downloaded\">आधीच डाउनलोड केले आहे</string>\n  <string name=\"auto_updates_dialog_description\">तुम्हाला ReVanced Manager ने खालील घटकांसाठी नियमितपणे अद्यतने तपासावी असे वाटते का?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced पॅच</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: डाउनलोडर</string>\n  <string name=\"auto_updates_dialog_note\">या सेटिंग्ज नंतर बदलल्या जाऊ शकतात.\n\n    तुमचे डिव्हाइस इंटरनेटशी कनेक्ट केलेले असल्यास, सुरुवातीच्या आवृत्त्या डाउनलोड करण्यासाठी ReVanced Manager %s शी कनेक्ट होईल.</string>\n  <string name=\"announcements_filter_tag\">टॅगनुसार फिल्टर करा</string>\n  <string name=\"announcements_show_archived\">संग्रहित दाखवा</string>\n  <string name=\"updates_description\">अद्यतने तपासा आणि बदल लॉग पहा</string>\n  <string name=\"downloads_description\">डाउनलोडर आणि डाउनलोड केलेले ॲप्स</string>\n  <string name=\"safeguards_toggled_warning\">सुरक्षितता उपाय बदलले आहेत</string>\n  <string name=\"about_app_name\">%1$s बद्दल</string>\n  <string name=\"search_languages\">भाषा शोधा…</string>\n  <string name=\"keystore\">कीस्टोअर</string>\n  <string name=\"patches_selections\">पॅच निवड</string>\n  <string name=\"select_bundle_for_import\">आयात करण्यासाठी बंडल निवडा</string>\n  <string name=\"select_bundle_for_export\">निर्यात करण्यासाठी बंडल निवडा</string>\n  <string name=\"patch_selection_packages\">जतन केलेल्या निवडी असलेली ॲप्स</string>\n  <string name=\"patch_selection_entries\">एकूण निवडलेले पॅच</string>\n  <string name=\"reset_configuration\">कॉन्फिगरेशन रीसेट करा</string>\n  <string name=\"reset_patch_selection\">पॅच निवड</string>\n  <string name=\"reset_patch_options\">पॅच पर्याय</string>\n  <string name=\"downloaders\">डाउनलोडर</string>\n  <string name=\"downloader_prereleases\">प्री-रिलीझ वापरा</string>\n  <string name=\"downloader_prereleases_description\">मुख्य डाउनलोडरच्या प्री-रिलीझ आवृत्त्या वापरा</string>\n  <string name=\"downloader_state_loaded\">लोड केले</string>\n  <string name=\"downloader_state_failed\">लोड करण्यात अयशस्वी. अधिक तपशिलांसाठी क्लिक करा</string>\n  <string name=\"downloader_state_missing\">गहाळ</string>\n  <string name=\"downloader_delete_apps_title\">निवडलेले ॲप्स हटवा</string>\n  <string name=\"downloader_delete_apps_description\">तुम्ही निवडलेले ॲप्स हटवू इच्छिता याची तुम्हाला खात्री आहे का?</string>\n  <string name=\"downloader_delete_single_description\">तुम्हाला \\\"%s\\\" हटवायचे आहे याची खात्री आहे का?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager द्वारे डाउनलोड केलेले ॲप्स येथे दिसतील.</string>\n  <string name=\"downloader_url\">डाउनलोडर URL</string>\n  <string name=\"downloader_add\">डाउनलोडर जोडा</string>\n  <string name=\"select_downloader_type_dialog_description\">URL किंवा स्थानिक फाईल्समधून नवीन डाउनलोडर जोडा</string>\n  <string name=\"local_downloaders_description\">स्थानिक स्टोरेजमधून डाउनलोडर जोडा.</string>\n  <string name=\"remote_downloaders_description\">URL मधून डाउनलोडर जोडा. ते आपोआप अपडेट केले जाऊ शकतात.</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager मध्ये थेट ॲप्स मिळवण्यासाठी डाउनलोडर स्थापित करा.</string>\n  <string name=\"install_revanced_downloader\">ReVanced डाउनलोडर स्थापित करा</string>\n  <string name=\"cancel_downloader_install_title\">डाउनलोडरची स्थापना रद्द करायची?</string>\n  <string name=\"cancel_downloader_install_description\">डाउनलोडरची स्थापना प्रगतीपथावर आहे. तुम्ही आता सोडल्यास, डाउनलोड रद्द होईल.</string>\n  <string name=\"downloader_sources_unavailable_title\">हे डाउनलोडर गहाळ आहेत</string>\n  <string name=\"downloader_sources_unavailable_description\">ते ठीक करण्यासाठी अपडेट बटणावर क्लिक करा.</string>\n  <string name=\"downloader_update_failed\">डाउनलोडर अपडेट करण्यात अयशस्वी: %s</string>\n  <string name=\"downloader_replace_fail\">डाउनलोडर इंपोर्ट करण्यात अयशस्वी: %s</string>\n  <string name=\"select_from_storage_description\">फाइल पिकर वापरून स्टोरेजमधून एक APK फाइल निवडा</string>\n  <string name=\"enable\">सक्षम करा</string>\n  <string name=\"disable\">अक्षम करा</string>\n  <string name=\"process_runtime_memory_limit_description\">पॅचर प्रक्रिया वापरू शकणाऱ्या मेमरीची कमाल मर्यादा</string>\n  <string name=\"reset_onboarding\">ऑनबोर्डिंग रीसेट करा</string>\n  <string name=\"reset_onboarding_description\">पुढील ॲप लॉन्चवर ऑनबोर्डिंग स्क्रीन दाखवा</string>\n  <string name=\"api_not_working_title\">API सेवा सध्या बंद आहे</string>\n  <string name=\"api_not_working_description\">काही वैशिष्ट्यांवर परिणाम होऊ शकतो. तुमची कनेक्टिव्हिटी किंवा सेटिंग्जमधील API URL तपासा.</string>\n  <string name=\"no_patched_apps_found\">कोणतेही पॅच केलेले ॲप्स सापडले नाहीत</string>\n  <string name=\"no_patched_apps_description\">तुम्ही सध्या आम्हाला ज्ञात असलेले कोणतेही पॅच केलेले ॲप्स वापरत नाही. तुमचे पहिले ॲप पॅच करून ते बदला!</string>\n  <string name=\"patched_apps_section_title\">पॅच केलेले ॲप्स</string>\n  <string name=\"patchable_apps_section_title\">पॅच करता येण्यासारखे ॲप्स</string>\n  <string name=\"no_patches_found\">कोणतेही पॅच सापडले नाहीत</string>\n  <string name=\"no_patches_description\">तुमच्याकडे अजून कोणतेही पॅच नाहीत. खालील बटणावर टॅप करून पॅच जोडा!</string>\n  <string name=\"split_apk_not_supported\">स्प्लिट APKs पॅच केले जाऊ शकत नाहीत</string>\n  <string name=\"no_downloaders_installed\">कोणतेही ॲप डाउनलोडर स्थापित नाहीत!</string>\n  <string name=\"no_downloaders_trusted\">कोणत्याही ॲप डाउनलोडरवर विश्वास ठेवलेला नाही! कृपया तुमच्या सेटिंग्ज तपासा.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">पॅकेजेस</string>\n  <string name=\"patch_selector_sheet_actions_title\">कृती</string>\n  <string name=\"restore_default_selection\">डीफॉल्ट निवड पुनर्संचयित करा</string>\n  <string name=\"deselect_all\">सर्व निवड रद्द करा</string>\n  <string name=\"invert_selection\">निवड उलट करा</string>\n  <string name=\"deselect_all_except\">%s वगळून सर्व निवड रद्द करा</string>\n  <string name=\"scope_dialog_title\">याला लागू करा</string>\n  <string name=\"scope_all_patches\">सर्व पॅचेस</string>\n  <string name=\"scope_bundle_patches\">फक्त %s</string>\n  <string name=\"save_as_file\">फाइल्समध्ये जतन करा</string>\n  <string name=\"export_patcher_logs\">पॅचर लॉग निर्यात करा</string>\n  <string name=\"save_logs_success\">लॉग जतन केले</string>\n  <string name=\"downloader_activity_dialog_body\">या डाउनलोडरसह पुढे जाण्यासाठी वापरकर्त्याच्या परस्परसंवादाची आवश्यकता आहे.</string>\n  <string name=\"patcher_step_unpack\">पॅचर तयार करा</string>\n  <string name=\"view_announcement\">घोषणा पहा</string>\n  <string name=\"license\">परवाना</string>\n  <string name=\"source\">स्रोत</string>\n  <string name=\"repository\">रेपॉजिटरी</string>\n  <string name=\"bundle_information_by_author\">%1$s द्वारे</string>\n  <string name=\"version_compatibility_warning\">निवडलेली आवृत्ती निवडलेल्या पॅचेसशी विसंगत असू शकते.</string>\n  <string name=\"announcements\">घोषणा</string>\n  <string name=\"archive\">आर्काइव्ह</string>\n  <string name=\"view_update\">अद्यतन पहा</string>\n  <string name=\"update_checking_downloader\">लॉन्च करताना ReVanced डाउनलोडर अद्यतने तपासा</string>\n  <string name=\"update_checking_downloader_description\">ॲप्लिकेशन सुरू झाल्यावर स्थापित ReVanced डाउनलोडरच्या अद्यतनांसाठी तपासा</string>\n  <string name=\"prereleases_warning\">प्री-रिलीझ आवृत्त्या अस्थिर असू शकतात आणि त्यात बग असू शकतात. तुम्हाला क्रॅश, डेटा नष्ट होणे किंवा इतर अनपेक्षित समस्या येऊ शकतात. जर तुम्ही या धोक्यांशी परिचित असाल तरच हे सक्षम करा.</string>\n  <string name=\"changelog\">बदल लॉग पहा</string>\n  <string name=\"no_announcements_found\">कोणत्याही घोषणा सापडल्या नाहीत</string>\n  <string name=\"new_announcement\">नवीन घोषणा:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d पॅच</item>\n    <item quantity=\"other\">%d पॅचेस</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d पॅच कार्यान्वित करा</item>\n    <item quantity=\"other\">%d पॅचेस कार्यान्वित करा</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d निवडले</item>\n    <item quantity=\"other\">%d निवडले</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ms-rMY/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">Patcher</string>\n  <string name=\"onboarding_welcome_to\">Selamat datang ke</string>\n  <string name=\"onboarding_welcome_back\">Hai! Ini yang baharu</string>\n  <string name=\"onboarding_apps_subtitle\">Anda boleh memilih aplikasi untuk ditampal sekarang atau lakukan kemudian</string>\n  <string name=\"onboarding_updates_subtitle\">Konfigurasi kemas kini automatik untuk memastikan ReVanced Manager dan tampalan sentiasa terkini</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager akan menyambung ke %s untuk memuat turun versi awal jika peranti anda disambungkan ke internet.</string>\n  <string name=\"retry\">Cuba lagi</string>\n  <string name=\"onboarding_skip\">Langkau buat masa ini</string>\n  <string name=\"onboarding_recommended_version\">Versi disyorkan: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Langkau kebenaran?</string>\n  <string name=\"onboarding_permissions_skip_description\">Tanpa kebenaran yang diperlukan, beberapa ciri mungkin tidak berfungsi dengan betul. Anda boleh memberikannya kemudian dalam tetapan aplikasi.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Langkau juga</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager memerlukan beberapa kebenaran untuk berfungsi dengan baik</string>\n  <string name=\"permission_install_apps\">Pasang aplikasi tidak diketahui</string>\n  <string name=\"permission_install_apps_description\">Diperlukan untuk memasang aplikasi yang ditampal</string>\n  <string name=\"permission_notifications\">Pemberitahuan</string>\n  <string name=\"permission_battery\">Pengoptimuman bateri</string>\n  <string name=\"permission_battery_description\">Mencegah penampalan daripada terganggu di latar belakang</string>\n  <string name=\"permission_grant\">Beri</string>\n  <string name=\"downloader_host_permission_label\">Hos pemuat turun ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Digunakan untuk mengawal akses kepada pemuat turun ReVanced Manager. Hanya ReVanced Manager yang memilikinya.</string>\n  <string name=\"fab_patch_app\">Tampal aplikasi</string>\n  <string name=\"fab_add_patches\">Tambah tampalan</string>\n  <string name=\"new_downloader_notification\">Pemuat turun baharu tersedia. Klik di sini untuk mengkonfigurasinya.</string>\n  <string name=\"patches_not_downloaded\">Tampalan belum dimuat turun.</string>\n  <string name=\"app_source_dialog_option_auto_description\">Gunakan aplikasi yang dipasang, kemudian APK yang dimuat turun, kemudian pemuat turun yang tersedia</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Tiada apl atau pemuat turun serasi yang tersedia</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Apl yang dipasang tidak boleh ditampal lagi tanpa akses root</string>\n  <string name=\"patch_selector_item\">Pilih tampalan</string>\n  <string name=\"patch_selector_item_description\">%d tampalan dipilih</string>\n  <string name=\"patch_selection_changed_warning\">Pilihan tampalan telah diubah</string>\n  <string name=\"apk_source_selector_item\">Pilih sumber APK</string>\n  <string name=\"apk_source_auto\">Automatik</string>\n  <string name=\"apk_source_auto_installed\">Automatik · Menggunakan APK yang dipasang</string>\n  <string name=\"apk_source_auto_downloaded\">Automatik · Menggunakan APK yang dimuat turun</string>\n  <string name=\"apk_source_auto_downloader\">Automatik · Menggunakan pengunduh yang tersedia</string>\n  <string name=\"apk_source_auto_storage\">Automatik · Pilih dari storan</string>\n  <string name=\"apk_source_downloaded\">Sudah dimuat turun</string>\n  <string name=\"auto_updates_dialog_description\">Adakah anda mahu ReVanced Manager menyemak kemas kini secara berkala untuk komponen berikut?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Tampalan ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Pemuat turun</string>\n  <string name=\"auto_updates_dialog_note\">Tetapan ini boleh diubah kemudian.\n\n    ReVanced Manager akan menyambung ke %s untuk memuat turun versi awal jika peranti anda disambungkan ke internet.</string>\n  <string name=\"announcements_filter_tag\">Tapis mengikut tag</string>\n  <string name=\"announcements_show_archived\">Tunjukkan yang diarkibkan</string>\n  <string name=\"updates_description\">Semak kemas kini dan lihat log perubahan</string>\n  <string name=\"downloads_description\">Pemuat turun dan aplikasi yang dimuat turun</string>\n  <string name=\"safeguards_toggled_warning\">Pelindung telah dihidup/mati.</string>\n  <string name=\"about_app_name\">Mengenai %1$s</string>\n  <string name=\"search_languages\">Cari bahasa…</string>\n  <string name=\"keystore\">Storan Kunci</string>\n  <string name=\"patches_selections\">Pilihan tampalan</string>\n  <string name=\"select_bundle_for_import\">Pilih himpunan untuk diimport ke dalam</string>\n  <string name=\"select_bundle_for_export\">Pilih himpunan untuk dieksport daripada</string>\n  <string name=\"patch_selection_packages\">Aplikasi dengan pilihan yang disimpan</string>\n  <string name=\"patch_selection_entries\">Jumlah tampalan yang dipilih</string>\n  <string name=\"reset_configuration\">Tetapkan semula konfigurasi</string>\n  <string name=\"reset_patch_selection\">Pilihan tampalan</string>\n  <string name=\"reset_patch_options\">Pilihan tampalan</string>\n  <string name=\"downloaders\">Pemuat turun</string>\n  <string name=\"downloader_prereleases\">Guna pra-keluaran</string>\n  <string name=\"downloader_prereleases_description\">Guna versi pra-keluaran pemuat turun utama</string>\n  <string name=\"downloader_state_loaded\">Dimuatkan</string>\n  <string name=\"downloader_state_failed\">Gagal dimuat. Klik untuk butiran lanjut</string>\n  <string name=\"downloader_state_missing\">Tiada</string>\n  <string name=\"downloader_delete_apps_title\">Padam aplikasi yang dipilih</string>\n  <string name=\"downloader_delete_apps_description\">Adakah anda pasti mahu memadam aplikasi yang dipilih?</string>\n  <string name=\"downloader_delete_single_description\">Adakah anda pasti ingin memadam \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps_description\">Aplikasi yang dimuat turun melalui ReVanced Manager akan muncul di sini.</string>\n  <string name=\"downloader_url\">URL Pemuat Turun</string>\n  <string name=\"downloader_add\">Tambah Pemuat Turun</string>\n  <string name=\"select_downloader_type_dialog_description\">Tambah pemuat turun baharu daripada URL atau fail setempat</string>\n  <string name=\"local_downloaders_description\">Tambah pemuat turun daripada storan setempat.</string>\n  <string name=\"remote_downloaders_description\">Tambah pemuat turun daripada URL. Boleh dikemas kini secara automatik.</string>\n  <string name=\"install_revanced_downloaders\">Pasang pemuat turun untuk mendapatkan aplikasi terus dalam ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Pasang Pemuat Turun ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Batalkan pemasangan pemuat turun?</string>\n  <string name=\"cancel_downloader_install_description\">Pemasangan pemuat turun sedang berjalan. Jika anda keluar sekarang, muat turun akan dibatalkan.</string>\n  <string name=\"downloader_sources_unavailable_title\">Pemuat turun ini tiada</string>\n  <string name=\"downloader_sources_unavailable_description\">Klik pada butang kemas kini untuk memperbaikinya.</string>\n  <string name=\"downloader_update_failed\">Gagal mengemas kini pemuat turun: %s</string>\n  <string name=\"downloader_replace_fail\">Gagal mengimport pemuat turun: %s</string>\n  <string name=\"select_from_storage_description\">Pilih fail APK dari storan menggunakan pemilih fail</string>\n  <string name=\"enable\">Dayakan</string>\n  <string name=\"disable\">Lumpuhkan</string>\n  <string name=\"process_runtime_memory_limit_description\">Jumlah memori maksimum yang boleh digunakan oleh proses Penampal</string>\n  <string name=\"reset_onboarding\">Tetapkan semula orientasi</string>\n  <string name=\"reset_onboarding_description\">Tunjukkan skrin orientasi pada pelancaran aplikasi seterusnya</string>\n  <string name=\"api_not_working_title\">Perkhidmatan API tidak berfungsi pada masa ini</string>\n  <string name=\"api_not_working_description\">Beberapa ciri mungkin terjejas. Semak sambungan atau URL API anda dalam tetapan.</string>\n  <string name=\"no_patched_apps_found\">Tiada aplikasi yang ditampal ditemui</string>\n  <string name=\"no_patched_apps_description\">Anda kini tiada aplikasi yang ditampal yang kami ketahui. Ubah itu dengan menampal aplikasi pertama anda!</string>\n  <string name=\"patched_apps_section_title\">Aplikasi yang ditampal</string>\n  <string name=\"patchable_apps_section_title\">Aplikasi yang boleh ditampal</string>\n  <string name=\"no_patches_found\">Tiada tampalan ditemui</string>\n  <string name=\"no_patches_description\">Anda belum mempunyai sebarang tampalan. Tambah tampalan dengan mengetik butang di bawah!</string>\n  <string name=\"split_apk_not_supported\">APK terbahagi tidak boleh ditampal</string>\n  <string name=\"no_downloaders_installed\">Tiada pemuat turun aplikasi dipasang!</string>\n  <string name=\"no_downloaders_trusted\">Tiada pemuat turun aplikasi yang dipercayai! Sila semak tetapan anda.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Pakej</string>\n  <string name=\"patch_selector_sheet_actions_title\">Tindakan</string>\n  <string name=\"restore_default_selection\">Pulihkan pilihan lalai</string>\n  <string name=\"deselect_all\">Nyahpilih semua</string>\n  <string name=\"invert_selection\">Songsangkan pilihan</string>\n  <string name=\"deselect_all_except\">Nyahpilih semua kecuali %s</string>\n  <string name=\"scope_dialog_title\">Guna pada</string>\n  <string name=\"scope_all_patches\">Semua tampalan</string>\n  <string name=\"scope_bundle_patches\">%s sahaja</string>\n  <string name=\"save_as_file\">Simpan ke fail</string>\n  <string name=\"export_patcher_logs\">Eksport log penampal</string>\n  <string name=\"save_logs_success\">Log disimpan</string>\n  <string name=\"downloader_activity_dialog_body\">Interaksi pengguna diperlukan untuk meneruskan dengan pemuat turun ini.</string>\n  <string name=\"patcher_step_unpack\">Sediakan patcher</string>\n  <string name=\"view_announcement\">Lihat pengumuman</string>\n  <string name=\"license\">Lesen</string>\n  <string name=\"source\">Sumber</string>\n  <string name=\"repository\">Repositori</string>\n  <string name=\"bundle_information_by_author\">Oleh %1$s</string>\n  <string name=\"version_compatibility_warning\">Versi yang dipilih mungkin tidak serasi dengan tampalan yang dipilih</string>\n  <string name=\"announcements\">Pengumuman</string>\n  <string name=\"archive\">Arkib</string>\n  <string name=\"view_update\">Lihat kemas kini</string>\n  <string name=\"update_checking_downloader\">Semak kemas kini Pemuat Turun ReVanced semasa pelancaran</string>\n  <string name=\"update_checking_downloader_description\">Semak kemas kini kepada Pemuat Turun ReVanced yang dipasang apabila aplikasi dimulakan</string>\n  <string name=\"prereleases_warning\">Versi pra-keluaran mungkin tidak stabil dan mengandungi pepijat. Anda mungkin mengalami ranap sistem, kehilangan data, atau isu lain yang tidak dijangka. Hanya dayakan ini jika anda selesa dengan risiko ini.</string>\n  <string name=\"changelog\">Lihat log perubahan</string>\n  <string name=\"no_announcements_found\">Tiada pengumuman ditemui</string>\n  <string name=\"new_announcement\">Pengumuman baharu:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"other\">%d tampalan</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"other\">Laksanakan %d tampalan</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"other\">%d dipilih</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-my-rMM/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">ဖာထေးသူ</string>\n  <string name=\"onboarding_welcome_to\">ကြိုဆိုပါတယ်</string>\n  <string name=\"onboarding_welcome_back\">မင်္ဂလာပါ! အသစ်ထွက်ရှိထားတာကတော့</string>\n  <string name=\"onboarding_apps_subtitle\">အက်ပ်တစ်ခုကို အခုပဲပြင်ဆင်နိုင်ပါတယ် ဒါမှမဟုတ် နောက်မှလုပ်ဆောင်နိုင်ပါတယ်</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager နှင့် patch များကို နောက်ဆုံးပေါ်ဖြစ်အောင် အလိုအလျောက် အပ်ဒိတ်များကို စီစဉ်သတ်မှတ်ပါ</string>\n  <string name=\"onboarding_updates_note\">အကယ်၍ သင့်စက်ပစ္စည်း အင်တာနက်နှင့် ချိတ်ဆက်ထားပါက ReVanced Manager သည် ကနဦးဗားရှင်းများကို ဒေါင်းလုဒ်လုပ်ရန် %s သို့ ချိတ်ဆက်ပါမည်။</string>\n  <string name=\"retry\">ပြန်ကြိုးစားပါ။</string>\n  <string name=\"onboarding_skip\">ခဏကျော်သွားပါ။</string>\n  <string name=\"onboarding_recommended_version\">အကြံပြုထားသော ဗားရှင်း: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">ခွင့်ပြုချက်များ ကျော်သွားမလား။</string>\n  <string name=\"onboarding_permissions_skip_description\">လိုအပ်သော ခွင့်ပြုချက်များမရှိပါက အချို့ လုပ်ဆောင်ချက်များသည် ကောင်းမွန်စွာ အလုပ်မလုပ်နိုင်ပါ။ အက်ပ် ဆက်တင်များတွင် နောက်မှ ခွင့်ပြုနိုင်ပါသည်။</string>\n  <string name=\"onboarding_permissions_skip_anyway\">ဘာပဲဖြစ်ဖြစ် ကျော်သွားပါ။</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager သည် ကောင်းမွန်စွာ အလုပ်လုပ်ရန် ခွင့်ပြုချက်အချို့ လိုအပ်ပါသည်။</string>\n  <string name=\"permission_install_apps\">မသိသော အက်ပ်များကို ထည့်သွင်းပါ။</string>\n  <string name=\"permission_install_apps_description\">ပြင်ဆင်ထားသော အက်ပ်များ ထည့်သွင်းရန် လိုအပ်ပါသည်။</string>\n  <string name=\"permission_notifications\">အကြောင်းကြားချက်များ</string>\n  <string name=\"permission_battery\">ဘက်ထရီ အကောင်းဆုံး ဖြစ်အောင်လုပ်ခြင်း</string>\n  <string name=\"permission_battery_description\">နောက်ခံ၌ ပြင်ဆင်ခြင်းကို အနှောင့်အယှက်မဖြစ်စေရန် ကာကွယ်ပေးသည်။</string>\n  <string name=\"permission_grant\">ခွင့်ပြုပါ။</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager ဒေါင်းလုဒ်လုပ်သူ ဟိုစ့်</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager ဒေါင်းလုဒ်လုပ်သူများထံ ဝင်ရောက်ခွင့်ကို ထိန်းချုပ်ရန် အသုံးပြုသည်။ ReVanced Manager တွင်သာ ၎င်းရှိသည်။</string>\n  <string name=\"fab_patch_app\">အက်ပ်တစ်ခုကို ပြင်ဆင်ပါ။</string>\n  <string name=\"fab_add_patches\">ပြင်ဆင်ချက်များ ထည့်ပါ။</string>\n  <string name=\"new_downloader_notification\">ဒေါင်းလုပ်လုပ်သူအသစ် (များ) ရရှိနိုင်ပါသည်။ ၎င်းတို့ကို စီစဉ်သတ်မှတ်ရန် ဤနေရာကို နှိပ်ပါ။</string>\n  <string name=\"patches_not_downloaded\">ပတ်ခ်ျများ ဒေါင်းလုဒ်လုပ်ပြီးစီးခြင်းမရှိသေးပါ။</string>\n  <string name=\"app_source_dialog_option_auto_description\">ထည့်သွင်းပြီးသား အက်ပ်ကို သုံးပါ၊ ထို့နောက် ဒေါင်းလုဒ်လုပ်ပြီးသား APK ကို သုံးပါ၊ ထို့နောက် ရရှိနိုင်သော ဒေါင်းလုဒ်လုပ်သူများကို သုံးပါ</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">တွဲဖက်သုံးနိုင်သော အက်ပ် သို့မဟုတ် ဒေါင်းလုပ်လုပ်သူများ မရရှိနိုင်ပါ</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">root access မရှိဘဲ တပ်ဆင်ထားသော အက်ပ်များကို ထပ်မံပြင်ဆင်၍ မရပါ</string>\n  <string name=\"patch_selector_item\">ပြင်ဆင်ချက်များ ရွေးပါ။</string>\n  <string name=\"patch_selector_item_description\">ပြင်ဆင်ချက် %d ခု ရွေးချယ်ထားပါသည်။</string>\n  <string name=\"patch_selection_changed_warning\">ပတ်ခ်ျများ ရွေးချယ်မှု ပြောင်းလဲသွားပါပြီ</string>\n  <string name=\"apk_source_selector_item\">APK အရင်းအမြစ်ကို ရွေးချယ်ပါ။</string>\n  <string name=\"apk_source_auto\">အလိုအလျောက်</string>\n  <string name=\"apk_source_auto_installed\">အလိုအလျောက် · ထည့်သွင်းပြီးသား APK ကို အသုံးပြုနေသည်</string>\n  <string name=\"apk_source_auto_downloaded\">အလိုအလျောက် · ဒေါင်းလုဒ်လုပ်ပြီးသား APK ကို အသုံးပြုနေသည်</string>\n  <string name=\"apk_source_auto_downloader\">အလိုအလျောက် · ရနိုင်သော ဒေါင်းလုဒ်လုပ်သူများ အသုံးပြု၍</string>\n  <string name=\"apk_source_auto_storage\">အလိုအလျောက် · သိုလှောင်မှုမှ ရွေးချယ်ခြင်း</string>\n  <string name=\"apk_source_downloaded\">ဒေါင်းလုပ်လုပ်ပြီးသား</string>\n  <string name=\"auto_updates_dialog_description\">ReVanced Manager ကို အောက်ပါ အစိတ်အပိုင်းများအတွက် အချိန်မှန် အပ်ဒိတ်များ စစ်ဆေးစေလိုပါသလား။</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced ပြင်ဆင်ချက်များ</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: ဒေါင်းလုဒ်ဆွဲသူများ</string>\n  <string name=\"auto_updates_dialog_note\">ဤဆက်တင်များကို နောက်ပိုင်းတွင် ပြောင်းလဲနိုင်သည်။\n\n    အကယ်၍ သင့်စက်ပစ္စည်း အင်တာနက်နှင့် ချိတ်ဆက်ထားပါက ReVanced Manager သည် ကနဦးဗားရှင်းများကို ဒေါင်းလုဒ်လုပ်ရန် %s သို့ ချိတ်ဆက်ပါမည်။</string>\n  <string name=\"announcements_filter_tag\">တက်ဂ်ဖြင့် စစ်ထုတ်ရန်</string>\n  <string name=\"announcements_show_archived\">မှတ်တမ်းတင်ပြီးသားများကို ပြရန်</string>\n  <string name=\"updates_description\">အပ်ဒိတ်များ စစ်ဆေးပြီး ပြောင်းလဲမှု မှတ်တမ်းကို ကြည့်ရှုပါ။</string>\n  <string name=\"downloads_description\">ဒေါင်းလုဒ်လုပ်သူများနှင့် ဒေါင်းလုဒ်လုပ်ထားသည့် အက်ပ်များ</string>\n  <string name=\"safeguards_toggled_warning\">အကာအကွယ်များ ခလုတ်ဖွင့်ပိတ်လုပ်လိုက်ပါပြီ</string>\n  <string name=\"about_app_name\">%1$s အကြောင်း</string>\n  <string name=\"search_languages\">ဘာသာစကားများ ရှာဖွေပါ...</string>\n  <string name=\"keystore\">သော့သိုလှောင်ရာ</string>\n  <string name=\"patches_selections\">ပြင်ဆင်ချက်များ ရွေးချယ်မှုများ</string>\n  <string name=\"select_bundle_for_import\">ထည့်သွင်းရန် bundle ကို ရွေးချယ်ပါ။</string>\n  <string name=\"select_bundle_for_export\">ထုတ်ယူရန် bundle ကို ရွေးချယ်ပါ။</string>\n  <string name=\"patch_selection_packages\">သိမ်းဆည်းထားသော ရွေးချယ်မှုများပါရှိသော အက်ပ်များ</string>\n  <string name=\"patch_selection_entries\">စုစုပေါင်း ရွေးချယ်ထားသော ပြင်ဆင်ချက်များ</string>\n  <string name=\"reset_configuration\">စီစဉ်သတ်မှတ်မှု ပြန်လည်သတ်မှတ်ပါ။</string>\n  <string name=\"reset_patch_selection\">ပြင်ဆင်ချက် ရွေးချယ်မှုများ</string>\n  <string name=\"reset_patch_options\">ပြင်ဆင်ချက် ရွေးချယ်စရာများ</string>\n  <string name=\"downloaders\">ဒေါင်းလုဒ်လုပ်သူများ</string>\n  <string name=\"downloader_prereleases\">ထုတ်မပြန်မီ ဗားရှင်းများ အသုံးပြုပါ</string>\n  <string name=\"downloader_prereleases_description\">အဓိက ဒေါင်းလုဒ်ဆွဲသူ၏ ထုတ်မပြန်မီ ဗားရှင်းများကို အသုံးပြုပါ</string>\n  <string name=\"downloader_state_loaded\">တင်ပြီးပါပြီ</string>\n  <string name=\"downloader_state_failed\">တင်မရပါ။ အသေးစိတ်သိရှိရန် နှိပ်ပါ။</string>\n  <string name=\"downloader_state_missing\">ပျောက်ဆုံးနေသည်</string>\n  <string name=\"downloader_delete_apps_title\">ရွေးချယ်ထားသော အက်ပ်များကို ဖျက်မည်</string>\n  <string name=\"downloader_delete_apps_description\">ရွေးချယ်ထားသော အက်ပ်များကို ဖျက်လိုကြောင်း သေချာပါသလား။</string>\n  <string name=\"downloader_delete_single_description\">\\\"%s\\\" ကို ဖျက်လိုကြောင်း သေချာပါသလား။</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager မှတစ်ဆင့် ဒေါင်းလုပ်လုပ်ထားသော အက်ပ်များသည် ဤနေရာတွင် ပေါ်လာမည်ဖြစ်သည်။</string>\n  <string name=\"downloader_url\">ဒေါင်းလုပ်လုပ်သူ URL</string>\n  <string name=\"downloader_add\">ဒေါင်းလုပ်လုပ်သူထည့်ပါ</string>\n  <string name=\"select_downloader_type_dialog_description\">URL သို့မဟုတ် ဒေသတွင်းဖိုင်များမှ ဒေါင်းလုပ်လုပ်သူအသစ်များ ထည့်ပါ</string>\n  <string name=\"local_downloaders_description\">ဒေသတွင်းသိုလှောင်မှုမှ ဒေါင်းလုပ်လုပ်သူများထည့်ပါ</string>\n  <string name=\"remote_downloaders_description\">URL မှ ဒေါင်းလုပ်လုပ်သူများထည့်ပါ။ အလိုအလျောက် အပ်ဒိတ်လုပ်နိုင်ပါသည်။</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager အတွင်း၌ အက်ပ်များကို တိုက်ရိုက်ရယူရန် ဒေါင်းလုပ်လုပ်သူများကို ထည့်သွင်းပါ။</string>\n  <string name=\"install_revanced_downloader\">ReVanced ဒေါင်းလုပ်လုပ်သူများကို ထည့်သွင်းပါ။</string>\n  <string name=\"cancel_downloader_install_title\">ဒေါင်းလုပ်လုပ်သူ ထည့်သွင်းခြင်းကို ပယ်ဖျက်မလား။</string>\n  <string name=\"cancel_downloader_install_description\">ဒေါင်းလုပ်လုပ်သူ ထည့်သွင်းမှု လုပ်ဆောင်နေပါသည်။ ယခု ထွက်ခွာပါက ဒေါင်းလုပ်လုပ်ခြင်းကို ပယ်ဖျက်သွားမည်ဖြစ်သည်။</string>\n  <string name=\"downloader_sources_unavailable_title\">ဤဒေါင်းလုပ်လုပ်သူများ ပျောက်ဆုံးနေသည်</string>\n  <string name=\"downloader_sources_unavailable_description\">၎င်းကိုပြင်ဆင်ရန် အပ်ဒိတ်ခလုတ်ကို နှိပ်ပါ။</string>\n  <string name=\"downloader_update_failed\">ဒေါင်းလုပ်လုပ်သူ အပ်ဒိတ်လုပ်ရန် မအောင်မြင်ပါ- %s</string>\n  <string name=\"downloader_replace_fail\">ဒေါင်းလုပ်လုပ်သူ ထည့်သွင်းရန် မအောင်မြင်ပါ- %s</string>\n  <string name=\"reset\">ပြန်လည်စတင်ရန်</string>\n  <string name=\"select_from_storage_description\">ဖိုင်ရွေးချယ်သူကို အသုံးပြု၍ သိုလှောင်မှုမှ APK ဖိုင်တစ်ခုကို ရွေးချယ်ပါ။</string>\n  <string name=\"add\">ထည့်ပါ</string>\n  <string name=\"enable\">ဖွင့်ပါ။</string>\n  <string name=\"disable\">ပိတ်ပါ။</string>\n  <string name=\"process_runtime_memory_limit_description\">Patcher လုပ်ငန်းစဉ်က အသုံးပြုနိုင်သော မှတ်ဉာဏ်ပမာဏ အများဆုံး</string>\n  <string name=\"reset_onboarding\">onboarding ကို ပြန်လည်သတ်မှတ်ပါ။</string>\n  <string name=\"reset_onboarding_description\">နောက်တစ်ကြိမ် အက်ပ်စတင်သောအခါ onboarding မျက်နှာပြင်ကို ပြသပါ။</string>\n  <string name=\"api_not_working_title\">API ဝန်ဆောင်မှု လက်ရှိတွင် ရပ်ဆိုင်းနေပါသည်</string>\n  <string name=\"api_not_working_description\">အချို့လုပ်ဆောင်ချက်များ ထိခိုက်မှုရှိနိုင်သည်။ သင့်ချိတ်ဆက်မှု သို့မဟုတ် ဆက်တင်များရှိ API URL ကို စစ်ဆေးပါ။</string>\n  <string name=\"no_patched_apps_found\">ပြင်ဆင်ထားသော အက်ပ်များ မတွေ့ပါ။</string>\n  <string name=\"no_patched_apps_description\">သင့်တွင် လက်ရှိ သိရှိထားသော ပြင်ဆင်ထားသော အက်ပ်များ မရှိသေးပါ။ သင့်၏ ပထမဆုံး အက်ပ်ကို ပြင်ဆင်ခြင်းဖြင့် ပြောင်းလဲလိုက်ပါ။</string>\n  <string name=\"patched_apps_section_title\">ပြင်ဆင်ထားသော အက်ပ်များ</string>\n  <string name=\"patchable_apps_section_title\">ပြင်ဆင်နိုင်သော အက်ပ်များ</string>\n  <string name=\"no_patches_found\">ပြင်ဆင်ချက်များ မတွေ့ပါ။</string>\n  <string name=\"no_patches_description\">သင့်တွင် ပြင်ဆင်ချက်များ မရှိသေးပါ။ အောက်ပါ ခလုတ်ကို နှိပ်၍ ပြင်ဆင်ချက်များ ထည့်သွင်းပါ။</string>\n  <string name=\"split_apk_not_supported\">ခွဲထားသော APK များကို ပြင်ဆင်၍မရပါ</string>\n  <string name=\"no_downloaders_installed\">အက်ပ် ဒေါင်းလုပ်လုပ်သူများ ထည့်သွင်းထားခြင်း မရှိပါ။</string>\n  <string name=\"no_downloaders_trusted\">မည်သည့် အက်ပ် ဒေါင်းလုပ်လုပ်သူကိုမျှ ယုံကြည်စိတ်ချရအောင် မလုပ်ရသေးပါ။ သင့်ဆက်တင်များကို စစ်ဆေးပါ။</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">ပက်ကေ့ချ်များ</string>\n  <string name=\"patch_selector_sheet_actions_title\">လုပ်ဆောင်ချက်များ</string>\n  <string name=\"restore_default_selection\">မူလရွေးချယ်မှုကို ပြန်လည်ရယူရန်</string>\n  <string name=\"deselect_all\">အားလုံးရွေးချယ်မှုပယ်ဖျက်ရန်</string>\n  <string name=\"invert_selection\">ရွေးချယ်မှုကို ပြောင်းပြန်လှန်ရန်</string>\n  <string name=\"deselect_all_except\">%s မှလွဲ၍ အားလုံးကို ရွေးချယ်မှု ပယ်ဖျက်ပါ။</string>\n  <string name=\"scope_dialog_title\">သက်ရောက်မည့်</string>\n  <string name=\"scope_all_patches\">ပတ်ချ်များအားလုံး</string>\n  <string name=\"scope_bundle_patches\">%s သာ</string>\n  <string name=\"save_as_file\">ဖိုင်များသို့ သိမ်းဆည်းပါ။</string>\n  <string name=\"export_patcher_logs\">patcher မှတ်တမ်းများကို ထုတ်ယူပါ။</string>\n  <string name=\"save_logs_success\">မှတ်တမ်းများ သိမ်းဆည်းပြီးပါပြီ။</string>\n  <string name=\"downloader_activity_dialog_body\">ဤဒေါင်းလုဒ်လုပ်သူနှင့် ဆက်လုပ်ရန်အတွက် အသုံးပြုသူ၏ လုပ်ဆောင်ချက် လိုအပ်ပါသည်။</string>\n  <string name=\"patcher_step_unpack\">ပက်ချာ ပြင်ဆင်သည်</string>\n  <string name=\"view_announcement\">ကြေညာချက်ကို ကြည့်ရန်</string>\n  <string name=\"license\">လိုင်စင်</string>\n  <string name=\"source\">အရင်းအမြစ်</string>\n  <string name=\"repository\">သိုလှောင်ခန်း</string>\n  <string name=\"bundle_information_by_author\">%1$s မှ</string>\n  <string name=\"version_compatibility_warning\">ရွေးချယ်ထားသော ဗားရှင်းသည် ရွေးချယ်ထားသော patches များနှင့် သဟဇာတမဖြစ်နိုင်ပါ။</string>\n  <string name=\"announcements\">ကြေညာချက်များ</string>\n  <string name=\"archive\">မှတ်တမ်း</string>\n  <string name=\"view_update\">အပ်ဒိတ်ကို ကြည့်ရှုပါ။</string>\n  <string name=\"update_checking_downloader\">စတင်သောအခါ ReVanced ဒေါင်းလုပ်လုပ်သူများ အပ်ဒိတ်များကို စစ်ဆေးပါ။</string>\n  <string name=\"update_checking_downloader_description\">အက်ပ်စတင်သောအခါ ထည့်သွင်းထားသော ReVanced ဒေါင်းလုပ်လုပ်သူများ၏ အပ်ဒိတ်များကို စစ်ဆေးပါ။</string>\n  <string name=\"prereleases_warning\">မထုတ်ပြန်မီ ဗားရှင်းများသည် မတည်ငြိမ်နိုင်ပြီး bug များ ပါဝင်နိုင်သည်။ အက်ပ်ပိတ်ခြင်း၊ ဒေတာဆုံးရှုံးခြင်း သို့မဟုတ် အခြား မမျှော်လင့်ထားသော ပြဿနာများ ကြုံတွေ့ရနိုင်သည်။ ဤအန္တရာယ်များကို လက်ခံနိုင်မှသာ ဤအရာကို ဖွင့်ပါ။</string>\n  <string name=\"changelog\">ပြောင်းလဲမှု မှတ်တမ်းကို ကြည့်ရှုပါ။</string>\n  <string name=\"no_announcements_found\">ကြေညာချက်များ မတွေ့ရှိပါ</string>\n  <string name=\"new_announcement\">ကြေညာချက်အသစ်:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"other\">%d ပြင်ဆင်မှုများ</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"other\">%d ပြင်ဆင်မှုများကို လုပ်ဆောင်ရန်</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"other\">%d ခု ရွေးချယ်ထားသည်</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nb-rNO/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">Lappeverktøy</string>\n  <string name=\"onboarding_welcome_to\">Velkommen til</string>\n  <string name=\"onboarding_welcome_back\">Hei! Det er den nye</string>\n  <string name=\"onboarding_apps_subtitle\">Du kan velge en app å patche nå eller gjøre det senere</string>\n  <string name=\"onboarding_updates_subtitle\">Konfigurer automatiske oppdateringer for å holde ReVanced Manager og patcher oppdatert</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager vil koble til %s for å laste ned innledende versjoner hvis enheten din er koblet til internett.</string>\n  <string name=\"retry\">Prøv på nytt</string>\n  <string name=\"onboarding_skip\">Hopp over for nå</string>\n  <string name=\"onboarding_recommended_version\">Anbefalt versjon: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Hopp over tillatelser?</string>\n  <string name=\"onboarding_permissions_skip_description\">Uten de nødvendige tillatelsene kan enkelte funksjoner ikke fungere korrekt. Du kan gi dem senere i appinnstillingene.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Hopp over likevel</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager trenger noen tillatelser for å fungere skikkelig</string>\n  <string name=\"permission_install_apps\">Installer ukjente apper</string>\n  <string name=\"permission_install_apps_description\">Kreves for å installere lappede applikasjoner</string>\n  <string name=\"permission_notifications\">Varsler</string>\n  <string name=\"permission_battery\">Batterioptimalisering</string>\n  <string name=\"permission_battery_description\">Forhindrer at lapping avbrytes i bakgrunnen</string>\n  <string name=\"permission_grant\">Gi</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager nedlastervert</string>\n  <string name=\"downloader_host_permission_description\">Brukes til å kontrollere tilgang til ReVanced Manager-nedlastere. Kun ReVanced Manager har dette.</string>\n  <string name=\"fab_patch_app\">Lap en app</string>\n  <string name=\"fab_add_patches\">Legg til lapper</string>\n  <string name=\"new_downloader_notification\">Ny(e) nedlaster(e) tilgjengelig. Klikk her for å konfigurere dem.</string>\n  <string name=\"patches_not_downloaded\">Oppdateringer er ikke lastet ned.</string>\n  <string name=\"app_source_dialog_option_auto_description\">Bruk installert app, deretter nedlastet APK, deretter tilgjengelige nedlastere</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Ingen kompatibel app eller nedlastere tilgjengelig</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Monterte apper kan ikke lappes igjen uten root-tilgang</string>\n  <string name=\"patch_selector_item\">Velg lapper</string>\n  <string name=\"patch_selector_item_description\">%d lapper valgt</string>\n  <string name=\"patch_selection_changed_warning\">Utvalget av oppdateringer er endret</string>\n  <string name=\"apk_source_selector_item\">Velg APK-kilde</string>\n  <string name=\"apk_source_auto\">Automatisk</string>\n  <string name=\"apk_source_auto_installed\">Automatisk · Bruker installert APK</string>\n  <string name=\"apk_source_auto_downloaded\">Automatisk · Bruker nedlastet APK</string>\n  <string name=\"apk_source_auto_downloader\">Automatisk · Bruker tilgjengelige nedlastere</string>\n  <string name=\"apk_source_auto_storage\">Automatisk · Velg fra lagring</string>\n  <string name=\"apk_source_downloaded\">Allerede nedlastet</string>\n  <string name=\"auto_updates_dialog_description\">Vil du at ReVanced Manager periodisk skal sjekke etter oppdateringer for følgende komponenter?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced-lapper</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Nedlastere</string>\n  <string name=\"auto_updates_dialog_note\">Disse innstillingene kan endres senere.\n\n    ReVanced Manager vil koble til %s for å laste ned innledende versjoner hvis enheten din er koblet til internett.</string>\n  <string name=\"announcements_filter_tag\">Filtrer etter tagg</string>\n  <string name=\"announcements_show_archived\">Vis arkiverte</string>\n  <string name=\"updates_description\">Sjekk etter oppdateringer og se endringslogg</string>\n  <string name=\"downloads_description\">Nedlastere og nedlastede apper</string>\n  <string name=\"safeguards_toggled_warning\">Sikkerhetsmekanismer er vekslet</string>\n  <string name=\"about_app_name\">Om %1$s</string>\n  <string name=\"search_languages\">Søk språk …</string>\n  <string name=\"keystore\">Nøkkelarkiv</string>\n  <string name=\"patches_selections\">Valg av lapper</string>\n  <string name=\"select_bundle_for_import\">Velg pakke å importere til</string>\n  <string name=\"select_bundle_for_export\">Velg pakke å eksportere fra</string>\n  <string name=\"patch_selection_packages\">Apper med lagrede valg</string>\n  <string name=\"patch_selection_entries\">Totalt antall valgte lapper</string>\n  <string name=\"reset_configuration\">Tilbakestill konfigurasjon</string>\n  <string name=\"reset_patch_selection\">Valg av lapper</string>\n  <string name=\"reset_patch_options\">Lappealternativer</string>\n  <string name=\"downloaders\">Nedlastere</string>\n  <string name=\"downloader_prereleases\">Bruk forhåndsutgivelser</string>\n  <string name=\"downloader_prereleases_description\">Bruk forhåndsversjoner av hovednedlasteren</string>\n  <string name=\"downloader_state_loaded\">Lastet</string>\n  <string name=\"downloader_state_failed\">Kunne ikke lastes inn. Klikk for mer informasjon</string>\n  <string name=\"downloader_state_missing\">Mangler</string>\n  <string name=\"downloader_delete_apps_title\">Slett valgte apper</string>\n  <string name=\"downloader_delete_apps_description\">Er du sikker på at du vil slette de valgte appene?</string>\n  <string name=\"downloader_delete_single_description\">Er du sikker på at du vil slette \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps_description\">Apper lastet ned via ReVanced Manager vil vises her.</string>\n  <string name=\"downloader_url\">Nedlaster-URL</string>\n  <string name=\"downloader_add\">Legg til nedlaster</string>\n  <string name=\"select_downloader_type_dialog_description\">Legg til nye nedlastere fra URL eller lokale filer</string>\n  <string name=\"local_downloaders_description\">Legg til nedlastere fra lokal lagring.</string>\n  <string name=\"remote_downloaders_description\">Legg til nedlastere fra URL. Kan oppdateres automatisk.</string>\n  <string name=\"install_revanced_downloaders\">Installer nedlastere for å få apper direkte i ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Installer ReVanced-nedlastere</string>\n  <string name=\"cancel_downloader_install_title\">Avbryt nedlasterinstallasjon?</string>\n  <string name=\"cancel_downloader_install_description\">En nedlasterinstallasjon pågår. Hvis du forlater nå, vil nedlastingen bli avbrutt.</string>\n  <string name=\"downloader_sources_unavailable_title\">Disse nedlasterne mangler</string>\n  <string name=\"downloader_sources_unavailable_description\">Klikk på oppdateringsknappen for å fikse det.</string>\n  <string name=\"downloader_update_failed\">Kunne ikke oppdatere nedlaster: %s</string>\n  <string name=\"downloader_replace_fail\">Kunne ikke importere nedlaster: %s</string>\n  <string name=\"select_from_storage_description\">Velg en APK-fil fra lagring med filvelgeren</string>\n  <string name=\"enable\">Aktiver</string>\n  <string name=\"disable\">Deaktiver</string>\n  <string name=\"process_runtime_memory_limit_description\">Maksimal mengde minne som lappeprosessen kan bruke</string>\n  <string name=\"reset_onboarding\">Tilbakestill introduksjon</string>\n  <string name=\"reset_onboarding_description\">Vis introduksjonsskjermen ved neste applansering</string>\n  <string name=\"api_not_working_title\">API-tjenesten er for øyeblikket nede</string>\n  <string name=\"api_not_working_description\">Noen funksjoner kan være påvirket. Sjekk tilkoblingen din eller API-URL i innstillingene.</string>\n  <string name=\"no_patched_apps_found\">Ingen lappede apper funnet</string>\n  <string name=\"no_patched_apps_description\">Du har for øyeblikket ingen lappede apper som vi kjenner til. Endre det ved å lappe din første app!</string>\n  <string name=\"patched_apps_section_title\">Lappede apper</string>\n  <string name=\"patchable_apps_section_title\">Apper som kan lappes</string>\n  <string name=\"no_patches_found\">Ingen lapper funnet</string>\n  <string name=\"no_patches_description\">Du har ingen lapper ennå. Legg til lapper ved å trykke på knappen nedenfor!</string>\n  <string name=\"split_apk_not_supported\">Delte APK-er kan ikke lappes</string>\n  <string name=\"no_downloaders_installed\">Ingen app-nedlastere er installert!</string>\n  <string name=\"no_downloaders_trusted\">Ingen app-nedlastere er betrodd! Vennligst sjekk innstillingene dine.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Pakker</string>\n  <string name=\"patch_selector_sheet_actions_title\">Handlinger</string>\n  <string name=\"restore_default_selection\">Gjenopprett standardvalg</string>\n  <string name=\"deselect_all\">Avmarker alle</string>\n  <string name=\"invert_selection\">Inverter valg</string>\n  <string name=\"deselect_all_except\">Avmarker alle unntatt %s</string>\n  <string name=\"scope_dialog_title\">Bruk på</string>\n  <string name=\"scope_all_patches\">Alle oppdateringer</string>\n  <string name=\"scope_bundle_patches\">Kun %s</string>\n  <string name=\"save_as_file\">Lagre til filer</string>\n  <string name=\"export_patcher_logs\">Eksporter lappelogger</string>\n  <string name=\"save_logs_success\">Logger lagret</string>\n  <string name=\"downloader_activity_dialog_body\">Brukerinteraksjon er påkrevd for å fortsette med denne nedlasteren.</string>\n  <string name=\"patcher_step_unpack\">Forbered oppdateringsprogram</string>\n  <string name=\"view_announcement\">Vis kunngjøring</string>\n  <string name=\"license\">Lisens</string>\n  <string name=\"source\">Kilde</string>\n  <string name=\"repository\">Repositorium</string>\n  <string name=\"bundle_information_by_author\">Av %1$s</string>\n  <string name=\"version_compatibility_warning\">Valgt versjon kan være inkompatibel med valgte patcher</string>\n  <string name=\"announcements\">Kunngjøringer</string>\n  <string name=\"archive\">Arkiv</string>\n  <string name=\"view_update\">Vis oppdatering</string>\n  <string name=\"update_checking_downloader\">Sjekk etter ReVanced-nedlasteroppdateringer ved oppstart</string>\n  <string name=\"update_checking_downloader_description\">Sjekk etter oppdateringer til installerte ReVanced-nedlastere når applikasjonen starter</string>\n  <string name=\"prereleases_warning\">Forhåndsutgivelser kan være ustabile og inneholde feil. Du kan oppleve krasjer, tap av data eller andre uventede problemer. Aktiver dette kun hvis du er komfortabel med disse risikoene.</string>\n  <string name=\"changelog\">Vis endringslogg</string>\n  <string name=\"no_announcements_found\">Ingen kunngjøringer funnet</string>\n  <string name=\"new_announcement\">Ny kunngjøring:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d oppdatering</item>\n    <item quantity=\"other\">%d oppdateringer</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Utfør %d oppdatering</item>\n    <item quantity=\"other\">Utfør %d oppdateringer</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d valgt</item>\n    <item quantity=\"other\">%d valgt</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ne-rIN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">प्याचर</string>\n  <string name=\"onboarding_welcome_to\">स्वागत छ</string>\n  <string name=\"onboarding_welcome_back\">नमस्ते! यो नयाँ हो</string>\n  <string name=\"onboarding_apps_subtitle\">तपाईं अहिले प्याच गर्न एउटा एप चयन गर्न सक्नुहुन्छ वा पछि गर्न सक्नुहुन्छ</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager र प्याचहरू अद्यावधिक राख्न स्वचालित अपडेटहरू कन्फिगर गर्नुहोस्</string>\n  <string name=\"onboarding_updates_note\">तपाईंको उपकरण इन्टरनेटमा जडान भएको खण्डमा प्रारम्भिक संस्करणहरू डाउनलोड गर्नका लागि ReVanced Manager ले %s मा जडान गर्नेछ।</string>\n  <string name=\"retry\">पुन: प्रयास गर्नुहोस्</string>\n  <string name=\"onboarding_skip\">अहिलेका लागि छोड्नुहोस्</string>\n  <string name=\"onboarding_recommended_version\">सिफारिस गरिएको संस्करण: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">अनुमतिहरू छोड्ने?</string>\n  <string name=\"onboarding_permissions_skip_description\">आवश्यक अनुमतिहरू बिना, केही सुविधाहरूले सही रूपमा काम नगर्न सक्छन्। तपाईंले तिनीहरूलाई पछि एप सेटिङहरूमा दिन सक्नुहुन्छ।</string>\n  <string name=\"onboarding_permissions_skip_anyway\">जे भए पनि छोड्नुहोस्</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager लाई सही रूपमा काम गर्न केही अनुमतिहरू चाहिन्छ</string>\n  <string name=\"permission_install_apps\">अज्ञात एपहरू स्थापना गर्नुहोस्</string>\n  <string name=\"permission_install_apps_description\">प्याच गरिएका अनुप्रयोगहरू स्थापना गर्न आवश्यक छ</string>\n  <string name=\"permission_notifications\">अधिसूचनाहरू</string>\n  <string name=\"permission_battery\">ब्याट्री अनुकूलन</string>\n  <string name=\"permission_battery_description\">पृष्ठभूमिमा प्याचिङ अवरुद्ध हुनबाट रोक्छ</string>\n  <string name=\"permission_grant\">अनुदान</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager डाउनलोडर होस्ट</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager डाउनलोडरहरूमा पहुँच नियन्त्रण गर्न प्रयोग गरिन्छ। यो ReVanced Manager सँग मात्र छ।</string>\n  <string name=\"fab_patch_app\">एक एप प्याच गर्नुहोस्</string>\n  <string name=\"fab_add_patches\">प्याचहरू थप्नुहोस्</string>\n  <string name=\"new_downloader_notification\">नयाँ डाउनलोडर(हरू) उपलब्ध छन्। तिनीहरूलाई कन्फिगर गर्न यहाँ क्लिक गर्नुहोस्।</string>\n  <string name=\"patches_not_downloaded\">प्याचहरू डाउनलोड गरिएका छैनन्।</string>\n  <string name=\"app_source_dialog_option_auto_description\">स्थापित एप प्रयोग गर्नुहोस्, त्यसपछि डाउनलोड गरिएको APK, त्यसपछि उपलब्ध डाउनलोडरहरू</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">कुनै उपयुक्त एप वा डाउनलोडरहरू उपलब्ध छैनन्</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">रूट पहुँच बिना माउन्ट गरिएका एपहरू फेरि प्याच गर्न सकिँदैन</string>\n  <string name=\"patch_selector_item\">प्याचहरू चयन गर्नुहोस्</string>\n  <string name=\"patch_selector_item_description\">%d प्याचहरू चयन गरियो</string>\n  <string name=\"patch_selection_changed_warning\">प्याचहरूको चयन परिवर्तन गरिएको छ</string>\n  <string name=\"apk_source_selector_item\">APK स्रोत चयन गर्नुहोस्</string>\n  <string name=\"apk_source_auto\">स्वतः</string>\n  <string name=\"apk_source_auto_installed\">स्वतः · स्थापित APK प्रयोग गर्दै</string>\n  <string name=\"apk_source_auto_downloaded\">स्वतः · डाउनलोड गरिएको APK प्रयोग गर्दै</string>\n  <string name=\"apk_source_auto_downloader\">स्वचालित · उपलब्ध डाउनलोडरहरू प्रयोग गर्दै</string>\n  <string name=\"apk_source_auto_storage\">स्वचालित · भण्डारणबाट चयन गर्नुहोस्</string>\n  <string name=\"apk_source_downloaded\">पहिल्यै डाउनलोड गरियो</string>\n  <string name=\"auto_updates_dialog_description\">के तपाईं ReVanced Manager लाई निम्न घटकहरूको लागि आवधिक रूपमा अपडेटहरू जाँच गर्न चाहनुहुन्छ?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced प्याचहरू</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: डाउनलोडरहरू</string>\n  <string name=\"auto_updates_dialog_note\">यी सेटिङहरू पछि परिवर्तन गर्न सकिन्छ।\n\n    तपाईंको उपकरण इन्टरनेटमा जडान भएको खण्डमा प्रारम्भिक संस्करणहरू डाउनलोड गर्नका लागि ReVanced Manager ले %s मा जडान गर्नेछ।</string>\n  <string name=\"announcements_filter_tag\">ट्याग अनुसार फिल्टर गर्नुहोस्</string>\n  <string name=\"announcements_show_archived\">अभिलेख गरिएकाहरू देखाउनुहोस्</string>\n  <string name=\"updates_description\">अपडेटहरूको लागि जाँच गर्नुहोस् र चेन्जलग हेर्नुहोस्</string>\n  <string name=\"downloads_description\">डाउनलोडरहरू र डाउनलोड गरिएका एपहरू</string>\n  <string name=\"safeguards_toggled_warning\">सुरक्षाहरू टगल गरिएका छन्</string>\n  <string name=\"about_app_name\">%1$s को बारेमा</string>\n  <string name=\"search_languages\">भाषाहरू खोज्नुहोस्…</string>\n  <string name=\"keystore\">कुञ्जी भण्डार</string>\n  <string name=\"patches_selections\">प्याच चयनहरू</string>\n  <string name=\"select_bundle_for_import\">आयात गर्नका लागि बन्डल चयन गर्नुहोस्</string>\n  <string name=\"select_bundle_for_export\">निर्यात गर्नका लागि बन्डल चयन गर्नुहोस्</string>\n  <string name=\"patch_selection_packages\">बचत गरिएका चयनहरू भएका एपहरू</string>\n  <string name=\"patch_selection_entries\">कुल चयन गरिएका प्याचहरू</string>\n  <string name=\"reset_configuration\">कन्फिगरेसन रिसेट गर्नुहोस्</string>\n  <string name=\"reset_patch_selection\">प्याच चयनहरू</string>\n  <string name=\"reset_patch_options\">प्याच विकल्पहरू</string>\n  <string name=\"downloaders\">डाउनलोडरहरू</string>\n  <string name=\"downloader_prereleases\">पूर्व-रिलीजहरू प्रयोग गर्नुहोस्</string>\n  <string name=\"downloader_prereleases_description\">मुख्य डाउनलोडरका पूर्व-रिलीज संस्करणहरू प्रयोग गर्नुहोस्</string>\n  <string name=\"downloader_state_loaded\">लोड भयो</string>\n  <string name=\"downloader_state_failed\">लोड गर्न असफल भयो। थप विवरणका लागि क्लिक गर्नुहोस्</string>\n  <string name=\"downloader_state_missing\">हराएको</string>\n  <string name=\"downloader_delete_apps_title\">चयन गरिएका एपहरू मेटाउनुहोस्</string>\n  <string name=\"downloader_delete_apps_description\">के तपाईं चयन गरिएका एपहरू मेटाउन निश्चित हुनुहुन्छ?</string>\n  <string name=\"downloader_delete_single_description\">के तपाईं \\\"%s\\\" मेटाउन चाहनुहुन्छ?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager मार्फत डाउनलोड गरिएका एपहरू यहाँ देखा पर्नेछन्।</string>\n  <string name=\"downloader_url\">डाउनलोडर URL</string>\n  <string name=\"downloader_add\">डाउनलोडर थप्नुहोस्</string>\n  <string name=\"select_downloader_type_dialog_description\">URL वा स्थानीय फाइलहरूबाट नयाँ डाउनलोडरहरू थप्नुहोस्</string>\n  <string name=\"local_downloaders_description\">स्थानीय भण्डारणबाट डाउनलोडरहरू थप्नुहोस्।</string>\n  <string name=\"remote_downloaders_description\">URL बाट डाउनलोडरहरू थप्नुहोस्। स्वचालित रूपमा अद्यावधिक गर्न सकिन्छ।</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager भित्र सीधा एपहरू प्राप्त गर्न डाउनलोडरहरू स्थापना गर्नुहोस्।</string>\n  <string name=\"install_revanced_downloader\">ReVanced डाउनलोडरहरू स्थापना गर्नुहोस्</string>\n  <string name=\"cancel_downloader_install_title\">डाउनलोडरहरूको स्थापना रद्द गर्ने?</string>\n  <string name=\"cancel_downloader_install_description\">डाउनलोडरहरूको स्थापना प्रक्रियामा छ। यदि तपाईं अहिले छोड्नुहुन्छ भने, डाउनलोड रद्द हुनेछ।</string>\n  <string name=\"downloader_sources_unavailable_title\">यी डाउनलोडरहरू हराएका छन्</string>\n  <string name=\"downloader_sources_unavailable_description\">यसलाई ठीक गर्न अपडेट बटनमा क्लिक गर्नुहोस्।</string>\n  <string name=\"downloader_update_failed\">डाउनलोडर अद्यावधिक गर्न असफल भयो: %s</string>\n  <string name=\"downloader_replace_fail\">डाउनलोडर आयात गर्न असफल भयो: %s</string>\n  <string name=\"select_from_storage_description\">फाइल पिकर प्रयोग गरेर भण्डारणबाट एक APK फाइल चयन गर्नुहोस्</string>\n  <string name=\"enable\">सक्षम गर्नुहोस्</string>\n  <string name=\"disable\">असक्षम गर्नुहोस्</string>\n  <string name=\"process_runtime_memory_limit_description\">प्याचर प्रक्रियाले प्रयोग गर्न सक्ने अधिकतम मेमोरी मात्रा</string>\n  <string name=\"reset_onboarding\">अनबोर्डिङ रिसेट गर्नुहोस्</string>\n  <string name=\"reset_onboarding_description\">अर्को एप सुरु गर्दा अनबोर्डिङ स्क्रिन देखाउनुहोस्</string>\n  <string name=\"api_not_working_title\">API सेवा हाल बन्द छ</string>\n  <string name=\"api_not_working_description\">केही सुविधाहरू प्रभावित हुन सक्छन्। आफ्नो जडान वा सेटिङहरूमा API URL जाँच गर्नुहोस्।</string>\n  <string name=\"no_patched_apps_found\">कुनै प्याच गरिएका एपहरू फेला परेनन्</string>\n  <string name=\"no_patched_apps_description\">तपाईंसँग हाल हामीले चिनेका कुनै पनि प्याच गरिएका एपहरू छैनन्। तपाईंको पहिलो एप प्याच गरेर यसलाई परिवर्तन गर्नुहोस्!</string>\n  <string name=\"patched_apps_section_title\">प्याच गरिएका एपहरू</string>\n  <string name=\"patchable_apps_section_title\">प्याच गर्न सकिने एपहरू</string>\n  <string name=\"no_patches_found\">कुनै प्याचहरू फेला परेनन्</string>\n  <string name=\"no_patches_description\">तपाईंसँग अझै कुनै प्याचहरू छैनन्। तलको बटन ट्याप गरेर प्याचहरू थप्नुहोस्!</string>\n  <string name=\"split_apk_not_supported\">विभाजित APK हरू प्याच गर्न सकिँदैन</string>\n  <string name=\"no_downloaders_installed\">कुनै एप डाउनलोडरहरू स्थापना गरिएका छैनन्!</string>\n  <string name=\"no_downloaders_trusted\">कुनै एप डाउनलोडरहरू विश्वास गरिएका छैनन्! कृपया आफ्नो सेटिङहरू जाँच गर्नुहोस्।</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">प्याकेजहरू</string>\n  <string name=\"patch_selector_sheet_actions_title\">कार्यहरू</string>\n  <string name=\"restore_default_selection\">पूर्वनिर्धारित चयन पुनर्स्थापना गर्नुहोस्</string>\n  <string name=\"deselect_all\">सबै चयन हटाउनुहोस्</string>\n  <string name=\"invert_selection\">चयन उल्ट्याउनुहोस्</string>\n  <string name=\"deselect_all_except\">%s बाहेक सबै अचयन गर्नुहोस्</string>\n  <string name=\"scope_dialog_title\">लागू गर्नुहोस्</string>\n  <string name=\"scope_all_patches\">सबै प्याचहरू</string>\n  <string name=\"scope_bundle_patches\">%s मात्र</string>\n  <string name=\"save_as_file\">फाइलहरूमा बचत गर्नुहोस्</string>\n  <string name=\"export_patcher_logs\">प्याचर लगहरू निर्यात गर्नुहोस्</string>\n  <string name=\"save_logs_success\">लगहरू बचत गरियो</string>\n  <string name=\"downloader_activity_dialog_body\">यो डाउनलोडरका साथ अगाडि बढ्न प्रयोगकर्ताको अन्तरक्रिया आवश्यक छ।</string>\n  <string name=\"patcher_step_unpack\">प्याचर तयार गर्नुहोस्</string>\n  <string name=\"view_announcement\">घोषणा हेर्नुहोस्</string>\n  <string name=\"license\">इजाजतपत्र</string>\n  <string name=\"source\">स्रोत</string>\n  <string name=\"repository\">भण्डार</string>\n  <string name=\"bundle_information_by_author\">%1$s द्वारा</string>\n  <string name=\"version_compatibility_warning\">चयन गरिएको संस्करण चयन गरिएका प्याचहरूसँग असंगत हुन सक्छ</string>\n  <string name=\"announcements\">घोषणाहरू</string>\n  <string name=\"archive\">अभिलेख</string>\n  <string name=\"view_update\">अपडेट हेर्नुहोस्</string>\n  <string name=\"update_checking_downloader\">सुरु गर्दा ReVanced डाउनलोडर अपडेटहरूको लागि जाँच गर्नुहोस्</string>\n  <string name=\"update_checking_downloader_description\">अनुप्रयोग सुरु हुँदा स्थापित ReVanced डाउनलोडरहरूका लागि अपडेटहरू जाँच गर्नुहोस्</string>\n  <string name=\"prereleases_warning\">पूर्व-रिलीज संस्करणहरू अस्थिर हुन सक्छन् र बगहरू समावेश गर्न सक्छन्। तपाईंले क्र्यासहरू, डेटा हानि, वा अन्य अप्रत्याशित समस्याहरू अनुभव गर्न सक्नुहुन्छ। यदि तपाईं यी जोखिमहरूसँग सहज हुनुहुन्छ भने मात्र यसलाई सक्षम गर्नुहोस्।</string>\n  <string name=\"changelog\">चेन्जलग हेर्नुहोस्</string>\n  <string name=\"no_announcements_found\">कुनै घोषणा भेटिएन</string>\n  <string name=\"new_announcement\">नयाँ घोषणा:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d प्याच</item>\n    <item quantity=\"other\">%d प्याचहरू</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d प्याच कार्यान्वयन गर्नुहोस्</item>\n    <item quantity=\"other\">%d प्याचहरू कार्यान्वयन गर्नुहोस्</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d चयन गरिएको</item>\n    <item quantity=\"other\">%d चयन गरिएका</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-nl-rNL/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Patcher</string>\n  <string name=\"patches\">Patches</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Beheerder</string>\n  <string name=\"onboarding_welcome_to\">Welkom bij</string>\n  <string name=\"onboarding_welcome_back\">Hoi! Het is de nieuwe</string>\n  <string name=\"onboarding_apps_subtitle\">U kunt nu een app selecteren om te patchen of dit later doen</string>\n  <string name=\"onboarding_apps_network_error\">Kon patches niet laden omdat het netwerk niet beschikbaar of instabiel is. Maak verbinding met een stabiel netwerk en probeer het opnieuw.</string>\n  <string name=\"onboarding_updates_subtitle\">Configureer automatische updates om ReVanced Manager en patches up-to-date te houden</string>\n  <string name=\"banner_sources_not_downloaded_description\">Patches en downloaders konden niet worden gedownload tijdens de installatie. Tik op \\\"update\\\" om ze te downloaden.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager zal verbinding maken met %s om initiële versies te downloaden als uw apparaat met het internet is verbonden.</string>\n  <string name=\"retry\">Opnieuw proberen</string>\n  <string name=\"onboarding_skip\">Nu overslaan</string>\n  <string name=\"onboarding_recommended_version\">Aanbevolen versie: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Machtigingen overslaan?</string>\n  <string name=\"onboarding_permissions_skip_description\">Zonder de vereiste machtigingen werken sommige functies mogelijk niet correct. Je kunt ze later verlenen in de app-instellingen.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Toch overslaan</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager heeft enkele machtigingen nodig om correct te werken</string>\n  <string name=\"permission_install_apps\">Onbekende apps installeren</string>\n  <string name=\"permission_install_apps_description\">Vereist om gepatchte applicaties te installeren</string>\n  <string name=\"permission_notifications\">Meldingen</string>\n  <string name=\"permission_notifications_description\">Maakt ononderbroken patchen op de achtergrond mogelijk</string>\n  <string name=\"permission_battery\">Batterijoptimalisatie</string>\n  <string name=\"permission_battery_description\">Voorkomt dat patchen op de achtergrond wordt onderbroken</string>\n  <string name=\"permission_grant\">Verlenen</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager downloaderhost</string>\n  <string name=\"downloader_host_permission_description\">Wordt gebruikt om de toegang tot ReVanced Manager downloaders te beheren. Alleen ReVanced Manager heeft dit.</string>\n  <string name=\"toast_copied_to_clipboard\">Gekopieerd!</string>\n  <string name=\"copy_to_clipboard\">Kopiëren naar klembord</string>\n  <string name=\"dashboard\">Dashboard</string>\n  <string name=\"settings\">Instellingen</string>\n  <string name=\"select_app\">Selecteer een app</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d geselecteerd</string>\n  <string name=\"fab_patch_app\">Patch een app</string>\n  <string name=\"fab_add_patches\">Patches toevoegen</string>\n  <string name=\"new_downloader_notification\">Nieuwe downloader(s) beschikbaar. Klik hier om ze te configureren.</string>\n  <string name=\"unsupported_architecture_warning\">Patchen op deze apparaatarchitectuur wordt niet ondersteund en zal waarschijnlijk mislukken.</string>\n  <string name=\"import_\">Importeren</string>\n  <string name=\"import_patches\">Patches importeren</string>\n  <string name=\"file_field_set\">Geselecteerd</string>\n  <string name=\"file_field_not_set\">Niet geselecteerd</string>\n  <string name=\"field_not_set\">Niet ingesteld</string>\n  <string name=\"patches_missing\">Ontbrekend</string>\n  <string name=\"patches_error\">Fout</string>\n  <string name=\"patches_error_description\">Patches konden niet worden geladen. Klik om de fout te bekijken</string>\n  <string name=\"patches_not_downloaded\">Patches zijn niet gedownload.</string>\n  <string name=\"patches_name_default\">Patches</string>\n  <string name=\"patches_name_fallback\">Naamloos</string>\n  <string name=\"android_11_bug_dialog_title\">Android 11-bug</string>\n  <string name=\"android_11_bug_dialog_description\">De app-installatietoestemming moet vooraf worden verleend om een bug in het Android 11-systeem te voorkomen die de gebruikerservaring negatief zal beïnvloeden.</string>\n  <string name=\"no_network_toast\">Geen internetverbinding beschikbaar</string>\n  <string name=\"selected_app_meta_any_version\">Elke beschikbare versie</string>\n  <string name=\"app_source_dialog_title\">Selecteer bron</string>\n  <string name=\"app_source_dialog_option_auto\">Automatisch</string>\n  <string name=\"app_source_dialog_option_auto_description\">Gebruik geïnstalleerde app, dan gedownloade APK, dan beschikbare downloaders</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Geen compatibele app of downloaders beschikbaar</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Gemonteerde apps kunnen niet opnieuw worden gepatcht zonder roottoegang</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Versie %s komt niet overeen met de voorgestelde versie</string>\n  <string name=\"patch_item_description\">Begin met het patchen van de applicatie</string>\n  <string name=\"patch_selector_item\">Patches selecteren</string>\n  <string name=\"patch_selector_item_description\">%d patches geselecteerd</string>\n  <string name=\"patch_selection_changed_warning\">Selectie van patches is gewijzigd</string>\n  <string name=\"no_patches_selected\">Geen patches geselecteerd</string>\n  <string name=\"network_unavailable_warning\">Uw apparaat is niet verbonden met internet. Downloaden zal later mislukken.</string>\n  <string name=\"network_metered_warning\">U gebruikt momenteel een verbinding met datalimiet. Er kunnen kosten voor dataverbruik in rekening worden gebracht door uw serviceprovider.</string>\n  <string name=\"apk_source_selector_item\">Selecteer APK-bron</string>\n  <string name=\"apk_source_auto\">Automatisch</string>\n  <string name=\"apk_source_auto_installed\">Automatisch · Gebruikmakend van geïnstalleerde APK</string>\n  <string name=\"apk_source_auto_downloaded\">Automatisch · Gebruikmakend van gedownloade APK</string>\n  <string name=\"apk_source_auto_downloader\">Automatisch · Beschikbare downloaders gebruiken</string>\n  <string name=\"apk_source_auto_storage\">Automatisch · Selecteren uit opslag</string>\n  <string name=\"apk_source_downloader\">Gebruikt %s</string>\n  <string name=\"apk_source_installed\">Geïnstalleerde APK gebruiken</string>\n  <string name=\"apk_source_local\">Een lokaal APK-bestand gebruiken</string>\n  <string name=\"apk_source_downloaded\">Reeds gedownload</string>\n  <string name=\"legacy_import_failed\">Verouderde instellingen konden niet worden geïmporteerd</string>\n  <string name=\"auto_updates_dialog_title\">Updates configureren</string>\n  <string name=\"auto_updates_dialog_description\">Wilt u dat ReVanced Manager periodiek controleert op updates voor de volgende componenten?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Patches</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Downloaders</string>\n  <string name=\"auto_updates_dialog_note\">Deze instellingen kunnen later worden gewijzigd.\n\n    ReVanced Manager zal verbinding maken met %s om initiële versies te downloaden als uw apparaat met het internet is verbonden.</string>\n  <string name=\"announcements_filter_tag\">Filteren op tag</string>\n  <string name=\"announcements_show_archived\">Gearchiveerde tonen</string>\n  <string name=\"general\">Algemeen</string>\n  <string name=\"general_description\">Taal, thema, dynamische kleur</string>\n  <string name=\"updates\">Updates</string>\n  <string name=\"updates_description\">Controleren op updates en changelog bekijken</string>\n  <string name=\"downloads\">Downloads</string>\n  <string name=\"downloads_description\">Downloaders en gedownloade apps</string>\n  <string name=\"import_export\">Importeren &amp; exporteren</string>\n  <string name=\"import_export_description\">Keystore, patch-opties en selectie</string>\n  <string name=\"advanced\">Geavanceerd</string>\n  <string name=\"advanced_description\">API-URL, geheugenlimiet, debuggen</string>\n  <string name=\"safeguards_toggled_warning\">Beveiligingen zijn omgeschakeld</string>\n  <string name=\"about\">Over</string>\n  <string name=\"about_app_name\">Over %1$s</string>\n  <string name=\"opensource_licenses\">Open source-licenties</string>\n  <string name=\"opensource_licenses_description\">Bekijk alle bibliotheken die zijn gebruikt om deze applicatie te maken</string>\n  <string name=\"contributors\">Medewerkers</string>\n  <string name=\"contributors_description\">Bekijk de medewerkers van ReVanced</string>\n  <string name=\"dynamic_color\">Dynamische kleur</string>\n  <string name=\"dynamic_color_description\">Kleuren aanpassen aan de achtergrond</string>\n  <string name=\"pure_black_theme\">Puur zwart thema</string>\n  <string name=\"pure_black_theme_description\">Gebruik puur zwarte achtergronden voor het donkere thema</string>\n  <string name=\"theme\">Thema</string>\n  <string name=\"theme_description\">Kies tussen een licht of donker thema</string>\n  <string name=\"language\">Taal</string>\n  <string name=\"language_description\">Kies de weergavetaal van de app</string>\n  <string name=\"language_system_default\">Systeemstandaard</string>\n  <string name=\"search_languages\">Talen zoeken…</string>\n  <string name=\"safeguards\">Beveiligingen</string>\n  <string name=\"patch_compat_check\">Compatibiliteitscontrole versie uitschakelen</string>\n  <string name=\"patch_compat_check_description\">Beperk patches niet tot compatibele app-versies</string>\n  <string name=\"patch_compat_check_confirmation\">Het selecteren van incompatibele patches kan leiden tot een kapotte app.\n\nWilt u toch doorgaan?</string>\n  <string name=\"suggested_version_safeguard\">Vereiste voorgestelde app-versie</string>\n  <string name=\"suggested_version_safeguard_description\">Forceer selectie van de voorgestelde app-versie</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Het selecteren van een app die niet de voorgestelde versie is, kan onverwachte problemen veroorzaken.\n\nWilt u toch doorgaan?</string>\n  <string name=\"patch_selection_safeguard\">Patchselectie en opties wijzigen toestaan</string>\n  <string name=\"patch_selection_safeguard_description\">Voorkom niet het selecteren of deselecteren van patches en het aanpassen van opties</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Het wijzigen van de patchselectie kan onverwachte problemen veroorzaken.\n\nToch inschakelen?</string>\n  <string name=\"universal_patches_safeguard\">Universele patches gebruiken toestaan</string>\n  <string name=\"universal_patches_safeguard_description\">Voorkom niet het gebruik van universele patches</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Universele patches zijn niet zo goed getest als patches die gericht zijn op specifieke apps.\n\nToch inschakelen?</string>\n  <string name=\"keystore\">Sleutelarchief</string>\n  <string name=\"patches_selections\">Patch-selecties</string>\n  <string name=\"import_keystore\">Keystore importeren</string>\n  <string name=\"import_keystore_description\">Een aangepaste keystore importeren</string>\n  <string name=\"import_keystore_dialog_title\">Keystore-gegevens invoeren</string>\n  <string name=\"import_keystore_dialog_description\">U moet de gegevens van de keystore invoeren om deze te importeren.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Gebruikersnaam (alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Wachtwoord</string>\n  <string name=\"import_keystore_dialog_button\">Importeren</string>\n  <string name=\"import_keystore_wrong_credentials\">Onjuiste keystore-gegevens</string>\n  <string name=\"import_keystore_success\">Keystore geïmporteerd</string>\n  <string name=\"export_keystore\">Keystore exporteren</string>\n  <string name=\"export_keystore_description\">De huidige keystore exporteren</string>\n  <string name=\"export_keystore_unavailable\">Geen keystore om te exporteren</string>\n  <string name=\"export_keystore_success\">Keystore geëxporteerd</string>\n  <string name=\"regenerate_keystore\">Keystore regenereren</string>\n  <string name=\"regenerate_keystore_description\">Een nieuwe keystore genereren</string>\n  <string name=\"regenerate_keystore_dialog_description\">U staat op het punt uw keystore te regenereren die de beheerder zal gebruiken tijdens het patchproces.\n\nU zult de eerder geïnstalleerde apps niet meer kunnen bijwerken via deze bron.</string>\n  <string name=\"regenerate_keystore_success\">De keystore is succesvol vervangen</string>\n  <string name=\"import_patch_selection\">Patchselectie importeren</string>\n  <string name=\"import_patch_selection_description\">Patchselectie importeren uit een JSON-bestand</string>\n  <string name=\"import_patch_selection_fail\">Patchselectie kon niet worden geïmporteerd: %s</string>\n  <string name=\"import_patch_selection_success\">Patchselectie geïmporteerd</string>\n  <string name=\"select_bundle_for_import\">Selecteer bundel om naar te importeren</string>\n  <string name=\"export_patch_selection\">Patchselectie exporteren</string>\n  <string name=\"export_patch_selection_description\">Patchselectie exporteren naar een JSON-bestand</string>\n  <string name=\"export_patch_selection_fail\">Patchselectie kon niet worden geëxporteerd: %s</string>\n  <string name=\"export_patch_selection_success\">Patchselectie geëxporteerd</string>\n  <string name=\"select_bundle_for_export\">Selecteer bundel om uit te exporteren</string>\n  <string name=\"patch_selection_packages\">Apps met opgeslagen selecties</string>\n  <string name=\"patch_selection_entries\">Totaal aantal geselecteerde patches</string>\n  <string name=\"reset_configuration\">Configuratie opnieuw instellen</string>\n  <string name=\"reset_patch_selection\">Patch-selecties</string>\n  <string name=\"reset_patch_selection_description\">De opgeslagen patchselectie resetten</string>\n  <string name=\"reset_patch_options\">Patch-opties</string>\n  <string name=\"reset_patch_options_description\">De opgeslagen patchopties resetten</string>\n  <string name=\"reset_patch_selection_success\">Patchselectie is gereset</string>\n  <string name=\"patch_selection_reset_all\">Patchselectie wereldwijd resetten</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">U staat op het punt om alle patchselecties te resetten. U moet elke patch handmatig opnieuw selecteren.</string>\n  <string name=\"patch_selection_reset_all_description\">Reset alle patchselecties</string>\n  <string name=\"patch_selection_reset_package\">Patchselectie resetten voor app</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">U staat op het punt de patchselectie voor de app \\\"%s\\\" te resetten. U moet elke patch handmatig opnieuw selecteren.</string>\n  <string name=\"patch_selection_reset_package_description\">Reset patchselectie voor één enkele app</string>\n  <string name=\"patch_selection_reset_patches\">Patchselectie resetten (enkelvoudig)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">U staat op het punt de patchselectie voor \\\"%s\\\" te resetten. U moet elke patch handmatig opnieuw selecteren.</string>\n  <string name=\"patch_selection_reset_patches_description\">Reset de patchselectie voor een specifieke verzameling patches</string>\n  <string name=\"patch_options_reset_package\">Patchopties voor app resetten</string>\n  <string name=\"patch_options_reset_package_dialog_description\">U staat op het punt de patchopties voor de app \\\"%s\\\" te resetten. U moet elke optie handmatig opnieuw toepassen.</string>\n  <string name=\"patch_options_reset_package_description\">Reset patchopties voor één enkele app</string>\n  <string name=\"patch_options_reset_patches\">Patchopties resetten (enkelvoudig)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">U staat op het punt de patchopties voor \\\"%s\\\" te resetten. U moet elke optie handmatig opnieuw toepassen.</string>\n  <string name=\"patch_options_reset_patches_description\">Reset de patchopties voor een specifieke verzameling patches</string>\n  <string name=\"patch_options_reset_all\">Patchopties globaal resetten</string>\n  <string name=\"patch_options_reset_all_dialog_description\">U staat op het punt alle patchopties te resetten. U moet elke optie handmatig opnieuw toepassen.</string>\n  <string name=\"patch_options_reset_all_description\">Reset alle patchopties</string>\n  <string name=\"downloaders\">Downloaders</string>\n  <string name=\"downloader_prereleases\">Gebruik voorlopige versies</string>\n  <string name=\"downloader_prereleases_description\">Gebruik voorlopige versies van de hoofddownloader</string>\n  <string name=\"downloader_state_loaded\">Geladen</string>\n  <string name=\"downloader_state_failed\">Laden mislukt. Klik voor meer details</string>\n  <string name=\"downloader_state_missing\">Ontbrekend</string>\n  <string name=\"downloader_delete_apps_title\">Geselecteerde apps verwijderen</string>\n  <string name=\"downloader_delete_apps_description\">Weet u zeker dat u de geselecteerde apps wilt verwijderen?</string>\n  <string name=\"downloader_delete_single_description\">Weet je zeker dat je \\\"%s\\\" wilt verwijderen?</string>\n  <string name=\"downloader_settings_no_apps\">Geen gedownloade apps gevonden.</string>\n  <string name=\"downloader_settings_no_apps_description\">Apps gedownload via ReVanced Manager verschijnen hier.</string>\n  <string name=\"downloader_url\">Downloader-URL</string>\n  <string name=\"downloader_add\">Downloader toevoegen</string>\n  <string name=\"select_downloader_type_dialog_description\">Nieuwe downloaders toevoegen via URL of lokale bestanden</string>\n  <string name=\"local_downloaders_description\">Downloaders toevoegen vanuit lokale opslag.</string>\n  <string name=\"remote_downloaders_description\">Downloaders toevoegen via URL. Kunnen automatisch worden bijgewerkt.</string>\n  <string name=\"install_revanced_downloaders\">Installeer downloaders om apps direct binnen ReVanced Manager te krijgen.</string>\n  <string name=\"install_revanced_downloader\">ReVanced Downloaders installeren</string>\n  <string name=\"cancel_downloader_install_title\">Installatie van downloaders annuleren?</string>\n  <string name=\"cancel_downloader_install_description\">Een installatie van downloaders is bezig. Als je nu weggaat, wordt de download geannuleerd.</string>\n  <string name=\"downloader_sources_unavailable_title\">Deze downloaders ontbreken</string>\n  <string name=\"downloader_sources_unavailable_description\">Klik op de updateknop om dit te herstellen.</string>\n  <string name=\"downloader_update_failed\">Mislukt om downloader bij te werken: %s</string>\n  <string name=\"downloader_replace_fail\">Mislukt om downloader te importeren: %s</string>\n  <string name=\"search_apps\">Apps zoeken…</string>\n  <string name=\"loading_body\">Laden…</string>\n  <string name=\"downloading_patches\">Patches downloaden…</string>\n  <string name=\"options\">Opties</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Ja</string>\n  <string name=\"no\">Nee</string>\n  <string name=\"edit\">Bewerken</string>\n  <string name=\"dialog_input_placeholder\">Waarde</string>\n  <string name=\"reset\">Resetten</string>\n  <string name=\"share\">Delen</string>\n  <string name=\"patch\">Patch</string>\n  <string name=\"select_from_storage\">Selecteren uit opslag</string>\n  <string name=\"select_from_storage_description\">Selecteer een APK-bestand uit opslag met behulp van de bestandsbrowser</string>\n  <string name=\"suggested_version_info\">Voorgestelde versie: %s</string>\n  <string name=\"type_anything\">Typ iets om verder te gaan</string>\n  <string name=\"search\">Patches zoeken…</string>\n  <string name=\"apply\">Toepassen</string>\n  <string name=\"help\">Help</string>\n  <string name=\"back\">Terug</string>\n  <string name=\"warning\">Waarschuwing</string>\n  <string name=\"add\">Toevoegen</string>\n  <string name=\"enable\">Inschakelen</string>\n  <string name=\"disable\">Uitschakelen</string>\n  <string name=\"close\">Sluiten</string>\n  <string name=\"clear\">Wissen</string>\n  <string name=\"system\">Systeem</string>\n  <string name=\"light\">Licht</string>\n  <string name=\"dark\">Donker</string>\n  <string name=\"appearance\">Uiterlijk</string>\n  <string name=\"networking\">Netwerken</string>\n  <string name=\"allow_metered_networks\">Gemeten netwerken toestaan</string>\n  <string name=\"allow_metered_networks_description\">Staat automatische updates toe op gemeten netwerken.\\n    De applicatie kan nog steeds waarschuwen voor gemeten netwerken bij handmatige bewerkingen.</string>\n  <string name=\"downloaded_apps\">Gedownloade apps</string>\n  <string name=\"process_runtime\">Patcher in een ander proces uitvoeren (experimenteel)</string>\n  <string name=\"process_runtime_description\">Dit is sneller en stelt Patcher in staat om meer geheugen te gebruiken</string>\n  <string name=\"process_runtime_memory_limit\">Geheugenlimiet Patcher-proces</string>\n  <string name=\"process_runtime_memory_limit_description\">De maximale hoeveelheid geheugen die het patchproces kan gebruiken</string>\n  <string name=\"debug_logs_export\">Debug-logs exporteren</string>\n  <string name=\"debug_logs_export_read_failed\">Lezen van logs mislukt (afsluitcode %d)</string>\n  <string name=\"debug_logs_export_failed\">Exporteren van logs mislukt</string>\n  <string name=\"debug_logs_export_success\">Logs geëxporteerd</string>\n  <string name=\"api_url\">API URL</string>\n  <string name=\"api_url_description\">De API die wordt gebruikt om benodigde bestanden te downloaden</string>\n  <string name=\"api_url_dialog_title\">API URL wijzigen</string>\n  <string name=\"api_url_dialog_description\">Wijzig de API URL van ReVanced Manager. ReVanced Manager gebruikt de API om patches en updates te downloaden.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager maakt verbinding met de API om patches en updates te downloaden. Zorg ervoor dat u deze vertrouwt.</string>\n  <string name=\"api_url_dialog_save\">Instellen</string>\n  <string name=\"api_url_dialog_reset\">API URL resetten</string>\n  <string name=\"device\">Apparaat</string>\n  <string name=\"device_android_version\">Android-versie</string>\n  <string name=\"device_model\">Model</string>\n  <string name=\"device_architectures\">CPU-architecturen</string>\n  <string name=\"device_memory_limit\">Geheugenlimieten</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normaal) - %2$dMB (Groot)</string>\n  <string name=\"patches_force_download\">Alle patches geforceerd downloaden</string>\n  <string name=\"patches_reset\">Patches resetten</string>\n  <string name=\"reset_onboarding\">Onboarding resetten</string>\n  <string name=\"reset_onboarding_description\">Toon het onboarding-scherm bij de volgende app-lancering</string>\n  <string name=\"patching\">Patchen</string>\n  <string name=\"signing\">Ondertekenen</string>\n  <string name=\"storage\">Opslag</string>\n  <string name=\"no_patch_found\">Geen patch gevonden. Controleer uw patches</string>\n  <string name=\"tab_apps\">Apps</string>\n  <string name=\"tab_patches\">Patches</string>\n  <string name=\"delete\">Verwijderen</string>\n  <string name=\"refresh\">Vernieuwen</string>\n  <string name=\"continue_anyways\">Toch doorgaan</string>\n  <string name=\"download_another_version\">Andere versie downloaden</string>\n  <string name=\"download_app\">App downloaden</string>\n  <string name=\"download_apk\">APK-bestand downloaden</string>\n  <string name=\"patches_download_fail\">Downloaden van patches mislukt: %s</string>\n  <string name=\"api_not_working_title\">De API-service is momenteel niet beschikbaar.</string>\n  <string name=\"api_not_working_description\">Sommige functies werken mogelijk niet. Controleer uw verbinding of API-URL in de instellingen.</string>\n  <string name=\"patches_replace_fail\">Importeren van patches mislukt: %s</string>\n  <string name=\"no_patched_apps_found\">Geen gepatchte apps gevonden</string>\n  <string name=\"no_patched_apps_description\">Je hebt momenteel geen gepatchte apps waarvan we op de hoogte zijn. Verander dat door je eerste app te patchen!</string>\n  <string name=\"patched_apps_section_title\">Gepatchte apps</string>\n  <string name=\"patchable_apps_section_title\">Apps die gepatcht kunnen worden</string>\n  <string name=\"no_patches_found\">Geen patches gevonden</string>\n  <string name=\"no_patches_description\">Je hebt nog geen patches. Voeg patches toe door op de onderstaande knop te tikken!</string>\n  <string name=\"tap_on_patches\">Tik op de patches voor meer informatie</string>\n  <string name=\"patches_selected\">%s geselecteerd</string>\n  <string name=\"incompatible_patches\">Incompatibele patches</string>\n  <string name=\"universal_patches\">Universele patches</string>\n  <string name=\"patch_selection_reset_toast\">Patchselectie en opties zijn gereset naar de aanbevolen standaardinstellingen</string>\n  <string name=\"patch_options_reset_toast\">Patchopties zijn gereset</string>\n  <string name=\"non_suggested_version_warning_title\">Niet-voorgestelde versie</string>\n  <string name=\"non_suggested_version_warning_description\">De versie van de app die u heeft geselecteerd, komt niet overeen met de voorgestelde versie.\\nGebruik de voorgestelde versie: %s\\n\\nOm toch door te gaan, schakelt u \\\"Voorgestelde app-versie vereisen\\\" uit in de geavanceerde instellingen.</string>\n  <string name=\"selection_warning_title\">Stoppen met standaardinstellingen?</string>\n  <string name=\"selection_warning_description\">Het wordt aanbevolen om de standaard patchselectie en -opties te gebruiken. Deze wijzigen kan leiden tot onverwachte problemen.\\n\\nU moet \\\"Wijzigen van patchselectie en opties toestaan\\\" inschakelen in de geavanceerde instellingen voordat u patches kunt wisselen.</string>\n  <string name=\"universal_patch_warning_description\">Universele patches hebben een algemener gebruik en werken niet zo betrouwbaar als patches die gericht zijn op specifieke apps. U kunt problemen ondervinden bij het gebruik ervan.\\n\\nU moet \\\"Gebruik van universele patches toestaan\\\" inschakelen in de geavanceerde instellingen voordat u universele patches kunt gebruiken.</string>\n  <string name=\"this_version\">Deze versie</string>\n  <string name=\"universal\">Elke app</string>\n  <string name=\"search_patches\">Patches zoeken</string>\n  <string name=\"app_version_not_compatible\">Deze patch is niet compatibel met de geselecteerde app-versie (%1$s)\\n\\nDeze is alleen compatibel met de volgende versie(s): %2$s</string>\n  <string name=\"continue_with_version\">Doorgaan met deze versie?</string>\n  <string name=\"version_not_compatible\">Niet alle patches zijn compatibel met deze versie (%s). Wilt u toch doorgaan?</string>\n  <string name=\"download_application\">Applicatie downloaden?</string>\n  <string name=\"app_not_installed\">De geselecteerde app is niet geïnstalleerd. Wilt u deze downloaden?</string>\n  <string name=\"failed_to_load_apk\">Laden van APK mislukt</string>\n  <string name=\"split_apk_not_supported\">Gesplitste APK\\'s kunnen niet worden gepatcht</string>\n  <string name=\"loading\">Laden…</string>\n  <string name=\"not_installed\">Niet geïnstalleerd</string>\n  <string name=\"installed\">Geïnstalleerd</string>\n  <string name=\"app_info\">App-informatie</string>\n  <string name=\"uninstall\">Deïnstalleren</string>\n  <string name=\"unpatch\">Patch ongedaan maken</string>\n  <string name=\"repatch\">Opnieuw patchen</string>\n  <string name=\"install_type\">Installatietype</string>\n  <string name=\"package_name\">Pakketnaam</string>\n  <string name=\"original_package_name\">Originele pakketnaam</string>\n  <string name=\"applied_patches\">Toegepaste patches</string>\n  <string name=\"view_applied_patches\">Bekijk toegepaste patches</string>\n  <string name=\"default_install\">Standaard</string>\n  <string name=\"mount_install\">Mounten</string>\n  <string name=\"mounted\">Gekoppeld</string>\n  <string name=\"not_mounted\">Niet gekoppeld</string>\n  <string name=\"mount\">Mounten</string>\n  <string name=\"unmount\">Ontkoppelen</string>\n  <string name=\"failed_to_mount\">Mounten mislukt: %s</string>\n  <string name=\"failed_to_unmount\">Ontkoppelen mislukt: %s</string>\n  <string name=\"unpatch_app\">App onpatchen?</string>\n  <string name=\"unpatch_description\">Weet u zeker dat u deze app wilt onpatchen?</string>\n  <string name=\"downloader_invalid_version\">Downloader heeft de juiste versie niet opgehaald</string>\n  <string name=\"downloader_app_not_found\">Downloader heeft de app niet gevonden</string>\n  <string name=\"downloader_error\">Downloaderfout: %s</string>\n  <string name=\"no_downloaders_installed\">Geen app-downloaders zijn geïnstalleerd!</string>\n  <string name=\"no_downloaders_trusted\">Geen app-downloaders zijn vertrouwd! Controleer je instellingen.</string>\n  <string name=\"already_patched\">Al gepatcht</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filter</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Compatibiliteit</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Pakketten</string>\n  <string name=\"patch_selector_sheet_actions_title\">Acties</string>\n  <string name=\"restore_default_selection\">Standaardselectie herstellen</string>\n  <string name=\"deselect_all\">Alles deselecteren</string>\n  <string name=\"invert_selection\">Selectie omkeren</string>\n  <string name=\"deselect_all_except\">Deselecteer alles behalve %s</string>\n  <string name=\"scope_dialog_title\">Toepassen op</string>\n  <string name=\"scope_all_patches\">Alle patches</string>\n  <string name=\"scope_bundle_patches\">Alleen %s</string>\n  <string name=\"string_option_menu_description\">Meer opties</string>\n  <string name=\"option_preset_custom_value\">Aangepaste waarde</string>\n  <string name=\"path_selector\">Selecteer uit opslag</string>\n  <string name=\"path_selector_parent_dir\">Vorige map</string>\n  <string name=\"path_selector_dirs\">Mappen</string>\n  <string name=\"path_selector_files\">Bestanden</string>\n  <string name=\"show_password_field\">Wachtwoord weergeven</string>\n  <string name=\"hide_password_field\">Wachtwoord verbergen</string>\n  <string name=\"installer\">Installatieprogramma</string>\n  <string name=\"install_app\">Installeren</string>\n  <string name=\"install_app_success\">App geïnstalleerd</string>\n  <string name=\"install_app_fail\">Installeren van app mislukt: %s</string>\n  <string name=\"reinstall_app_fail\">Herinstalleren van app mislukt: %s</string>\n  <string name=\"uninstall_app_fail\">Deïnstalleren van app mislukt: %s</string>\n  <string name=\"open_app\">Openen</string>\n  <string name=\"save_apk\">APK opslaan</string>\n  <string name=\"save_apk_success\">APK opgeslagen</string>\n  <string name=\"sign_fail\">Ondertekenen van APK mislukt: %s</string>\n  <string name=\"save_logs\">Logboeken opslaan</string>\n  <string name=\"save_as_file\">Opslaan naar bestanden</string>\n  <string name=\"export_patcher_logs\">Patch-logboeken exporteren</string>\n  <string name=\"save_logs_success\">Logboeken opgeslagen</string>\n  <string name=\"downloader_activity_dialog_body\">Gebruikersinteractie is vereist om door te gaan met deze downloader.</string>\n  <string name=\"select_install_type\">Selecteer installatietype</string>\n  <string name=\"patcher_step_group_preparing\">Voorbereiden</string>\n  <string name=\"patcher_step_load_patches\">Patches laden</string>\n  <string name=\"patcher_step_unpack\">Patcher voorbereiden</string>\n  <string name=\"patcher_step_group_patching\">Patchen</string>\n  <string name=\"patcher_step_group_saving\">Opslaan</string>\n  <string name=\"patcher_step_write_patched\">Gepatcht APK-bestand schrijven</string>\n  <string name=\"patcher_step_sign_apk\">Gepatcht APK-bestand ondertekenen</string>\n  <string name=\"patcher_notification_title\">Patchen bezig…</string>\n  <string name=\"patcher_notification_text\">Tik om terug te gaan naar de patcher</string>\n  <string name=\"patcher_stop_confirm_title\">Patcher stoppen</string>\n  <string name=\"patcher_stop_confirm_description\">Weet u zeker dat u het patchproces wilt stoppen?</string>\n  <string name=\"patcher_install_in_progress\">Installatie bezig. Even geduld alstublieft</string>\n  <string name=\"execute_patches\">Patches uitvoeren</string>\n  <string name=\"executing_patch\">Uitvoeren %s</string>\n  <string name=\"failed_to_execute_patch\">Uitvoeren van %s mislukt</string>\n  <string name=\"step_completed\">voltooid</string>\n  <string name=\"step_failed\">mislukt</string>\n  <string name=\"step_running\">bezig</string>\n  <string name=\"step_waiting\">wachten</string>\n  <string name=\"expand_content\">uitvouwen</string>\n  <string name=\"collapse_content\">invouwen</string>\n  <string name=\"drag_handle\">herschikken</string>\n  <string name=\"more\">Meer</string>\n  <string name=\"less\">Minder</string>\n  <string name=\"continue_\">Doorgaan</string>\n  <string name=\"dismiss\">Sluiten</string>\n  <string name=\"view_announcement\">Aankondiging bekijken</string>\n  <string name=\"permanent_dismiss\">Niet opnieuw weergeven</string>\n  <string name=\"donate\">Doneren</string>\n  <string name=\"website\">Website</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Contact</string>\n  <string name=\"license\">Licentie</string>\n  <string name=\"source\">Bron</string>\n  <string name=\"repository\">Opslagplaats</string>\n  <string name=\"bundle_information_by_author\">Door %1$s</string>\n  <string name=\"version\">Versie</string>\n  <string name=\"version_compatibility_warning\">De geselecteerde versie is mogelijk incompatibel met de geselecteerde patches</string>\n  <string name=\"submit_feedback\">Probleem of feedback indienen</string>\n  <string name=\"submit_feedback_description\">Help ons deze applicatie te verbeteren</string>\n  <string name=\"developer_options\">Ontwikkelaarsopties</string>\n  <string name=\"developer_options_description\">Opties voor het debuggen van problemen</string>\n  <string name=\"patches_update_success\">Update succesvol</string>\n  <string name=\"patches_update_unavailable\">Geen update beschikbaar</string>\n  <string name=\"view_patches\">Patches bekijken</string>\n  <string name=\"patches_view_any_version\">Elke versie</string>\n  <string name=\"patches_view_any_package\">Elk pakket</string>\n  <string name=\"patches_delete_single_dialog_description\">Weet u zeker dat u \\\"%s\\\" wilt verwijderen?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Weet u zeker dat u de geselecteerde patches wilt verwijderen?</string>\n  <string name=\"announcements\">Aankondigingen</string>\n  <string name=\"archive\">Archief</string>\n  <string name=\"about_revanced_manager\">Over ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager is een Android-applicatie die ReVanced Patcher gebruikt om Android-apps te patchen. Het stelt u in staat om apps te downloaden en te patchen met aangepaste patches, en het patchproces te beheren.</string>\n  <string name=\"developer_options_taps\">%d tikken resterend</string>\n  <string name=\"developer_options_enabled\">Ontwikkelaarsopties ingeschakeld</string>\n  <string name=\"developer_options_already_enabled\">Ontwikkelaarsopties zijn al ingeschakeld</string>\n  <string name=\"update_available\">Een update is beschikbaar</string>\n  <string name=\"current_version\">Huidige versie: %s</string>\n  <string name=\"new_version\">Nieuwe versie: %s</string>\n  <string name=\"ready_to_install_update\">Klaar om update te installeren</string>\n  <string name=\"update_completed\">Update geïnstalleerd</string>\n  <string name=\"install_update_manager_failed\">Installeren van update mislukt</string>\n  <string name=\"manual_update_check\">Controleren op updates</string>\n  <string name=\"view_update\">Update bekijken</string>\n  <string name=\"manual_update_check_description\">Handmatig controleren op updates</string>\n  <string name=\"update_checking_manager\">Controleren op updates bij opstarten</string>\n  <string name=\"update_checking_manager_description\">Controleren op nieuwe versies van ReVanced Manager wanneer de applicatie start</string>\n  <string name=\"update_checking_downloader\">Controleren op updates voor ReVanced Downloaders bij opstarten</string>\n  <string name=\"update_checking_downloader_description\">Controleren op updates voor geïnstalleerde ReVanced Downloaders wanneer de applicatie start</string>\n  <string name=\"manager_prereleases\">Gebruik pre-releases</string>\n  <string name=\"manager_prereleases_description\">Gebruik pre-release versies van ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Pre-release versies kunnen instabiel zijn en bugs bevatten. Je kunt crashes, gegevensverlies of andere onverwachte problemen ervaren. Schakel dit alleen in als je vertrouwd bent met deze risico\\'s.</string>\n  <string name=\"changelog\">Changelog bekijken</string>\n  <string name=\"changelog_loading\">Wijzigingslog laden</string>\n  <string name=\"changelog_download_fail\">Downloaden van wijzigingslog mislukt: %s</string>\n  <string name=\"changelog_description\">Bekijk de nieuwste wijzigingen in deze update</string>\n  <string name=\"battery_optimization_notification\">Batterij-optimalisaties moeten worden uitgeschakeld om ReVanced Manager correct op de achtergrond te laten werken. Klik hier om optimalisaties uit te schakelen.</string>\n  <string name=\"installing_manager_update\">Update installeren…</string>\n  <string name=\"downloading_manager_update\">Update downloaden…</string>\n  <string name=\"download_manager_failed\">Downloaden van update mislukt: %s</string>\n  <string name=\"cancel\">Annuleren</string>\n  <string name=\"save\">Opslaan</string>\n  <string name=\"save_with_count\">Opslaan (%1$s)</string>\n  <string name=\"update\">Update</string>\n  <string name=\"empty\">Leeg</string>\n  <string name=\"installing_message\">Tik op <b>Updaten</b> wanneer daarom wordt gevraagd.\\nReVanced Manager wordt gesloten tijdens het updaten.</string>\n  <string name=\"no_changelogs_found\">Geen wijzigingslogs gevonden</string>\n  <string name=\"just_now\">Zojuist</string>\n  <string name=\"minutes_ago\">%sm geleden</string>\n  <string name=\"hours_ago\">%su geleden</string>\n  <string name=\"days_ago\">%sd geleden</string>\n  <string name=\"invalid_date\">Ongeldige datum</string>\n  <string name=\"disable_battery_optimization\">Batterij-optimalisatie uitschakelen</string>\n  <string name=\"input_dialog_value_invalid\">Ongeldige waarde</string>\n  <string name=\"option_required\">Deze optie is vereist</string>\n  <string name=\"required_options_screen\">Vereiste opties</string>\n  <string name=\"failed_to_check_updates\">Controleren op updates mislukt: %s</string>\n  <string name=\"no_update_available\">Geen update beschikbaar</string>\n  <string name=\"no_announcements_found\">Geen aankondigingen gevonden</string>\n  <string name=\"update_check\">Controleren op updates…</string>\n  <string name=\"dismiss_temporary\">Niet nu</string>\n  <string name=\"update_available_dialog_description\">Een nieuwe versie van ReVanced Manager (%s) is beschikbaar.</string>\n  <string name=\"failed_to_download_update\">Downloaden van update mislukt: %s</string>\n  <string name=\"download\">Downloaden</string>\n  <string name=\"download_confirmation_metered\">U bent momenteel verbonden via een verbinding met datalimiet, en er kunnen datakosten van uw serviceprovider in rekening worden gebracht.\\n\\nWilt u toch doorgaan?</string>\n  <string name=\"download_update_confirmation\">Update downloaden?</string>\n  <string name=\"no_contributors_found\">Geen bijdragers gevonden</string>\n  <string name=\"select\">Selecteren</string>\n  <string name=\"select_deselect_all\">Alles selecteren of deselecteren</string>\n  <string name=\"select_patches_type_dialog_description\">Nieuwe patches toevoegen via URL of lokale bestanden</string>\n  <string name=\"local_patches_description\">Patches toevoegen via lokale opslag.</string>\n  <string name=\"remote_patches_description\">Patches toevoegen via URL. Patches kunnen automatisch updaten.</string>\n  <string name=\"recommended\">Aanbevolen</string>\n  <string name=\"installation_failed_dialog_title\">Installatie mislukt</string>\n  <string name=\"installation_cancelled_dialog_title\">Installatie geannuleerd</string>\n  <string name=\"installation_blocked_dialog_title\">Installatie geblokkeerd</string>\n  <string name=\"installation_conflict_dialog_title\">Installatieconflict</string>\n  <string name=\"installation_incompatible_dialog_title\">Installatie incompatibel</string>\n  <string name=\"installation_invalid_dialog_title\">Installatie ongeldig</string>\n  <string name=\"installation_storage_issue_dialog_title\">Niet genoeg opslagruimte</string>\n  <string name=\"installation_timeout_dialog_title\">Installatie time-out</string>\n  <string name=\"installation_failed_description\">De installatie is mislukt door een onbekende oorzaak. Opnieuw proberen?</string>\n  <string name=\"installation_aborted_description\">De installatie is handmatig geannuleerd. Opnieuw proberen?</string>\n  <string name=\"installation_blocked_description\">De installatie is geblokkeerd. Controleer de beveiligingsinstellingen van uw apparaat en probeer het opnieuw.</string>\n  <string name=\"installation_conflict_description\">De installatie werd verhinderd door een reeds bestaande installatie van de app. Deïnstalleer de geïnstalleerde app en probeer het opnieuw?</string>\n  <string name=\"installation_incompatible_description\">De app is incompatibel met dit apparaat. Gebruik een APK die compatibel is met dit apparaat en probeer het opnieuw.</string>\n  <string name=\"installation_invalid_description\">De app is ongeldig. Deïnstalleer de app en probeer het opnieuw?</string>\n  <string name=\"installation_storage_issue_description\">De app kon niet worden geïnstalleerd vanwege onvoldoende opslagruimte. Maak wat ruimte vrij en probeer het opnieuw.</string>\n  <string name=\"installation_timeout_description\">De installatie duurde te lang. Opnieuw proberen?</string>\n  <string name=\"reinstall\">Opnieuw installeren</string>\n  <string name=\"show\">Weergeven</string>\n  <string name=\"debugging\">Debuggen</string>\n  <string name=\"about_device\">Over apparaat</string>\n  <string name=\"enter_url\">URL invoeren</string>\n  <string name=\"next\">Volgende</string>\n  <string name=\"auto_update\">Automatische update</string>\n  <string name=\"add_patches\">Patches toevoegen</string>\n  <string name=\"auto_update_description\">Automatisch updaten wanneer een nieuwe versie beschikbaar is</string>\n  <string name=\"patches_prereleases\">Gebruik pre-releases</string>\n  <string name=\"patches_prereleases_description\">Gebruik pre-release versies van %s</string>\n  <string name=\"patches_url\">Patches-URL</string>\n  <string name=\"incompatible_patches_dialog\">Deze patches zijn niet compatibel met de geselecteerde app-versie (%1$s).\\n\\nKlik op de patches voor meer details.</string>\n  <string name=\"incompatible_patch\">Incompatibele patch</string>\n  <string name=\"any_version\">Elke</string>\n  <string name=\"never_show_again\">Niet meer weergeven</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Updatebericht weergeven bij opstarten</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Een pop-upmelding weergeven wanneer een nieuwe update beschikbaar is bij het opstarten</string>\n  <string name=\"failed_to_import_keystore\">Importeren van keystore mislukt</string>\n  <string name=\"export\">Exporteren</string>\n  <string name=\"confirm\">Bevestigen</string>\n  <string name=\"new_announcement\">Nieuwe aankondiging:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d patch</item>\n    <item quantity=\"other\">%d patches</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Voer %d patch uit</item>\n    <item quantity=\"other\">Voer %d patches uit</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d geselecteerd</item>\n    <item quantity=\"other\">%d geselecteerd</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-or-rIN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">ପ୍ୟାଚର୍</string>\n  <string name=\"onboarding_welcome_to\">କୁ ସ୍ୱାଗତ</string>\n  <string name=\"onboarding_welcome_back\">ହାଇ! ଏହା ହେଉଛି ନୂଆ</string>\n  <string name=\"onboarding_apps_subtitle\">ଆପଣ ବର୍ତ୍ତମାନ ପ୍ୟାଚ୍ କରିବା ପାଇଁ ଏକ ଆପ୍ ଚୟନ କରିପାରିବେ କିମ୍ବା ପରେ କରିପାରିବେ</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager ଏବଂ ପ୍ୟାଚ୍‌ଗୁଡ଼ିକୁ ଅଦ୍ୟତନ ରଖିବା ପାଇଁ ସ୍ୱୟଂଚାଳିତ ଅପଡେଟ୍‌ଗୁଡ଼ିକୁ ସେଟ୍ କରନ୍ତୁ</string>\n  <string name=\"onboarding_updates_note\">ଯଦି ଆପଣଙ୍କ ଡିଭାଇସ୍ ଇଣ୍ଟରନେଟ୍ ସହିତ ସଂଯୋଗ ହୋଇଛି, ତେବେ ReVanced Manager ପ୍ରାରମ୍ଭିକ ସଂସ୍କରଣ ଡାଉନଲୋଡ୍ କରିବା ପାଇଁ %s ସହିତ ସଂଯୋଗ କରିବ।</string>\n  <string name=\"retry\">ପୁନର୍ବାର ଚେଷ୍ଟା କରନ୍ତୁ</string>\n  <string name=\"onboarding_skip\">ବର୍ତ୍ତମାନ ପାଇଁ ଛାଡ଼ିଦିଅନ୍ତୁ</string>\n  <string name=\"onboarding_recommended_version\">ସୁପାରିଶ କରାଯାଇଥିବା ସଂସ୍କରଣ: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">ଅନୁମତି ଛାଡ଼ିବେ କି?</string>\n  <string name=\"onboarding_permissions_skip_description\">ଆବଶ୍ୟକ ଅନୁମତି ବିନା, କିଛି ବୈଶିଷ୍ଟ୍ୟ ସଠିକ୍ ଭାବରେ କାର୍ଯ୍ୟ କରିନପାରେ। ଆପଣ ସେଗୁଡ଼ିକୁ ପରେ ଆପ୍ ସେଟିଂସରେ ପ୍ରଦାନ କରିପାରିବେ।</string>\n  <string name=\"onboarding_permissions_skip_anyway\">ଯେକୌଣସି ପ୍ରକାରେ ଛାଡ଼ିଦିଅନ୍ତୁ</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager ସଠିକ୍ ଭାବରେ କାର୍ଯ୍ୟ କରିବା ପାଇଁ କିଛି ଅନୁମତି ଆବଶ୍ୟକ କରେ</string>\n  <string name=\"permission_install_apps\">ଅଜଣା ଆପ୍ସ ସ୍ଥାପନ କରନ୍ତୁ</string>\n  <string name=\"permission_install_apps_description\">ପ୍ୟାଚ୍ କରାଯାଇଥିବା ଆପ୍ଲିକେସନ୍ ସ୍ଥାପନ କରିବା ପାଇଁ ଆବଶ୍ୟକ</string>\n  <string name=\"permission_notifications\">ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ</string>\n  <string name=\"permission_battery\">ବ୍ୟାଟେରୀ ଅପ୍ଟିମାଇଜେସନ୍</string>\n  <string name=\"permission_battery_description\">ପୃଷ୍ଠଭୂମିରେ ପ୍ୟାଚ୍ କରିବାକୁ ବାଧାପ୍ରାପ୍ତ ହେବାରୁ ରୋକେ</string>\n  <string name=\"permission_grant\">ଅନୁମତି ଦିଅନ୍ତୁ</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager ଡାଉନଲୋଡର୍ ହୋଷ୍ଟ</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager ଡାଉନଲୋଡର୍‌ଗୁଡିକୁ ନିୟନ୍ତ୍ରଣ କରିବା ପାଇଁ ବ୍ୟବହୃତ। କେବଳ ReVanced Manager ପାଖରେ ଏହା ଅଛି।</string>\n  <string name=\"fab_patch_app\">ଏକ ଆପ୍ ପ୍ୟାଚ୍ କରନ୍ତୁ</string>\n  <string name=\"fab_add_patches\">ପ୍ୟାଚ୍ ଯୋଡ଼ନ୍ତୁ</string>\n  <string name=\"new_downloader_notification\">ନୂତନ ଡାଉନଲୋଡର୍(ଗୁଡ଼ିକ) ଉପଲବ୍ଧ। ସେଗୁଡ଼ିକୁ ବିନ୍ୟାସ କରିବା ପାଇଁ ଏଠାରେ କ୍ଲିକ୍ କରନ୍ତୁ।</string>\n  <string name=\"patches_not_downloaded\">ପ୍ୟାଚ୍ ଡାଉନଲୋଡ୍ ହୋଇନାହିଁ।</string>\n  <string name=\"app_source_dialog_option_auto_description\">ସ୍ଥାପିତ ଆପ୍ ବ୍ୟବହାର କରନ୍ତୁ, ତାପରେ ଡାଉନଲୋଡ୍ ହୋଇଥିବା APK, ତାପରେ ଉପଲବ୍ଧ ଡାଉନଲୋଡର୍</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">କୌଣସି ସୁସଙ୍ଗତ ଆପ୍ ବା ଡାଉନଲୋଡର୍ ଉପଲବ୍ଧ ନାହିଁ</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">ରୁଟ୍ ଆକ୍ସେସ୍ ବିନା ମାଉଣ୍ଟେଡ୍ ଆପ୍ସଗୁଡ଼ିକୁ ପୁଣି ଥରେ ପ୍ୟାଚ୍ କରାଯାଇପାରିବ ନାହିଁ</string>\n  <string name=\"patch_selector_item\">ପ୍ୟାଚ୍ ବାଛନ୍ତୁ</string>\n  <string name=\"patch_selector_item_description\">%d ପ୍ୟାଚ୍ ବଛାଯାଇଛି</string>\n  <string name=\"patch_selection_changed_warning\">ପ୍ୟାଚ୍ ଚୟନ ବଦଳି ଯାଇଛି</string>\n  <string name=\"apk_source_selector_item\">APK ଉତ୍ସ ବାଛନ୍ତୁ</string>\n  <string name=\"apk_source_auto\">ସ୍ୱୟଂଚାଳିତ</string>\n  <string name=\"apk_source_auto_installed\">ସ୍ୱୟଂଚାଳିତ · ସ୍ଥାପିତ APK ବ୍ୟବହାର କରି</string>\n  <string name=\"apk_source_auto_downloaded\">ସ୍ଵୟଂକ୍ରିୟ · ଡାଉନଲୋଡ୍ ହୋଇଥିବା APK ବ୍ୟବହାର କରି</string>\n  <string name=\"apk_source_auto_downloader\">ସ୍ୱୟଂଚାଳିତ · ଉପଲବ୍ଧ ଡାଉନଲୋଡର୍‌ ବ୍ୟବହାର କରି</string>\n  <string name=\"apk_source_auto_storage\">ସ୍ୱୟଂଚାଳିତ · ଷ୍ଟୋରେଜରୁ ଚୟନ କରନ୍ତୁ</string>\n  <string name=\"apk_source_downloaded\">ପୂର୍ବରୁ ଡାଉନଲୋଡ୍ ହୋଇଛି</string>\n  <string name=\"auto_updates_dialog_description\">ଆପଣ ReVanced Manager ନିମ୍ନଲିଖିତ ଉପାଦାନଗୁଡ଼ିକ ପାଇଁ ନିୟମିତ ଭାବରେ ଅପଡେଟ୍ ଯାଞ୍ଚ କରିବାକୁ ଚାହୁଁଛନ୍ତି କି?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced ପ୍ୟାଚ୍</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: ଡାଉନଲୋଡର୍‌ଗୁଡ଼ିକ</string>\n  <string name=\"auto_updates_dialog_note\">ଏହି ସେଟିଙ୍ଗ୍ ଗୁଡ଼ିକୁ ପରେ ପରିବର୍ତ୍ତନ କରାଯାଇପାରିବ।\n\n    ଯଦି ଆପଣଙ୍କ ଡିଭାଇସ୍ ଇଣ୍ଟରନେଟ୍ ସହିତ ସଂଯୋଗ ହୋଇଛି, ତେବେ ReVanced Manager ପ୍ରାରମ୍ଭିକ ସଂସ୍କରଣ ଡାଉନଲୋଡ୍ କରିବା ପାଇଁ %s ସହିତ ସଂଯୋଗ କରିବ।</string>\n  <string name=\"announcements_filter_tag\">ଟ୍ୟାଗ୍ ଦ୍ୱାରା ଫିଲ୍ଟର୍ କରନ୍ତୁ</string>\n  <string name=\"announcements_show_archived\">ଆର୍କାଇଭ୍ ହୋଇଥିବା ଦେଖାନ୍ତୁ</string>\n  <string name=\"updates_description\">ଅପଡେଟ୍ ଯାଞ୍ଚ କରନ୍ତୁ ଏବଂ ଚେଞ୍ଜଲଗ୍ ଦେଖନ୍ତୁ</string>\n  <string name=\"downloads_description\">ଡାଉନଲୋଡର ଏବଂ ଡାଉନଲୋଡ୍ ହୋଇଥିବା ଆପ୍ସ</string>\n  <string name=\"safeguards_toggled_warning\">ସୁରକ୍ଷା ବ୍ୟବସ୍ଥା ଟୋଗଲ୍ କରାଯାଇଛି</string>\n  <string name=\"about_app_name\">%1$s ବିଷୟରେ</string>\n  <string name=\"search_languages\">ଭାଷାଗୁଡ଼ିକ ଖୋଜନ୍ତୁ…</string>\n  <string name=\"keystore\">କିଷ୍ଟୋର୍</string>\n  <string name=\"patches_selections\">ପ୍ୟାଚ୍ ଚୟନ</string>\n  <string name=\"select_bundle_for_import\">ଆମଦାନୀ କରିବାକୁ ବଣ୍ଡଲ୍ ବାଛନ୍ତୁ</string>\n  <string name=\"select_bundle_for_export\">ରପ୍ତାନି କରିବାକୁ ବଣ୍ଡଲ୍ ବାଛନ୍ତୁ</string>\n  <string name=\"patch_selection_packages\">ସଂରକ୍ଷିତ ଚୟନ ସହିତ ଆପ୍ସ</string>\n  <string name=\"patch_selection_entries\">ମୋଟ ବଛାଯାଇଥିବା ପ୍ୟାଚ୍</string>\n  <string name=\"reset_configuration\">ବିନ୍ୟାସ ପୁନଃସେଟ୍ କରନ୍ତୁ</string>\n  <string name=\"reset_patch_selection\">ପ୍ୟାଚ୍ ଚୟନଗୁଡ଼ିକ</string>\n  <string name=\"reset_patch_options\">ପ୍ୟାଚ୍ ବିକଳ୍ପ</string>\n  <string name=\"downloaders\">ଡାଉନଲୋଡର</string>\n  <string name=\"downloader_prereleases\">ପ୍ରି-ରିଲିଜ୍‌ଗୁଡ଼ିକ ବ୍ୟବହାର କରନ୍ତୁ</string>\n  <string name=\"downloader_prereleases_description\">ମୁଖ୍ୟ ଡାଉନଲୋଡର୍‌ର ପ୍ରି-ରିଲିଜ୍‌ ସଂସ୍କରଣଗୁଡ଼ିକ ବ୍ୟବହାର କରନ୍ତୁ</string>\n  <string name=\"downloader_state_loaded\">ଲୋଡ୍ ହୋଇଛି</string>\n  <string name=\"downloader_state_failed\">ଲୋଡ୍ କରିବାରେ ବିଫଳ ହେଲା। ଅଧିକ ବିବରଣୀ ପାଇଁ କ୍ଲିକ୍ କରନ୍ତୁ</string>\n  <string name=\"downloader_state_missing\">ହଜିଯାଇଛି</string>\n  <string name=\"downloader_delete_apps_title\">ମନୋନୀତ ଆପ୍ସଗୁଡ଼ିକୁ ଡିଲିଟ୍ କରନ୍ତୁ</string>\n  <string name=\"downloader_delete_apps_description\">ଆପଣ ନିଶ୍ଚିତ କି ଆପଣ ମନୋନୀତ ଆପ୍ସଗୁଡ଼ିକୁ ଡିଲିଟ୍ କରିବାକୁ ଚାହୁଁଛନ୍ତି?</string>\n  <string name=\"downloader_delete_single_description\">ଆପଣ ନିଶ୍ଚିତ କି ଆପଣ \\\"%s\\\" କୁ ଲୋପ କରିବାକୁ ଚାହୁଁଛନ୍ତି?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager ମାଧ୍ୟମରେ ଡାଉନଲୋଡ୍ ହୋଇଥିବା ଆପ୍ସ ଏଠାରେ ଦେଖାଯିବ।</string>\n  <string name=\"downloader_url\">ଡାଉନଲୋଡର୍ URL</string>\n  <string name=\"downloader_add\">ଡାଉନଲୋଡର୍ ଯୋଡନ୍ତୁ</string>\n  <string name=\"select_downloader_type_dialog_description\">URL କିମ୍ବା ସ୍ଥାନୀୟ ଫାଇଲରୁ ନୂଆ ଡାଉନଲୋଡର୍ ଯୋଡନ୍ତୁ</string>\n  <string name=\"local_downloaders_description\">ସ୍ଥାନୀୟ ଷ୍ଟୋରେଜରୁ ଡାଉନଲୋଡର୍ ଯୋଡନ୍ତୁ।</string>\n  <string name=\"remote_downloaders_description\">URL ରୁ ଡାଉନଲୋଡର୍ ଯୋଡନ୍ତୁ। ଏହା ସ୍ୱୟଂଚାଳିତ ଭାବରେ ଅପଡେଟ୍ ହୋଇପାରିବ।</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager ଭିତରେ ସିଧାସଳଖ ଆପ୍ସ ପାଇବା ପାଇଁ ଡାଉନଲୋଡର୍ ସ୍ଥାପନ କରନ୍ତୁ।</string>\n  <string name=\"install_revanced_downloader\">ReVanced ଡାଉନଲୋଡର୍ ସ୍ଥାପନ କରନ୍ତୁ</string>\n  <string name=\"cancel_downloader_install_title\">ଡାଉନଲୋଡର୍ ସ୍ଥାପନ ବାତିଲ୍ କରିବେ କି?</string>\n  <string name=\"cancel_downloader_install_description\">ଏକ ଡାଉନଲୋଡର୍ ସ୍ଥାପନ ପ୍ରକ୍ରିୟା ଚାଲିଛି। ଯଦି ଆପଣ ବର୍ତ୍ତମାନ ଯାଆନ୍ତି, ତେବେ ଡାଉନଲୋଡ୍ ବାତିଲ୍ ହୋଇଯିବ।</string>\n  <string name=\"downloader_sources_unavailable_title\">ଏହି ଡାଉନଲୋଡର୍ ଗୁଡିକ ହଜିଯାଇଛି</string>\n  <string name=\"downloader_sources_unavailable_description\">ଏହାକୁ ଠିକ୍ କରିବା ପାଇଁ ଅପଡେଟ୍ ବଟନ ଉପରେ କ୍ଲିକ୍ କରନ୍ତୁ।</string>\n  <string name=\"downloader_update_failed\">ଡାଉନଲୋଡର୍ ଅପଡେଟ୍ କରିବାରେ ବିଫଳ: %s</string>\n  <string name=\"downloader_replace_fail\">ଡାଉନଲୋଡର୍ ଆମଦାନୀ କରିବାରେ ବିଫଳ: %s</string>\n  <string name=\"select_from_storage_description\">ଫାଇଲ୍ ପିକର୍ ବ୍ୟବହାର କରି ଷ୍ଟୋରେଜ୍ ରୁ ଏକ APK ଫାଇଲ୍ ବାଛନ୍ତୁ</string>\n  <string name=\"enable\">ସକ୍ଷମ କରନ୍ତୁ</string>\n  <string name=\"disable\">ଅସମର୍ଥ କରନ୍ତୁ</string>\n  <string name=\"process_runtime_memory_limit_description\">ପ୍ୟାଚର୍ ପ୍ରକ୍ରିୟା ବ୍ୟବହାର କରିପାରିବା ଭଳି ସର୍ବାଧିକ ମେମୋରୀ ପରିମାଣ</string>\n  <string name=\"reset_onboarding\">ଅନ୍‌ବୋର୍ଡିଂ ପୁନଃସେଟ୍ କରନ୍ତୁ</string>\n  <string name=\"reset_onboarding_description\">ପରବର୍ତ୍ତୀ ଆପ୍ ଲଞ୍ଚରେ ଅନ୍‌ବୋର୍ଡିଂ ସ୍କ୍ରିନ୍ ଦେଖାନ୍ତୁ</string>\n  <string name=\"api_not_working_title\">API ସେବା ବର୍ତ୍ତମାନ ଅକାମୀ ଅଛି</string>\n  <string name=\"api_not_working_description\">କିଛି ବୈଶିଷ୍ଟ୍ୟ ପ୍ରଭାବିତ ହୋଇପାରେ। ଆପଣଙ୍କ ସଂଯୋଗ କିମ୍ବା ସେଟିଂସରେ API URL ଯାଞ୍ଚ କରନ୍ତୁ।</string>\n  <string name=\"no_patched_apps_found\">କୌଣସି ପ୍ୟାଚ୍ ହୋଇଥିବା ଆପ୍ ମିଳିଲା ନାହିଁ</string>\n  <string name=\"no_patched_apps_description\">ଆପଣଙ୍କ ପାଖରେ ବର୍ତ୍ତମାନ କୌଣସି ପ୍ୟାଚ୍ ହୋଇଥିବା ଆପ୍ ନାହିଁ ବୋଲି ଆମେ ଜାଣୁ। ଆପଣଙ୍କର ପ୍ରଥମ ଆପ୍ ପ୍ୟାଚ୍ କରି ଏହାକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ!</string>\n  <string name=\"patched_apps_section_title\">ପ୍ୟାଚ୍ ହୋଇଥିବା ଆପ୍ସ</string>\n  <string name=\"patchable_apps_section_title\">ପ୍ୟାଚ୍ କରାଯାଇପାରୁଥିବା ଆପ୍ସ</string>\n  <string name=\"no_patches_found\">କୌଣସି ପ୍ୟାଚ୍ ମିଳିଲା ନାହିଁ</string>\n  <string name=\"no_patches_description\">ଆପଣଙ୍କ ପାଖରେ ଏପର୍ଯ୍ୟନ୍ତ କୌଣସି ପ୍ୟାଚ୍ ନାହିଁ। ନିମ୍ନରେ ଥିବା ବଟନ୍ ଟ୍ୟାପ୍ କରି ପ୍ୟାଚ୍ ଯୋଡ଼ନ୍ତୁ!</string>\n  <string name=\"split_apk_not_supported\">ସ୍ପ୍ଲିଟ୍ APK ପାଚ୍ କରାଯାଇପାରିବ ନାହିଁ</string>\n  <string name=\"no_downloaders_installed\">କୌଣସି ଆପ୍ ଡାଉନଲୋଡର୍ ସ୍ଥାପିତ ହୋଇନାହିଁ!</string>\n  <string name=\"no_downloaders_trusted\">କୌଣସି ଆପ୍ ଡାଉନଲୋଡର୍ ବିଶ୍ୱାସ କରାଯାଇ ନାହିଁ! ଦୟାକରି ଆପଣଙ୍କ ସେଟିଂସ ଯାଞ୍ଚ କରନ୍ତୁ।</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">ପ୍ୟାକେଜ୍</string>\n  <string name=\"patch_selector_sheet_actions_title\">କାର୍ଯ୍ୟଗୁଡିକ</string>\n  <string name=\"restore_default_selection\">ଡିଫଲ୍ଟ ଚୟନ ପୁନରୁଦ୍ଧାର କରନ୍ତୁ</string>\n  <string name=\"deselect_all\">ସବୁ ଅଚୟନ କରନ୍ତୁ</string>\n  <string name=\"invert_selection\">ଚୟନ ଓଲଟାନ୍ତୁ</string>\n  <string name=\"deselect_all_except\">ସମସ୍ତଙ୍କୁ ଅନିର୍ଦ୍ଦିଷ୍ଟ କରନ୍ତୁ %s ବ୍ୟତୀତ</string>\n  <string name=\"scope_dialog_title\">ପ୍ରୟୋଗ କରନ୍ତୁ</string>\n  <string name=\"scope_all_patches\">ସମସ୍ତ ପ୍ୟାଚ୍</string>\n  <string name=\"scope_bundle_patches\">%s କେବଳ</string>\n  <string name=\"save_as_file\">ଫାଇଲ୍‌ରେ ସେଭ୍ କରନ୍ତୁ</string>\n  <string name=\"export_patcher_logs\">ପ୍ୟାଚର୍ ଲଗ୍ ରପ୍ତାନି କରନ୍ତୁ</string>\n  <string name=\"save_logs_success\">ଲଗ୍ ସେଭ୍ ହୋଇଛି</string>\n  <string name=\"downloader_activity_dialog_body\">ଏହି ଡାଉନଲୋଡର ସହିତ ଆଗକୁ ବଢ଼ିବା ପାଇଁ ଉପଭୋକ୍ତାଙ୍କ ହସ୍ତକ୍ଷେପ ଆବଶ୍ୟକ।</string>\n  <string name=\"patcher_step_unpack\">ପ୍ୟାଚର୍ ପ୍ରସ୍ତୁତ କରନ୍ତୁ</string>\n  <string name=\"view_announcement\">ଘୋଷଣା ଦେଖନ୍ତୁ</string>\n  <string name=\"license\">ଲାଇସେନ୍ସ</string>\n  <string name=\"source\">ଉତ୍ସ</string>\n  <string name=\"repository\">ରିପୋଜିଟୋରୀ</string>\n  <string name=\"bundle_information_by_author\">%1$s ଦ୍ୱାରା</string>\n  <string name=\"version_compatibility_warning\">ମନୋନୀତ ସଂସ୍କରଣ ମନୋନୀତ ପ୍ୟାଚ୍ ସହିତ ଅସୁସଙ୍ଗତ ହୋଇପାରେ</string>\n  <string name=\"announcements\">ଘୋଷଣାଗୁଡ଼ିକ</string>\n  <string name=\"archive\">ଆର୍କାଇଭ୍</string>\n  <string name=\"view_update\">ଅପଡେଟ୍ ଦେଖନ୍ତୁ</string>\n  <string name=\"update_checking_downloader\">ଲଞ୍ଚରେ ReVanced ଡାଉନଲୋଡର୍ ଅପଡେଟ୍ ଯାଞ୍ଚ କରନ୍ତୁ</string>\n  <string name=\"update_checking_downloader_description\">ଆପ୍ଲିକେସନ୍ ଆରମ୍ଭ ହେବା ସମୟରେ ସ୍ଥାପିତ ReVanced ଡାଉନଲୋଡର୍‌ଗୁଡ଼ିକର ଅପଡେଟ୍ ଯାଞ୍ଚ କରନ୍ତୁ</string>\n  <string name=\"prereleases_warning\">ପ୍ରି-ରିଲିଜ୍ ସଂସ୍କରଣଗୁଡ଼ିକ ଅସ୍ଥିର ହୋଇପାରେ ଏବଂ ବଗ୍ ଥାଇପାରେ। ଆପଣ କ୍ରାସ୍, ଡାଟା ହରାଇବା, କିମ୍ବା ଅନ୍ୟ ଅପ୍ରତ୍ୟାଶିତ ସମସ୍ୟା ଅନୁଭବ କରିପାରନ୍ତି। ଯଦି ଆପଣ ଏହି ବିପଦଗୁଡ଼ିକ ସହିତ ସନ୍ତୁଷ୍ଟ, ତେବେ କେବଳ ଏହାକୁ ସକ୍ଷମ କରନ୍ତୁ।</string>\n  <string name=\"changelog\">ଚେଞ୍ଜଲଗ୍ ଦେଖନ୍ତୁ</string>\n  <string name=\"no_announcements_found\">କୌଣସି ଘୋଷଣା ମିଳିଲା ନାହିଁ</string>\n  <string name=\"new_announcement\">ନୂତନ ଘୋଷଣା:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d ପ୍ୟାଚ୍</item>\n    <item quantity=\"other\">%d ପ୍ୟାଚ୍</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d ପ୍ୟାଚ୍ କାର୍ଯ୍ୟକାରୀ କରନ୍ତୁ</item>\n    <item quantity=\"other\">%d ପ୍ୟାଚ୍ କାର୍ଯ୍ୟକାରୀ କରନ୍ତୁ</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d ଚୟନିତ</item>\n    <item quantity=\"other\">%d ଚୟନିତ</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pa-rIN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">ਪੈਚਰ</string>\n  <string name=\"onboarding_welcome_to\">ਵਿੱਚ ਤੁਹਾਡਾ ਸੁਆਗਤ ਹੈ</string>\n  <string name=\"onboarding_welcome_back\">ਹੈਲੋ! ਇਹ ਨਵਾਂ ਹੈ</string>\n  <string name=\"onboarding_apps_subtitle\">ਤੁਸੀਂ ਹੁਣ ਪੈਚ ਕਰਨ ਲਈ ਇੱਕ ਐਪ ਚੁਣ ਸਕਦੇ ਹੋ ਜਾਂ ਬਾਅਦ ਵਿੱਚ ਕਰ ਸਕਦੇ ਹੋ</string>\n  <string name=\"onboarding_apps_network_error\">ਪੈਚ ਲੋਡ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕੇ ਕਿਉਂਕਿ ਨੈੱਟਵਰਕ ਉਪਲਬਧ ਨਹੀਂ ਹੈ ਜਾਂ ਅਸਥਿਰ ਹੈ। ਇੱਕ ਸਥਿਰ ਨੈੱਟਵਰਕ ਨਾਲ ਕਨੈਕਟ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager ਅਤੇ ਪੈਚਾਂ ਨੂੰ ਅੱਪ-ਟੂ-ਡੇਟ ਰੱਖਣ ਲਈ ਆਟੋਮੈਟਿਕ ਅੱਪਡੇਟਾਂ ਨੂੰ ਕੌਂਫਿਗਰ ਕਰੋ</string>\n  <string name=\"banner_sources_not_downloaded_description\">ਸੈੱਟਅੱਪ ਦੌਰਾਨ ਪੈਚ ਅਤੇ ਡਾਊਨਲੋਡਰ ਡਾਊਨਲੋਡ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕੇ। ਉਹਨਾਂ ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਅੱਪਡੇਟ \\'ਤੇ ਟੈਪ ਕਰੋ।</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager ਤੁਹਾਡੇ ਜੰਤਰ ਦੇ ਇੰਟਰਨੈੱਟ ਨਾਲ ਕਨੈਕਟ ਹੋਣ \\'ਤੇ ਸ਼ੁਰੂਆਤੀ ਸੰਸਕਰਣਾਂ ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ %s ਨਾਲ ਕਨੈਕਟ ਕਰੇਗਾ।</string>\n  <string name=\"retry\">ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ</string>\n  <string name=\"onboarding_skip\">ਹੁਣੇ ਛੱਡੋ</string>\n  <string name=\"onboarding_recommended_version\">ਸਿਫ਼ਾਰਸ਼ੀ ਸੰਸਕਰਣ: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">ਇਜਾਜ਼ਤਾਂ ਛੱਡੋ?</string>\n  <string name=\"onboarding_permissions_skip_description\">ਲੋੜੀਂਦੀਆਂ ਇਜਾਜ਼ਤਾਂ ਤੋਂ ਬਿਨਾਂ, ਕੁਝ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ। ਤੁਸੀਂ ਉਹਨਾਂ ਨੂੰ ਬਾਅਦ ਵਿੱਚ ਐਪ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਦੇ ਸਕਦੇ ਹੋ।</string>\n  <string name=\"onboarding_permissions_skip_anyway\">ਫਿਰ ਵੀ ਛੱਡੋ</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਕਰਨ ਲਈ ਕੁਝ ਇਜਾਜ਼ਤਾਂ ਦੀ ਲੋੜ ਹੈ</string>\n  <string name=\"permission_install_apps\">ਅਣਜਾਣ ਐਪਸ ਸਥਾਪਤ ਕਰੋ</string>\n  <string name=\"permission_install_apps_description\">ਪੈਚ ਕੀਤੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਸਥਾਪਤ ਕਰਨ ਲਈ ਲੋੜੀਂਦਾ ਹੈ</string>\n  <string name=\"permission_notifications\">ਸੂਚਨਾਵਾਂ</string>\n  <string name=\"permission_notifications_description\">ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਬਿਨਾਂ ਕਿਸੇ ਰੁਕਾਵਟ ਦੇ ਪੈਚਿੰਗ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ</string>\n  <string name=\"permission_battery\">ਬੈਟਰੀ ਅਨੁਕੂਲਨ</string>\n  <string name=\"permission_battery_description\">ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਪੈਚਿੰਗ ਨੂੰ ਰੁਕਣ ਤੋਂ ਰੋਕਦਾ ਹੈ</string>\n  <string name=\"permission_grant\">ਦੇਵੋ</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager ਡਾਊਨਲੋਡਰ ਹੋਸਟ</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager ਡਾਊਨਲੋਡਰਾਂ ਤੱਕ ਪਹੁੰਚ ਨੂੰ ਕੰਟਰੋਲ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਸਿਰਫ਼ ReVanced Manager ਕੋਲ ਇਹ ਹੈ।</string>\n  <string name=\"fab_patch_app\">ਇੱਕ ਐਪ ਪੈਚ ਕਰੋ</string>\n  <string name=\"fab_add_patches\">ਪੈਚ ਸ਼ਾਮਲ ਕਰੋ</string>\n  <string name=\"new_downloader_notification\">ਨਵੇਂ ਡਾਊਨਲੋਡਰ ਉਪਲਬਧ ਹਨ। ਉਹਨਾਂ ਨੂੰ ਕੌਂਫਿਗਰ ਕਰਨ ਲਈ ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ।</string>\n  <string name=\"patches_not_downloaded\">ਪੈਚ ਡਾਊਨਲੋਡ ਨਹੀਂ ਕੀਤੇ ਗਏ ਹਨ।</string>\n  <string name=\"app_source_dialog_option_auto_description\">ਪਹਿਲਾਂ ਇੰਸਟਾਲ ਕੀਤੀ ਐਪ ਵਰਤੋ, ਫਿਰ ਡਾਊਨਲੋਡ ਕੀਤੀ APK, ਫਿਰ ਉਪਲਬਧ ਡਾਊਨਲੋਡਰ</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">ਕੋਈ ਅਨੁਕੂਲ ਐਪ ਜਾਂ ਡਾਉਨਲੋਡਰ ਉਪਲਬਧ ਨਹੀਂ ਮਿਲਿਆ</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">ਰੂਟ ਐਕਸੈਸ ਤੋਂ ਬਿਨਾਂ ਮਾਊਂਟ ਕੀਤੀਆਂ ਐਪਾਂ ਨੂੰ ਦੁਬਾਰਾ ਪੈਚ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ</string>\n  <string name=\"patch_selector_item\">ਪੈਚ ਚੁਣੋ</string>\n  <string name=\"patch_selector_item_description\">%d ਪੈਚ ਚੁਣੇ ਗਏ</string>\n  <string name=\"patch_selection_changed_warning\">ਪੈਚਾਂ ਦੀ ਚੋਣ ਬਦਲ ਦਿੱਤੀ ਗਈ ਹੈ</string>\n  <string name=\"apk_source_selector_item\">APK ਸਰੋਤ ਚੁਣੋ</string>\n  <string name=\"apk_source_auto\">ਆਟੋ</string>\n  <string name=\"apk_source_auto_installed\">ਆਟੋ · ਇੰਸਟਾਲ ਕੀਤੀ APK ਵਰਤ ਰਿਹਾ ਹੈ</string>\n  <string name=\"apk_source_auto_downloaded\">ਆਟੋ · ਡਾਊਨਲੋਡ ਕੀਤੀ APK ਵਰਤ ਰਿਹਾ ਹੈ</string>\n  <string name=\"apk_source_auto_downloader\">ਆਟੋ · ਉਪਲਬਧ ਡਾਊਨਲੋਡਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ</string>\n  <string name=\"apk_source_auto_storage\">ਆਟੋ · ਸਟੋਰੇਜ ਤੋਂ ਚੁਣੋ</string>\n  <string name=\"apk_source_downloaded\">ਪਹਿਲਾਂ ਹੀ ਡਾਊਨਲੋਡ ਕੀਤਾ ਗਿਆ</string>\n  <string name=\"auto_updates_dialog_description\">ਕੀ ਤੁਸੀਂ ਚਾਹੁੰਦੇ ਹੋ ਕਿ ReVanced Manager ਨਿਯਮਿਤ ਤੌਰ \\'ਤੇ ਹੇਠਾਂ ਦਿੱਤੇ ਭਾਗਾਂ ਲਈ ਅੱਪਡੇਟ ਦੀ ਜਾਂਚ ਕਰੇ?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced ਪੈਚ</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: ਡਾਊਨਲੋਡਰ</string>\n  <string name=\"auto_updates_dialog_note\">ਇਹ ਸੈਟਿੰਗਾਂ ਬਾਅਦ ਵਿੱਚ ਬਦਲੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।\n\n    ReVanced Manager ਤੁਹਾਡੇ ਜੰਤਰ ਦੇ ਇੰਟਰਨੈੱਟ ਨਾਲ ਕਨੈਕਟ ਹੋਣ \\'ਤੇ ਸ਼ੁਰੂਆਤੀ ਸੰਸਕਰਣਾਂ ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ %s ਨਾਲ ਕਨੈਕਟ ਕਰੇਗਾ।</string>\n  <string name=\"announcements_filter_tag\">ਟੈਗ ਅਨੁਸਾਰ ਫਿਲਟਰ ਕਰੋ</string>\n  <string name=\"announcements_show_archived\">ਪੁਰਾਲੇਖਬੱਧ ਦਿਖਾਓ</string>\n  <string name=\"updates_description\">ਅੱਪਡੇਟ ਲਈ ਜਾਂਚ ਕਰੋ ਅਤੇ ਬਦਲਾਵ ਦਾ ਲੌਗ ਵੇਖੋ</string>\n  <string name=\"downloads_description\">ਡਾਊਨਲੋਡਰ ਅਤੇ ਡਾਊਨਲੋਡ ਕੀਤੀਆਂ ਐਪਾਂ</string>\n  <string name=\"safeguards_toggled_warning\">ਸੁਰੱਖਿਆ ਉਪਾਅ ਟੌਗਲ ਕੀਤੇ ਗਏ ਹਨ</string>\n  <string name=\"about_app_name\">%1$s ਬਾਰੇ</string>\n  <string name=\"search_languages\">ਭਾਸ਼ਾਵਾਂ ਖੋਜੋ…</string>\n  <string name=\"keystore\">ਕੀਸਟੋਰ</string>\n  <string name=\"patches_selections\">ਪੈਚ ਚੋਣਾਂ</string>\n  <string name=\"select_bundle_for_import\">ਆਯਾਤ ਕਰਨ ਲਈ ਬੰਡਲ ਚੁਣੋ</string>\n  <string name=\"select_bundle_for_export\">ਨਿਰਯਾਤ ਕਰਨ ਲਈ ਬੰਡਲ ਚੁਣੋ</string>\n  <string name=\"patch_selection_packages\">ਸੁਰੱਖਿਅਤ ਕੀਤੀਆਂ ਚੋਣਾਂ ਵਾਲੀਆਂ ਐਪਸ</string>\n  <string name=\"patch_selection_entries\">ਕੁੱਲ ਚੁਣੇ ਗਏ ਪੈਚ</string>\n  <string name=\"reset_configuration\">ਸੰਰਚਨਾ ਰੀਸੈਟ ਕਰੋ</string>\n  <string name=\"reset_patch_selection\">ਪੈਚ ਚੋਣਾਂ</string>\n  <string name=\"reset_patch_options\">ਪੈਚ ਵਿਕਲਪ</string>\n  <string name=\"downloaders\">ਡਾਊਨਲੋਡਰ</string>\n  <string name=\"downloader_prereleases\">ਪ੍ਰੀ-ਰੀਲੀਜ਼ਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ</string>\n  <string name=\"downloader_prereleases_description\">ਮੁੱਖ ਡਾਊਨਲੋਡਰ ਦੇ ਪ੍ਰੀ-ਰੀਲੀਜ਼ ਸੰਸਕਰਣਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ</string>\n  <string name=\"downloader_state_loaded\">ਲੋਡ ਕੀਤਾ ਗਿਆ</string>\n  <string name=\"downloader_state_failed\">ਲੋਡ ਕਰਨ ਵਿੱਚ ਅਸਫਲ। ਹੋਰ ਵੇਰਵਿਆਂ ਲਈ ਕਲਿੱਕ ਕਰੋ</string>\n  <string name=\"downloader_state_missing\">ਗੁੰਮ ਹੈ</string>\n  <string name=\"downloader_delete_apps_title\">ਚੁਣੀਆਂ ਹੋਈਆਂ ਐਪਾਂ ਨੂੰ ਮਿਟਾਓ</string>\n  <string name=\"downloader_delete_apps_description\">ਕੀ ਤੁਸੀਂ ਯਕੀਨੀ ਹੋ ਕਿ ਤੁਸੀਂ ਚੁਣੀਆਂ ਹੋਈਆਂ ਐਪਾਂ ਨੂੰ ਮਿਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?</string>\n  <string name=\"downloader_delete_single_description\">ਕੀ ਤੁਸੀਂ ਨਿਸ਼ਚਤ ਹੋ ਕਿ ਤੁਸੀਂ \\\"%s\\\" ਨੂੰ ਮਿਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager ਰਾਹੀਂ ਡਾਊਨਲੋਡ ਕੀਤੀਆਂ ਐਪਸ ਇੱਥੇ ਦਿਖਾਈ ਦੇਣਗੀਆਂ।</string>\n  <string name=\"downloader_url\">ਡਾਊਨਲੋਡਰ URL</string>\n  <string name=\"downloader_add\">ਡਾਊਨਲੋਡਰ ਸ਼ਾਮਲ ਕਰੋ</string>\n  <string name=\"select_downloader_type_dialog_description\">URL ਜਾਂ ਸਥਾਨਕ ਫਾਈਲਾਂ ਤੋਂ ਨਵੇਂ ਡਾਊਨਲੋਡਰ ਸ਼ਾਮਲ ਕਰੋ</string>\n  <string name=\"local_downloaders_description\">ਸਥਾਨਕ ਸਟੋਰੇਜ ਤੋਂ ਡਾਊਨਲੋਡਰ ਸ਼ਾਮਲ ਕਰੋ।</string>\n  <string name=\"remote_downloaders_description\">URL ਤੋਂ ਡਾਊਨਲੋਡਰ ਸ਼ਾਮਲ ਕਰੋ। ਆਟੋਮੈਟਿਕਲੀ ਅੱਪਡੇਟ ਕੀਤੇ ਜਾ ਸਕਦੇ ਹਨ।</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager ਦੇ ਅੰਦਰ ਸਿੱਧੇ ਐਪਸ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਡਾਊਨਲੋਡਰ ਸਥਾਪਤ ਕਰੋ।</string>\n  <string name=\"install_revanced_downloader\">ReVanced ਡਾਊਨਲੋਡਰ ਸਥਾਪਤ ਕਰੋ</string>\n  <string name=\"cancel_downloader_install_title\">ਡਾਊਨਲੋਡਰ ਸਥਾਪਨਾ ਰੱਦ ਕਰੀਏ?</string>\n  <string name=\"cancel_downloader_install_description\">ਇੱਕ ਡਾਊਨਲੋਡਰਾਂ ਦੀ ਸਥਾਪਨਾ ਚੱਲ ਰਹੀ ਹੈ। ਜੇਕਰ ਤੁਸੀਂ ਹੁਣ ਛੱਡਦੇ ਹੋ, ਤਾਂ ਡਾਊਨਲੋਡ ਰੱਦ ਹੋ ਜਾਵੇਗਾ।</string>\n  <string name=\"downloader_sources_unavailable_title\">ਇਹ ਡਾਊਨਲੋਡਰ ਗੁੰਮ ਹਨ</string>\n  <string name=\"downloader_sources_unavailable_description\">ਇਸਨੂੰ ਠੀਕ ਕਰਨ ਲਈ ਅੱਪਡੇਟ ਬਟਨ \\'ਤੇ ਕਲਿੱਕ ਕਰੋ।</string>\n  <string name=\"downloader_update_failed\">ਡਾਊਨਲੋਡਰ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਵਿੱਚ ਅਸਫਲ: %s</string>\n  <string name=\"downloader_replace_fail\">ਡਾਊਨਲੋਡਰ ਨੂੰ ਆਯਾਤ ਕਰਨ ਵਿੱਚ ਅਸਫਲ: %s</string>\n  <string name=\"select_from_storage_description\">ਫਾਈਲ ਚੋਣਕਾਰ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਸਟੋਰੇਜ ਤੋਂ ਇੱਕ APK ਫਾਈਲ ਚੁਣੋ</string>\n  <string name=\"enable\">ਸਮਰੱਥ ਕਰੋ</string>\n  <string name=\"disable\">ਅਯੋਗ ਕਰੋ</string>\n  <string name=\"process_runtime_memory_limit_description\">ਪੈਚਰ ਪ੍ਰਕਿਰਿਆ ਦੁਆਰਾ ਵਰਤੀ ਜਾ ਸਕਣ ਵਾਲੀ ਵੱਧ ਤੋਂ ਵੱਧ ਮੈਮੋਰੀ</string>\n  <string name=\"reset_onboarding\">ਆਨਬੋਰਡਿੰਗ ਰੀਸੈਟ ਕਰੋ</string>\n  <string name=\"reset_onboarding_description\">ਅਗਲੀ ਐਪ ਲਾਂਚ \\'ਤੇ ਆਨਬੋਰਡਿੰਗ ਸਕ੍ਰੀਨ ਦਿਖਾਓ</string>\n  <string name=\"api_not_working_title\">API ਸੇਵਾ ਵਰਤਮਾਨ ਵਿੱਚ ਬੰਦ ਹੈ</string>\n  <string name=\"api_not_working_description\">ਕੁਝ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਪ੍ਰਭਾਵਿਤ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਆਪਣੀ ਕਨੈਕਸ਼ਨ ਜਾਂ API URL ਨੂੰ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਜਾਂਚੋ।</string>\n  <string name=\"no_patched_apps_found\">ਕੋਈ ਪੈਚ ਕੀਤੀਆਂ ਐਪਸ ਨਹੀਂ ਮਿਲੀਆਂ</string>\n  <string name=\"no_patched_apps_description\">ਤੁਹਾਡੇ ਕੋਲ ਵਰਤਮਾਨ ਵਿੱਚ ਕੋਈ ਪੈਚ ਕੀਤੀਆਂ ਐਪਸ ਨਹੀਂ ਹਨ ਜਿਨ੍ਹਾਂ ਬਾਰੇ ਅਸੀਂ ਜਾਣਦੇ ਹਾਂ। ਆਪਣੀ ਪਹਿਲੀ ਐਪ ਨੂੰ ਪੈਚ ਕਰਕੇ ਇਸਨੂੰ ਬਦਲੋ!</string>\n  <string name=\"patched_apps_section_title\">ਪੈਚ ਕੀਤੀਆਂ ਐਪਾਂ</string>\n  <string name=\"patchable_apps_section_title\">ਐਪਾਂ ਜਿਹਨਾਂ ਨੂੰ ਪੈਚ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ</string>\n  <string name=\"no_patches_found\">ਕੋਈ ਪੈਚ ਨਹੀਂ ਮਿਲੇ</string>\n  <string name=\"no_patches_description\">ਤੁਹਾਡੇ ਕੋਲ ਅਜੇ ਕੋਈ ਪੈਚ ਨਹੀਂ ਹਨ। ਹੇਠਾਂ ਦਿੱਤੇ ਬਟਨ \\'ਤੇ ਟੈਪ ਕਰਕੇ ਪੈਚ ਸ਼ਾਮਲ ਕਰੋ!</string>\n  <string name=\"split_apk_not_supported\">ਸਪਲਿਟ APKs ਪੈਚ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕਦੇ</string>\n  <string name=\"no_downloaders_installed\">ਕੋਈ ਐਪ ਡਾਊਨਲੋਡਰ ਸਥਾਪਤ ਨਹੀਂ ਹਨ!</string>\n  <string name=\"no_downloaders_trusted\">ਕਿਸੇ ਵੀ ਐਪ ਡਾਊਨਲੋਡਰ \\'ਤੇ ਭਰੋਸਾ ਨਹੀਂ ਕੀਤਾ ਗਿਆ! ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੀਆਂ ਸੈਟਿੰਗਾਂ ਦੀ ਜਾਂਚ ਕਰੋ।</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">ਪੈਕੇਜ</string>\n  <string name=\"patch_selector_sheet_actions_title\">ਕਾਰਵਾਈਆਂ</string>\n  <string name=\"restore_default_selection\">ਮੂਲ ਚੋਣ ਨੂੰ ਬਹਾਲ ਕਰੋ</string>\n  <string name=\"deselect_all\">ਸਾਰਿਆਂ ਨੂੰ ਅਣਚੁਣੋ</string>\n  <string name=\"invert_selection\">ਚੋਣ ਨੂੰ ਉਲਟਾਓ</string>\n  <string name=\"deselect_all_except\">%s ਨੂੰ ਛੱਡ ਕੇ ਸਭ ਦੀ ਚੋਣ ਹਟਾਓ</string>\n  <string name=\"scope_dialog_title\">ਇਸ \\'ਤੇ ਲਾਗੂ ਕਰੋ</string>\n  <string name=\"scope_all_patches\">ਸਾਰੇ ਪੈਚ</string>\n  <string name=\"scope_bundle_patches\">ਸਿਰਫ਼ %s</string>\n  <string name=\"save_as_file\">ਫਾਈਲਾਂ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕਰੋ</string>\n  <string name=\"export_patcher_logs\">ਪੈਚਰ ਲੌਗ ਨਿਰਯਾਤ ਕਰੋ</string>\n  <string name=\"save_logs_success\">ਲੌਗ ਸੁਰੱਖਿਅਤ ਕੀਤੇ ਗਏ</string>\n  <string name=\"downloader_activity_dialog_body\">ਇਸ ਡਾਊਨਲੋਡਰ ਨਾਲ ਅੱਗੇ ਵਧਣ ਲਈ ਉਪਭੋਗਤਾ ਦੀ ਆਪਸੀ ਕਾਰਵਾਈ ਦੀ ਲੋੜ ਹੈ।</string>\n  <string name=\"patcher_step_unpack\">ਪੈਚਰ ਤਿਆਰ ਕਰੋ</string>\n  <string name=\"view_announcement\">ਘੋਸ਼ਣਾ ਵੇਖੋ</string>\n  <string name=\"license\">ਲਾਇਸੰਸ</string>\n  <string name=\"source\">ਸਰੋਤ</string>\n  <string name=\"repository\">ਰਿਪੋਜ਼ਟਰੀ</string>\n  <string name=\"bundle_information_by_author\">%1$s ਦੁਆਰਾ</string>\n  <string name=\"version_compatibility_warning\">ਚੁਣਿਆ ਗਿਆ ਸੰਸਕਰਣ ਚੁਣੇ ਗਏ ਪੈਚਾਂ ਨਾਲ ਅਸੰਗਤ ਹੋ ਸਕਦਾ ਹੈ</string>\n  <string name=\"announcements\">ਘੋਸ਼ਣਾਵਾਂ</string>\n  <string name=\"archive\">ਪੁਰਾਲੇਖ</string>\n  <string name=\"view_update\">ਅੱਪਡੇਟ ਵੇਖੋ</string>\n  <string name=\"update_checking_downloader\">ਲਾਂਚ \\'ਤੇ ReVanced ਡਾਊਨਲੋਡਰਾਂ ਦੇ ਅੱਪਡੇਟ ਲਈ ਜਾਂਚ ਕਰੋ</string>\n  <string name=\"update_checking_downloader_description\">ਐਪਲੀਕੇਸ਼ਨ ਸ਼ੁਰੂ ਹੋਣ \\'ਤੇ ਸਥਾਪਤ ReVanced ਡਾਊਨਲੋਡਰਾਂ ਦੇ ਅੱਪਡੇਟ ਲਈ ਜਾਂਚ ਕਰੋ</string>\n  <string name=\"prereleases_warning\">ਪ੍ਰੀ-ਰਿਲੀਜ਼ ਸੰਸਕਰਣ ਅਸਥਿਰ ਹੋ ਸਕਦੇ ਹਨ ਅਤੇ ਬੱਗ ਸ਼ਾਮਲ ਕਰ ਸਕਦੇ ਹਨ। ਤੁਹਾਨੂੰ ਕਰੈਸ਼, ਡੇਟਾ ਦਾ ਨੁਕਸਾਨ, ਜਾਂ ਹੋਰ ਅਣਚਾਹੇ ਮੁੱਦੇ ਅਨੁਭਵ ਹੋ ਸਕਦੇ ਹਨ। ਇਸਨੂੰ ਤਾਂ ਹੀ ਸਮਰੱਥ ਕਰੋ ਜੇਕਰ ਤੁਸੀਂ ਇਹਨਾਂ ਜੋਖਮਾਂ ਨਾਲ ਸਹਿਜ ਹੋ।</string>\n  <string name=\"changelog\">ਬਦਲਾਵ ਦਾ ਲੌਗ ਵੇਖੋ</string>\n  <string name=\"no_announcements_found\">ਕੋਈ ਘੋਸ਼ਣਾ ਨਹੀਂ ਮਿਲੀ</string>\n  <string name=\"new_announcement\">ਨਵੀਂ ਘੋਸ਼ਣਾ:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d ਪੈਚ</item>\n    <item quantity=\"other\">%d ਪੈਚ</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d ਪੈਚ ਚਲਾਓ</item>\n    <item quantity=\"other\">%d ਪੈਚ ਚਲਾਓ</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d ਚੁਣਿਆ ਗਿਆ</item>\n    <item quantity=\"other\">%d ਚੁਣੇ ਗਏ</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pl-rPL/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Łatanie</string>\n  <string name=\"patches\">Łatki</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Menedżer</string>\n  <string name=\"onboarding_welcome_to\">Witaj w</string>\n  <string name=\"onboarding_welcome_back\">Cześć! To nowy</string>\n  <string name=\"onboarding_apps_subtitle\">Możesz wybrać aplikację do łatania teraz lub zrobić to później</string>\n  <string name=\"onboarding_apps_network_error\">Nie można załadować poprawek, ponieważ sieć jest niedostępna lub niestabilna. Połącz się ze stabilną siecią i spróbuj ponownie.</string>\n  <string name=\"onboarding_updates_subtitle\">Skonfiguruj automatyczne aktualizacje, aby ReVanced Manager i łatki były zawsze aktualne</string>\n  <string name=\"banner_sources_not_downloaded_description\">Nie można pobrać poprawek i programów do pobierania podczas konfiguracji. Dotknij „Aktualizuj”, aby je pobrać.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager połączy się z %s w celu pobrania początkowych wersji, jeśli Twoje urządzenie jest połączone z internetem.</string>\n  <string name=\"retry\">Spróbuj ponownie</string>\n  <string name=\"onboarding_skip\">Pomiń na razie</string>\n  <string name=\"onboarding_recommended_version\">Zalecana wersja: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Pominąć uprawnienia?</string>\n  <string name=\"onboarding_permissions_skip_description\">Bez wymaganych uprawnień niektóre funkcje mogą nie działać prawidłowo. Możesz je nadać później w ustawieniach aplikacji.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Pomiń mimo to</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager potrzebuje kilku uprawnień do prawidłowego działania</string>\n  <string name=\"permission_install_apps\">Instaluj nieznane aplikacje</string>\n  <string name=\"permission_install_apps_description\">Wymagane do instalacji załatanych aplikacji</string>\n  <string name=\"permission_notifications\">Powiadomienia</string>\n  <string name=\"permission_notifications_description\">Umożliwia nieprzerwane łatanie w tle.</string>\n  <string name=\"permission_battery\">Optymalizacja baterii</string>\n  <string name=\"permission_battery_description\">Zapobiega przerwaniu łatania w tle</string>\n  <string name=\"permission_grant\">Przyznaj</string>\n  <string name=\"downloader_host_permission_label\">Host programu pobierającego ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Służy do kontrolowania dostępu do programów pobierających ReVanced Manager. Tylko ReVanced Manager ma tę funkcję.</string>\n  <string name=\"toast_copied_to_clipboard\">Skopiowano!</string>\n  <string name=\"copy_to_clipboard\">Kopiuj do schowka</string>\n  <string name=\"dashboard\">Panel główny</string>\n  <string name=\"settings\">Ustawienia</string>\n  <string name=\"select_app\">Wybierz aplikację</string>\n  <string name=\"patches_count_selected\">Wybrano %1$d/%2$d</string>\n  <string name=\"fab_patch_app\">Załataj aplikację</string>\n  <string name=\"fab_add_patches\">Dodaj łaty</string>\n  <string name=\"new_downloader_notification\">Dostępne są nowe programy pobierające. Kliknij tutaj, aby je skonfigurować.</string>\n  <string name=\"unsupported_architecture_warning\">Łatanie na tej architekturze urządzenia jest nieobsługiwane i najprawdopodobniej zakończy się niepowodzeniem.</string>\n  <string name=\"import_\">Importuj</string>\n  <string name=\"import_patches\">Importuj łatki</string>\n  <string name=\"file_field_set\">Wybrano</string>\n  <string name=\"file_field_not_set\">Nie wybrano</string>\n  <string name=\"field_not_set\">Nie ustawiono</string>\n  <string name=\"patches_missing\">Brakujące</string>\n  <string name=\"patches_error\">Błąd</string>\n  <string name=\"patches_error_description\">Nie można było załadować łatek. Kliknij, aby wyświetlić błąd</string>\n  <string name=\"patches_not_downloaded\">Poprawki nie zostały pobrane.</string>\n  <string name=\"patches_name_default\">Łatki</string>\n  <string name=\"patches_name_fallback\">Bez nazwy</string>\n  <string name=\"android_11_bug_dialog_title\">Błąd Androida 11</string>\n  <string name=\"android_11_bug_dialog_description\">Zezwolenie na instalację aplikacji musi zostać udzielone z wyprzedzeniem, aby uniknąć błędu w systemie Android 11, który negatywnie wpłynie na doświadczenia użytkownika.</string>\n  <string name=\"no_network_toast\">Brak połączenia z internetem</string>\n  <string name=\"selected_app_meta_any_version\">Dowolna dostępna wersja</string>\n  <string name=\"app_source_dialog_title\">Wybierz źródło</string>\n  <string name=\"app_source_dialog_option_auto\">Automatycznie</string>\n  <string name=\"app_source_dialog_option_auto_description\">Użyj zainstalowanej aplikacji, potem pobranego APK, następnie dostępnych programów do pobierania</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Nie znaleziono zgodnej aplikacji ani dostępnych programów do pobierania.</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Zamontowanych aplikacji nie można ponownie łatać bez dostępu root.</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Wersja %s nie pasuje do sugerowanej wersji</string>\n  <string name=\"patch_item_description\">Rozpocznij łatanie aplikacji</string>\n  <string name=\"patch_selector_item\">Wybierz łaty</string>\n  <string name=\"patch_selector_item_description\">Wybrano %d łat</string>\n  <string name=\"patch_selection_changed_warning\">Wybór poprawek został zmieniony.</string>\n  <string name=\"no_patches_selected\">Nie wybrano łatek</string>\n  <string name=\"network_unavailable_warning\">Twoje urządzenie nie jest połączone z internetem. Pobieranie zakończy się niepowodzeniem.</string>\n  <string name=\"network_metered_warning\">Obecnie korzystasz z połączenia taryfowego. Mogą obowiązywać opłaty za przesyłanie danych od dostawcy usług.</string>\n  <string name=\"apk_source_selector_item\">Wybierz źródło APK</string>\n  <string name=\"apk_source_auto\">Automatycznie</string>\n  <string name=\"apk_source_auto_installed\">Automatycznie · Używając zainstalowanego APK</string>\n  <string name=\"apk_source_auto_downloaded\">Automatycznie · Używając pobranego APK</string>\n  <string name=\"apk_source_auto_downloader\">Automatyczne · Korzystanie z dostępnych programów pobierających</string>\n  <string name=\"apk_source_auto_storage\">Automatyczne · Wybór z pamięci</string>\n  <string name=\"apk_source_downloader\">Używanie %s</string>\n  <string name=\"apk_source_installed\">Używanie zainstalowanego APK</string>\n  <string name=\"apk_source_local\">Używanie lokalnego pliku APK</string>\n  <string name=\"apk_source_downloaded\">Już pobrane</string>\n  <string name=\"legacy_import_failed\">Nie można zaimportować starych ustawień</string>\n  <string name=\"auto_updates_dialog_title\">Skonfiguruj aktualizacje</string>\n  <string name=\"auto_updates_dialog_description\">Czy chcesz, aby ReVanced Manager okresowo sprawdzał dostępność aktualizacji dla następujących komponentów?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Łaty ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Programy pobierające</string>\n  <string name=\"auto_updates_dialog_note\">Te ustawienia można później zmienić.\n\n    ReVanced Manager połączy się z %s w celu pobrania początkowych wersji, jeśli Twoje urządzenie jest połączone z internetem.</string>\n  <string name=\"announcements_filter_tag\">Filtruj po tagu</string>\n  <string name=\"announcements_show_archived\">Pokaż zarchiwizowane</string>\n  <string name=\"general\">Ogólne</string>\n  <string name=\"general_description\">Język, motyw, dynamiczny kolor</string>\n  <string name=\"updates\">Aktualizacje</string>\n  <string name=\"updates_description\">Sprawdź aktualizacje i zobacz listę zmian</string>\n  <string name=\"downloads\">Pobrane</string>\n  <string name=\"downloads_description\">Programy do pobierania i pobrane aplikacje</string>\n  <string name=\"import_export\">Import i eksport</string>\n  <string name=\"import_export_description\">Magazyn kluczy, opcje i wybór łatek</string>\n  <string name=\"advanced\">Zaawansowane</string>\n  <string name=\"advanced_description\">URL API, limit pamięci, debugowanie</string>\n  <string name=\"safeguards_toggled_warning\">Zabezpieczenia zostały przełączone.</string>\n  <string name=\"about\">Informacje</string>\n  <string name=\"about_app_name\">O %1$s</string>\n  <string name=\"opensource_licenses\">Licencje open source</string>\n  <string name=\"opensource_licenses_description\">Wyświetl wszystkie biblioteki użyte do stworzenia tej aplikacji</string>\n  <string name=\"contributors\">Współtwórcy</string>\n  <string name=\"contributors_description\">Wyświetl współtwórców ReVanced</string>\n  <string name=\"dynamic_color\">Dynamiczny kolor</string>\n  <string name=\"dynamic_color_description\">Dopasuj kolory do tapety</string>\n  <string name=\"pure_black_theme\">Motyw czystej czerni</string>\n  <string name=\"pure_black_theme_description\">Użyj czysto czarnych teł dla ciemnego motywu</string>\n  <string name=\"theme\">Motyw</string>\n  <string name=\"theme_description\">Wybierz między jasnym a ciemnym motywem</string>\n  <string name=\"language\">Język</string>\n  <string name=\"language_description\">Wybierz język wyświetlania aplikacji</string>\n  <string name=\"language_system_default\">Domyślne systemowe</string>\n  <string name=\"search_languages\">Szukaj języków…</string>\n  <string name=\"safeguards\">Zabezpieczenia</string>\n  <string name=\"patch_compat_check\">Wyłącz sprawdzanie zgodności wersji</string>\n  <string name=\"patch_compat_check_description\">Nie ograniczaj łatek do zgodnych wersji aplikacji</string>\n  <string name=\"patch_compat_check_confirmation\">Wybranie niekompatybilnych łatek może spowodować uszkodzenie aplikacji.\\n\\nCzy mimo to chcesz kontynuować?</string>\n  <string name=\"suggested_version_safeguard\">Wymagaj sugerowanej wersji aplikacji</string>\n  <string name=\"suggested_version_safeguard_description\">Wymuś wybór sugerowanej wersji aplikacji</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Wybranie aplikacji, która nie jest sugerowaną wersją, może spowodować nieoczekiwane problemy.\\n\\nCzy mimo to chcesz kontynuować?</string>\n  <string name=\"patch_selection_safeguard\">Zezwól na zmianę wyboru łatek i opcji</string>\n  <string name=\"patch_selection_safeguard_description\">Nie zapobiegaj wybieraniu ani usuwaniu wyboru łatek oraz dostosowywaniu opcji</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Zmiana wyboru łatek może spowodować nieoczekiwane problemy.\\n\\nWłączyć mimo to?</string>\n  <string name=\"universal_patches_safeguard\">Zezwól na używanie uniwersalnych łatek</string>\n  <string name=\"universal_patches_safeguard_description\">Nie zapobiegaj używaniu uniwersalnych łatek</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Uniwersalne łatki nie są tak dobrze przetestowane jak te, które są przeznaczone dla konkretnych aplikacji.\\n\\nWłączyć mimo to?</string>\n  <string name=\"keystore\">Magazyn kluczy</string>\n  <string name=\"patches_selections\">Wybór łat</string>\n  <string name=\"import_keystore\">Importuj magazyn kluczy</string>\n  <string name=\"import_keystore_description\">Importuj niestandardowy magazyn kluczy</string>\n  <string name=\"import_keystore_dialog_title\">Wprowadź dane uwierzytelniające magazynu kluczy</string>\n  <string name=\"import_keystore_dialog_description\">Aby zaimportować magazyn kluczy, należy wprowadzić jego dane uwierzytelniające.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Nazwa użytkownika (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Hasło</string>\n  <string name=\"import_keystore_dialog_button\">Importuj</string>\n  <string name=\"import_keystore_wrong_credentials\">Nieprawidłowe dane uwierzytelniające magazynu kluczy</string>\n  <string name=\"import_keystore_success\">Zaimportowano magazyn kluczy</string>\n  <string name=\"export_keystore\">Eksportuj magazyn kluczy</string>\n  <string name=\"export_keystore_description\">Eksportuj bieżący magazyn kluczy</string>\n  <string name=\"export_keystore_unavailable\">Brak magazynu kluczy do wyeksportowania</string>\n  <string name=\"export_keystore_success\">Wyeksportowano magazyn kluczy</string>\n  <string name=\"regenerate_keystore\">Wygeneruj ponownie magazyn kluczy</string>\n  <string name=\"regenerate_keystore_description\">Wygeneruj nowy magazyn kluczy</string>\n  <string name=\"regenerate_keystore_dialog_description\">Zamierzasz ponownie wygenerować magazyn kluczy, którego menedżer będzie używał podczas procesu łatania.\\n\\nNie będziesz mógł aktualizować wcześniej zainstalowanych aplikacji z tego źródła.</string>\n  <string name=\"regenerate_keystore_success\">Magazyn kluczy został pomyślnie zastąpiony</string>\n  <string name=\"import_patch_selection\">Importuj wybór łatek</string>\n  <string name=\"import_patch_selection_description\">Importuj wybór łatek z pliku JSON</string>\n  <string name=\"import_patch_selection_fail\">Nie można zaimportować wyboru łatek: %s</string>\n  <string name=\"import_patch_selection_success\">Zaimportowano wybór łatek</string>\n  <string name=\"select_bundle_for_import\">Wybierz pakiet do importu</string>\n  <string name=\"export_patch_selection\">Eksportuj wybór łatek</string>\n  <string name=\"export_patch_selection_description\">Eksportuj wybór łatek do pliku JSON</string>\n  <string name=\"export_patch_selection_fail\">Nie można wyeksportować wyboru łatek: %s</string>\n  <string name=\"export_patch_selection_success\">Wyeksportowano wybór łatek</string>\n  <string name=\"select_bundle_for_export\">Wybierz pakiet do eksportu</string>\n  <string name=\"patch_selection_packages\">Aplikacje z zapisanymi wyborami</string>\n  <string name=\"patch_selection_entries\">Łączna liczba wybranych łat</string>\n  <string name=\"reset_configuration\">Zresetuj konfigurację</string>\n  <string name=\"reset_patch_selection\">Wybory łat</string>\n  <string name=\"reset_patch_selection_description\">Zresetuj zapisany wybór łatek</string>\n  <string name=\"reset_patch_options\">Opcje łatania</string>\n  <string name=\"reset_patch_options_description\">Zresetuj zapisane opcje łatek</string>\n  <string name=\"reset_patch_selection_success\">Wybór łatek został zresetowany</string>\n  <string name=\"patch_selection_reset_all\">Zresetuj wybór łatek globalnie</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Zamierzasz zresetować wszystkie wybory łatek. Będziesz musiał ręcznie wybrać każdą łatkę ponownie.</string>\n  <string name=\"patch_selection_reset_all_description\">Resetuje wszystkie wybory łatek</string>\n  <string name=\"patch_selection_reset_package\">Zresetuj wybór łatek dla aplikacji</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Zamierzasz zresetować wybór łatek dla aplikacji \\\"%s\\\". Będziesz musiał ręcznie wybrać każdą łatkę ponownie.</string>\n  <string name=\"patch_selection_reset_package_description\">Resetuje wybór łatek dla pojedynczej aplikacji</string>\n  <string name=\"patch_selection_reset_patches\">Resetuj wybór łatek (pojedynczy)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Zamierzasz zresetować wybór łatek dla \\\"%s\\\". Będziesz musiał ręcznie wybrać każdą łatkę ponownie.</string>\n  <string name=\"patch_selection_reset_patches_description\">Resetuje wybór łatek dla konkretnej kolekcji łatek</string>\n  <string name=\"patch_options_reset_package\">Resetuj opcje łatek dla aplikacji</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Zamierzasz zresetować opcje łatek dla aplikacji \\\"%s\\\". Będziesz musiał ponownie zastosować każdą opcję.</string>\n  <string name=\"patch_options_reset_package_description\">Resetuje opcje łatek dla pojedynczej aplikacji</string>\n  <string name=\"patch_options_reset_patches\">Resetuj opcje łatek (pojedyncze)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Zamierzasz zresetować opcje łatek dla \\\"%s\\\". Będziesz musiał ponownie zastosować każdą opcję.</string>\n  <string name=\"patch_options_reset_patches_description\">Resetuje opcje łatek dla konkretnej kolekcji łatek</string>\n  <string name=\"patch_options_reset_all\">Resetuj opcje łatek globalnie</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Zamierzasz zresetować wszystkie opcje łatek. Będziesz musiał ponownie zastosować każdą opcję.</string>\n  <string name=\"patch_options_reset_all_description\">Resetuje wszystkie opcje łatek</string>\n  <string name=\"downloaders\">Programy do pobierania</string>\n  <string name=\"downloader_prereleases\">Używaj wersji wstępnych</string>\n  <string name=\"downloader_prereleases_description\">Używaj wersji wstępnych głównego programu pobierającego</string>\n  <string name=\"downloader_state_loaded\">Załadowano</string>\n  <string name=\"downloader_state_failed\">Nie udało się załadować. Kliknij, aby uzyskać więcej szczegółów</string>\n  <string name=\"downloader_state_missing\">Brakujące</string>\n  <string name=\"downloader_delete_apps_title\">Usuń wybrane aplikacje</string>\n  <string name=\"downloader_delete_apps_description\">Czy na pewno chcesz usunąć wybrane aplikacje?</string>\n  <string name=\"downloader_delete_single_description\">Czy na pewno chcesz usunąć „%s”?</string>\n  <string name=\"downloader_settings_no_apps\">Nie znaleziono pobranych aplikacji.</string>\n  <string name=\"downloader_settings_no_apps_description\">Aplikacje pobrane za pośrednictwem ReVanced Manager pojawią się tutaj.</string>\n  <string name=\"downloader_url\">Adres URL pobieracza</string>\n  <string name=\"downloader_add\">Dodaj pobieracz</string>\n  <string name=\"select_downloader_type_dialog_description\">Dodaj nowe pobieracze z adresu URL lub plików lokalnych</string>\n  <string name=\"local_downloaders_description\">Dodaj pobieracze z pamięci lokalnej.</string>\n  <string name=\"remote_downloaders_description\">Dodaj pobieracze z adresu URL. Mogą być automatycznie aktualizowane.</string>\n  <string name=\"install_revanced_downloaders\">Zainstaluj programy pobierające, aby pobierać aplikacje bezpośrednio w ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Zainstaluj programy pobierające ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Anulować instalację programów pobierających?</string>\n  <string name=\"cancel_downloader_install_description\">Instalacja programów pobierających jest w toku. Jeśli teraz wyjdziesz, pobieranie zostanie anulowane.</string>\n  <string name=\"downloader_sources_unavailable_title\">Brakuje tych pobieraczy</string>\n  <string name=\"downloader_sources_unavailable_description\">Kliknij przycisk aktualizacji, aby to naprawić.</string>\n  <string name=\"downloader_update_failed\">Nie udało się zaktualizować pobieracza: %s</string>\n  <string name=\"downloader_replace_fail\">Nie udało się zaimportować pobieracza: %s</string>\n  <string name=\"search_apps\">Szukaj aplikacji…</string>\n  <string name=\"loading_body\">Ładowanie…</string>\n  <string name=\"downloading_patches\">Pobieranie łatek…</string>\n  <string name=\"options\">Opcje</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Tak</string>\n  <string name=\"no\">Nie</string>\n  <string name=\"edit\">Edytuj</string>\n  <string name=\"dialog_input_placeholder\">Wartość</string>\n  <string name=\"reset\">Resetuj</string>\n  <string name=\"share\">Udostępnij</string>\n  <string name=\"patch\">Łatka</string>\n  <string name=\"select_from_storage\">Wybierz z pamięci</string>\n  <string name=\"select_from_storage_description\">Wybierz plik APK z pamięci za pomocą selektora plików</string>\n  <string name=\"suggested_version_info\">Sugerowana wersja: %s</string>\n  <string name=\"type_anything\">Wpisz cokolwiek, aby kontynuować</string>\n  <string name=\"search\">Szukaj łatek…</string>\n  <string name=\"apply\">Zastosuj</string>\n  <string name=\"help\">Pomoc</string>\n  <string name=\"back\">Wstecz</string>\n  <string name=\"warning\">Ostrzeżenie</string>\n  <string name=\"add\">Dodaj</string>\n  <string name=\"enable\">Włącz</string>\n  <string name=\"disable\">Wyłącz</string>\n  <string name=\"close\">Zamknij</string>\n  <string name=\"clear\">Wyczyść</string>\n  <string name=\"system\">System</string>\n  <string name=\"light\">Jasny</string>\n  <string name=\"dark\">Ciemny</string>\n  <string name=\"appearance\">Wygląd</string>\n  <string name=\"networking\">Sieć</string>\n  <string name=\"allow_metered_networks\">Zezwól na sieci taryfowe</string>\n  <string name=\"allow_metered_networks_description\">Zezwala na automatyczne aktualizacje w sieciach taryfowych.\\n    Aplikacja może nadal ostrzegać o sieciach taryfowych w przypadku operacji ręcznych.</string>\n  <string name=\"downloaded_apps\">Pobrane aplikacje</string>\n  <string name=\"process_runtime\">Uruchom Patcher w innym procesie (eksperymentalne)</string>\n  <string name=\"process_runtime_description\">Jest to szybsze i pozwala Patcherowi używać więcej pamięci</string>\n  <string name=\"process_runtime_memory_limit\">Limit pamięci procesu Patchera</string>\n  <string name=\"process_runtime_memory_limit_description\">Maksymalna ilość pamięci, którą może wykorzystać proces Patcher</string>\n  <string name=\"debug_logs_export\">Eksportuj logi debugowania</string>\n  <string name=\"debug_logs_export_read_failed\">Nie udało się odczytać logów (kod wyjścia %d)</string>\n  <string name=\"debug_logs_export_failed\">Nie udało się wyeksportować logów</string>\n  <string name=\"debug_logs_export_success\">Logi wyeksportowane</string>\n  <string name=\"api_url\">Adres URL API</string>\n  <string name=\"api_url_description\">API używane do pobierania niezbędnych plików</string>\n  <string name=\"api_url_dialog_title\">Zmień adres URL API</string>\n  <string name=\"api_url_dialog_description\">Zmień adres URL API ReVanced Manager. ReVanced Manager używa API do pobierania łatek i aktualizacji.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager łączy się z API w celu pobierania łatek i aktualizacji. Upewnij się, że mu ufasz.</string>\n  <string name=\"api_url_dialog_save\">Ustaw</string>\n  <string name=\"api_url_dialog_reset\">Resetuj adres URL API</string>\n  <string name=\"device\">Urządzenie</string>\n  <string name=\"device_android_version\">Wersja Androida</string>\n  <string name=\"device_model\">Model</string>\n  <string name=\"device_architectures\">Architektury CPU</string>\n  <string name=\"device_memory_limit\">Limity pamięci</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normalny) - %2$dMB (Duży)</string>\n  <string name=\"patches_force_download\">Wymuś pobranie wszystkich łatek</string>\n  <string name=\"patches_reset\">Zresetuj łatki</string>\n  <string name=\"reset_onboarding\">Zresetuj wprowadzenie</string>\n  <string name=\"reset_onboarding_description\">Pokaż ekran wprowadzenia przy następnym uruchomieniu aplikacji</string>\n  <string name=\"patching\">Łatanie</string>\n  <string name=\"signing\">Podpisywanie</string>\n  <string name=\"storage\">Pamięć</string>\n  <string name=\"no_patch_found\">Nie znaleziono łatek. Sprawdź swoje łatki</string>\n  <string name=\"tab_apps\">Aplikacje</string>\n  <string name=\"tab_patches\">Łatki</string>\n  <string name=\"delete\">Usuń</string>\n  <string name=\"refresh\">Odśwież</string>\n  <string name=\"continue_anyways\">Kontynuuj mimo wszystko</string>\n  <string name=\"download_another_version\">Pobierz inną wersję</string>\n  <string name=\"download_app\">Pobierz aplikację</string>\n  <string name=\"download_apk\">Pobierz plik APK</string>\n  <string name=\"patches_download_fail\">Nie udało się pobrać łatek: %s</string>\n  <string name=\"api_not_working_title\">Usługa API jest obecnie niedostępna</string>\n  <string name=\"api_not_working_description\">Niektóre funkcje mogą być niedostępne. Sprawdź swoje połączenie lub adres URL API w ustawieniach.</string>\n  <string name=\"patches_replace_fail\">Nie udało się zaimportować łatek: %s</string>\n  <string name=\"no_patched_apps_found\">Nie znaleziono załatanych aplikacji</string>\n  <string name=\"no_patched_apps_description\">Obecnie nie masz żadnych załatanych aplikacji, o których byśmy wiedzieli. Zmień to, łatając swoją pierwszą aplikację!</string>\n  <string name=\"patched_apps_section_title\">Załatane aplikacje</string>\n  <string name=\"patchable_apps_section_title\">Aplikacje, które można załatać</string>\n  <string name=\"no_patches_found\">Nie znaleziono łat</string>\n  <string name=\"no_patches_description\">Nie masz jeszcze żadnych łat. Dodaj łaty, dotykając przycisku poniżej!</string>\n  <string name=\"tap_on_patches\">Dotknij łatek, aby uzyskać więcej informacji o nich</string>\n  <string name=\"patches_selected\">Wybrano %s</string>\n  <string name=\"incompatible_patches\">Niekompatybilne łatki</string>\n  <string name=\"universal_patches\">Uniwersalne łatki</string>\n  <string name=\"patch_selection_reset_toast\">Wybór łatek i opcje zostały zresetowane do zalecanych ustawień domyślnych</string>\n  <string name=\"patch_options_reset_toast\">Opcje łatek zostały zresetowane</string>\n  <string name=\"non_suggested_version_warning_title\">Niesugerowana wersja</string>\n  <string name=\"non_suggested_version_warning_description\">Wybrana wersja aplikacji nie pasuje do sugerowanej.\\nProszę użyć sugerowanej wersji: %s\\n\\nAby kontynuować mimo wszystko, wyłącz opcję \\\"Wymagaj sugerowanej wersji aplikacji\\\" w ustawieniach zaawansowanych.</string>\n  <string name=\"selection_warning_title\">Zaprzestać używania domyślnych?</string>\n  <string name=\"selection_warning_description\">Zaleca się używanie domyślnego wyboru łatek i opcji. Zmiana ich może prowadzić do nieoczekiwanych problemów.\\n\\nMusisz włączyć opcję \\\"Zezwalaj na zmianę wyboru łatek i opcji\\\" w ustawieniach zaawansowanych przed przełączaniem łatek.</string>\n  <string name=\"universal_patch_warning_description\">Uniwersalne łatki mają bardziej ogólne zastosowanie i nie działają tak niezawodnie jak łatki przeznaczone dla konkretnych aplikacji. Podczas ich używania możesz napotkać problemy.\\n\\nMusisz włączyć opcję \\\"Zezwalaj na używanie uniwersalnych łatek\\\" w ustawieniach zaawansowanych przed użyciem uniwersalnych łatek.</string>\n  <string name=\"this_version\">Ta wersja</string>\n  <string name=\"universal\">Dowolna aplikacja</string>\n  <string name=\"search_patches\">Szukaj łatek</string>\n  <string name=\"app_version_not_compatible\">Ta łatka nie jest kompatybilna z wybraną wersją aplikacji (%1$s)\\n\\nJest kompatybilna tylko z następującymi wersjami: %2$s</string>\n  <string name=\"continue_with_version\">Kontynuować z tą wersją?</string>\n  <string name=\"version_not_compatible\">Nie wszystkie łatki są kompatybilne z tą wersją (%s). Czy chcesz kontynuować mimo wszystko?</string>\n  <string name=\"download_application\">Pobrać aplikację?</string>\n  <string name=\"app_not_installed\">Wybrana aplikacja nie jest zainstalowana. Czy chcesz ją pobrać?</string>\n  <string name=\"failed_to_load_apk\">Nie udało się załadować APK</string>\n  <string name=\"split_apk_not_supported\">Podzielone APK nie mogą być łatane</string>\n  <string name=\"loading\">Ładowanie…</string>\n  <string name=\"not_installed\">Nie zainstalowano</string>\n  <string name=\"installed\">Zainstalowano</string>\n  <string name=\"app_info\">Informacje o aplikacji</string>\n  <string name=\"uninstall\">Odinstaluj</string>\n  <string name=\"unpatch\">Cofnij łatkę</string>\n  <string name=\"repatch\">Załataj ponownie</string>\n  <string name=\"install_type\">Typ instalacji</string>\n  <string name=\"package_name\">Nazwa pakietu</string>\n  <string name=\"original_package_name\">Oryginalna nazwa pakietu</string>\n  <string name=\"applied_patches\">Zastosowane poprawki</string>\n  <string name=\"view_applied_patches\">Wyświetl zastosowane poprawki</string>\n  <string name=\"default_install\">Domyślne</string>\n  <string name=\"mount_install\">Montaż</string>\n  <string name=\"mounted\">Zamontowano</string>\n  <string name=\"not_mounted\">Nie zamontowano</string>\n  <string name=\"mount\">Montuj</string>\n  <string name=\"unmount\">Odmontuj</string>\n  <string name=\"failed_to_mount\">Nie udało się zamontować: %s</string>\n  <string name=\"failed_to_unmount\">Nie udało się odmontować: %s</string>\n  <string name=\"unpatch_app\">Odinstalować poprawki aplikacji?</string>\n  <string name=\"unpatch_description\">Czy na pewno chcesz odinstalować poprawki tej aplikacji?</string>\n  <string name=\"downloader_invalid_version\">Program pobierający nie pobrał prawidłowej wersji</string>\n  <string name=\"downloader_app_not_found\">Program pobierający nie znalazł aplikacji</string>\n  <string name=\"downloader_error\">Błąd programu pobierającego: %s</string>\n  <string name=\"no_downloaders_installed\">Żadne programy pobierające aplikacje nie są zainstalowane!</string>\n  <string name=\"no_downloaders_trusted\">Żadne programy pobierające aplikacje nie są zaufane! Sprawdź swoje ustawienia.</string>\n  <string name=\"already_patched\">Już załatano</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filtr</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Zgodność</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Pakiety</string>\n  <string name=\"patch_selector_sheet_actions_title\">Działania</string>\n  <string name=\"restore_default_selection\">Przywróć domyślne zaznaczenie</string>\n  <string name=\"deselect_all\">Odznacz wszystko</string>\n  <string name=\"invert_selection\">Odwróć zaznaczenie</string>\n  <string name=\"deselect_all_except\">Odznacz wszystkie oprócz %s</string>\n  <string name=\"scope_dialog_title\">Zastosuj do</string>\n  <string name=\"scope_all_patches\">Wszystkie łatki</string>\n  <string name=\"scope_bundle_patches\">Tylko %s</string>\n  <string name=\"string_option_menu_description\">Więcej opcji</string>\n  <string name=\"option_preset_custom_value\">Wartość niestandardowa</string>\n  <string name=\"path_selector\">Wybierz z pamięci</string>\n  <string name=\"path_selector_parent_dir\">Poprzedni katalog</string>\n  <string name=\"path_selector_dirs\">Katalogi</string>\n  <string name=\"path_selector_files\">Pliki</string>\n  <string name=\"show_password_field\">Pokaż hasło</string>\n  <string name=\"hide_password_field\">Ukryj hasło</string>\n  <string name=\"installer\">Instalator</string>\n  <string name=\"install_app\">Zainstaluj</string>\n  <string name=\"install_app_success\">Aplikacja zainstalowana</string>\n  <string name=\"install_app_fail\">Nie udało się zainstalować aplikacji: %s</string>\n  <string name=\"reinstall_app_fail\">Nie udało się ponownie zainstalować aplikacji: %s</string>\n  <string name=\"uninstall_app_fail\">Nie udało się odinstalować aplikacji: %s</string>\n  <string name=\"open_app\">Otwórz</string>\n  <string name=\"save_apk\">Zapisz APK</string>\n  <string name=\"save_apk_success\">APK zapisano</string>\n  <string name=\"sign_fail\">Nie udało się podpisać pliku APK: %s</string>\n  <string name=\"save_logs\">Zapisz dzienniki</string>\n  <string name=\"save_as_file\">Zapisz do plików</string>\n  <string name=\"export_patcher_logs\">Eksportuj dzienniki patchera</string>\n  <string name=\"save_logs_success\">Dzienniki zapisane</string>\n  <string name=\"downloader_activity_dialog_body\">Wymagana jest interakcja użytkownika, aby kontynuować z tym programem do pobierania.</string>\n  <string name=\"select_install_type\">Wybierz typ instalacji</string>\n  <string name=\"patcher_step_group_preparing\">Przygotowywanie</string>\n  <string name=\"patcher_step_load_patches\">Wczytaj poprawki</string>\n  <string name=\"patcher_step_unpack\">Przygotowywanie patchera</string>\n  <string name=\"patcher_step_group_patching\">Łatanie</string>\n  <string name=\"patcher_step_group_saving\">Zapisywanie</string>\n  <string name=\"patcher_step_write_patched\">Zapisz poprawiony plik APK</string>\n  <string name=\"patcher_step_sign_apk\">Podpisz poprawiony plik APK</string>\n  <string name=\"patcher_notification_title\">Łatanie w toku…</string>\n  <string name=\"patcher_notification_text\">Dotknij, aby wrócić do narzędzia do łatania</string>\n  <string name=\"patcher_stop_confirm_title\">Zatrzymaj narzędzie do łatania</string>\n  <string name=\"patcher_stop_confirm_description\">Czy na pewno chcesz zatrzymać proces łatania?</string>\n  <string name=\"patcher_install_in_progress\">Instalacja jest w toku. Proszę czekać</string>\n  <string name=\"execute_patches\">Wykonaj poprawki</string>\n  <string name=\"executing_patch\">Wykonaj %s</string>\n  <string name=\"failed_to_execute_patch\">Nie udało się wykonać %s</string>\n  <string name=\"step_completed\">ukończono</string>\n  <string name=\"step_failed\">niepowodzenie</string>\n  <string name=\"step_running\">w toku</string>\n  <string name=\"step_waiting\">oczekiwanie</string>\n  <string name=\"expand_content\">rozwiń</string>\n  <string name=\"collapse_content\">zwiń</string>\n  <string name=\"drag_handle\">zmień kolejność</string>\n  <string name=\"more\">Więcej</string>\n  <string name=\"less\">Mniej</string>\n  <string name=\"continue_\">Kontynuuj</string>\n  <string name=\"dismiss\">Odrzuć</string>\n  <string name=\"view_announcement\">Wyświetl ogłoszenie</string>\n  <string name=\"permanent_dismiss\">Nie pokazuj ponownie</string>\n  <string name=\"donate\">Wspomóż</string>\n  <string name=\"website\">Strona internetowa</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Kontakt</string>\n  <string name=\"license\">Licencja</string>\n  <string name=\"source\">Źródło</string>\n  <string name=\"repository\">Repozytorium</string>\n  <string name=\"bundle_information_by_author\">Autor: %1$s</string>\n  <string name=\"version\">Wersja</string>\n  <string name=\"version_compatibility_warning\">Wybrana wersja może być niekompatybilna z wybranymi poprawkami</string>\n  <string name=\"submit_feedback\">Zgłoś problem lub opinię</string>\n  <string name=\"submit_feedback_description\">Pomóż nam ulepszyć tę aplikację</string>\n  <string name=\"developer_options\">Opcje programisty</string>\n  <string name=\"developer_options_description\">Opcje debugowania problemów</string>\n  <string name=\"patches_update_success\">Aktualizacja pomyślna</string>\n  <string name=\"patches_update_unavailable\">Brak dostępnych aktualizacji</string>\n  <string name=\"view_patches\">Wyświetl poprawki</string>\n  <string name=\"patches_view_any_version\">Dowolna wersja</string>\n  <string name=\"patches_view_any_package\">Dowolny pakiet</string>\n  <string name=\"patches_delete_single_dialog_description\">Czy na pewno chcesz usunąć „%s”?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Czy na pewno chcesz usunąć wybrane poprawki?</string>\n  <string name=\"announcements\">Ogłoszenia</string>\n  <string name=\"archive\">Archiwum</string>\n  <string name=\"about_revanced_manager\">Informacje o ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager to aplikacja na Androida, która używa ReVanced Patcher do łatania aplikacji na Androida. Umożliwia pobieranie i łatanie aplikacji niestandardowymi poprawkami oraz zarządzanie procesem łatania.</string>\n  <string name=\"developer_options_taps\">Pozostało %d dotknięć</string>\n  <string name=\"developer_options_enabled\">Opcje programisty włączone</string>\n  <string name=\"developer_options_already_enabled\">Opcje programisty są już włączone</string>\n  <string name=\"update_available\">Dostępna jest aktualizacja</string>\n  <string name=\"current_version\">Bieżąca wersja: %s</string>\n  <string name=\"new_version\">Nowa wersja: %s</string>\n  <string name=\"ready_to_install_update\">Gotowy do instalacji aktualizacji</string>\n  <string name=\"update_completed\">Aktualizacja zainstalowana</string>\n  <string name=\"install_update_manager_failed\">Nie udało się zainstalować aktualizacji</string>\n  <string name=\"manual_update_check\">Sprawdź aktualizacje</string>\n  <string name=\"view_update\">Wyświetl aktualizację</string>\n  <string name=\"manual_update_check_description\">Ręcznie sprawdź aktualizacje</string>\n  <string name=\"update_checking_manager\">Sprawdź aktualizacje przy uruchomieniu</string>\n  <string name=\"update_checking_manager_description\">Sprawdź nowe wersje ReVanced Manager przy uruchamianiu aplikacji</string>\n  <string name=\"update_checking_downloader\">Sprawdź aktualizacje programów pobierających ReVanced przy uruchomieniu</string>\n  <string name=\"update_checking_downloader_description\">Sprawdź aktualizacje zainstalowanych programów pobierających ReVanced po uruchomieniu aplikacji</string>\n  <string name=\"manager_prereleases\">Użyj wersji przedpremierowych</string>\n  <string name=\"manager_prereleases_description\">Użyj wersji przedpremierowych ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Wersje przedpremierowe mogą być niestabilne i zawierać błędy. Możesz doświadczyć awarii, utraty danych lub innych nieoczekiwanych problemów. Włącz tę opcję tylko wtedy, gdy akceptujesz te ryzyka.</string>\n  <string name=\"changelog\">Wyświetl listę zmian</string>\n  <string name=\"changelog_loading\">Ładowanie listy zmian</string>\n  <string name=\"changelog_download_fail\">Nie udało się pobrać listy zmian: %s</string>\n  <string name=\"changelog_description\">Sprawdź najnowsze zmiany w tej aktualizacji</string>\n  <string name=\"battery_optimization_notification\">Optymalizacje baterii muszą być wyłączone, aby ReVanced Manager działał poprawnie w tle. Kliknij tutaj, aby wyłączyć optymalizacje.</string>\n  <string name=\"installing_manager_update\">Instalowanie aktualizacji…</string>\n  <string name=\"downloading_manager_update\">Pobieranie aktualizacji…</string>\n  <string name=\"download_manager_failed\">Nie udało się pobrać aktualizacji: %s</string>\n  <string name=\"cancel\">Anuluj</string>\n  <string name=\"save\">Zapisz</string>\n  <string name=\"save_with_count\">Zapisz (%1$s)</string>\n  <string name=\"update\">Aktualizuj</string>\n  <string name=\"empty\">Pusty</string>\n  <string name=\"installing_message\">Dotknij &lt;b&gt;Aktualizuj&lt;/b&gt;, gdy zostaniesz o to poproszony.\nReVanced Manager zamknie się podczas aktualizacji.</string>\n  <string name=\"no_changelogs_found\">Nie znaleziono list zmian</string>\n  <string name=\"just_now\">Przed chwilą</string>\n  <string name=\"minutes_ago\">%s min temu</string>\n  <string name=\"hours_ago\">%s godz temu</string>\n  <string name=\"days_ago\">%s dni temu</string>\n  <string name=\"invalid_date\">Nieprawidłowa data</string>\n  <string name=\"disable_battery_optimization\">Wyłącz optymalizację baterii</string>\n  <string name=\"input_dialog_value_invalid\">Nieprawidłowa wartość</string>\n  <string name=\"option_required\">Ta opcja jest wymagana</string>\n  <string name=\"required_options_screen\">Wymagane opcje</string>\n  <string name=\"failed_to_check_updates\">Nie udało się sprawdzić aktualizacji: %s</string>\n  <string name=\"no_update_available\">Brak dostępnych aktualizacji</string>\n  <string name=\"no_announcements_found\">Nie znaleziono ogłoszeń</string>\n  <string name=\"update_check\">Sprawdzanie aktualizacji…</string>\n  <string name=\"dismiss_temporary\">Nie teraz</string>\n  <string name=\"update_available_dialog_description\">Dostępna jest nowa wersja ReVanced Manager (%s).</string>\n  <string name=\"failed_to_download_update\">Nie udało się pobrać aktualizacji: %s</string>\n  <string name=\"download\">Pobierz</string>\n  <string name=\"download_confirmation_metered\">Obecnie korzystasz z połączenia taryfowego, a dostawca usług może naliczać opłaty za przesył danych.\n\nCzy nadal chcesz kontynuować?</string>\n  <string name=\"download_update_confirmation\">Pobrać aktualizację?</string>\n  <string name=\"no_contributors_found\">Nie znaleziono współtwórców</string>\n  <string name=\"select\">Wybierz</string>\n  <string name=\"select_deselect_all\">Zaznacz lub odznacz wszystko</string>\n  <string name=\"select_patches_type_dialog_description\">Dodaj nowe poprawki z adresu URL lub plików lokalnych</string>\n  <string name=\"local_patches_description\">Dodaj poprawki z pamięci lokalnej.</string>\n  <string name=\"remote_patches_description\">Dodaj poprawki z adresu URL. Poprawki mogą aktualizować się automatycznie.</string>\n  <string name=\"recommended\">Zalecane</string>\n  <string name=\"installation_failed_dialog_title\">Instalacja nie powiodła się</string>\n  <string name=\"installation_cancelled_dialog_title\">Instalacja anulowana</string>\n  <string name=\"installation_blocked_dialog_title\">Instalacja zablokowana</string>\n  <string name=\"installation_conflict_dialog_title\">Konflikt instalacji</string>\n  <string name=\"installation_incompatible_dialog_title\">Instalacja niekompatybilna</string>\n  <string name=\"installation_invalid_dialog_title\">Instalacja nieprawidłowa</string>\n  <string name=\"installation_storage_issue_dialog_title\">Za mało miejsca</string>\n  <string name=\"installation_timeout_dialog_title\">Limit czasu instalacji upłynął</string>\n  <string name=\"installation_failed_description\">Instalacja nie powiodła się z nieznanego powodu. Spróbować ponownie?</string>\n  <string name=\"installation_aborted_description\">Instalacja została ręcznie anulowana. Spróbować ponownie?</string>\n  <string name=\"installation_blocked_description\">Instalacja została zablokowana. Sprawdź ustawienia zabezpieczeń urządzenia i spróbuj ponownie.</string>\n  <string name=\"installation_conflict_description\">Instalacja została uniemożliwiona przez istniejącą instalację aplikacji. Odinstalować zainstalowaną aplikację i spróbować ponownie?</string>\n  <string name=\"installation_incompatible_description\">Aplikacja jest niekompatybilna z tym urządzeniem. Użyj pliku APK, który jest kompatybilny z tym urządzeniem i spróbuj ponownie.</string>\n  <string name=\"installation_invalid_description\">Aplikacja jest nieprawidłowa. Odinstalować aplikację i spróbować ponownie?</string>\n  <string name=\"installation_storage_issue_description\">Aplikacja nie mogła zostać zainstalowana z powodu niewystarczającej ilości miejsca. Zwolnij trochę miejsca i spróbuj ponownie.</string>\n  <string name=\"installation_timeout_description\">Instalacja trwała zbyt długo. Spróbować ponownie?</string>\n  <string name=\"reinstall\">Zainstaluj ponownie</string>\n  <string name=\"show\">Pokaż</string>\n  <string name=\"debugging\">Debugowanie</string>\n  <string name=\"about_device\">Informacje o urządzeniu</string>\n  <string name=\"enter_url\">Wprowadź URL</string>\n  <string name=\"next\">Dalej</string>\n  <string name=\"auto_update\">Automatyczna aktualizacja</string>\n  <string name=\"add_patches\">Dodaj poprawki</string>\n  <string name=\"auto_update_description\">Automatycznie aktualizuj, gdy dostępna jest nowa wersja</string>\n  <string name=\"patches_prereleases\">Użyj wersji przedpremierowych</string>\n  <string name=\"patches_prereleases_description\">Użyj wersji przedpremierowych %s</string>\n  <string name=\"patches_url\">URL poprawek</string>\n  <string name=\"incompatible_patches_dialog\">Te poprawki nie są kompatybilne z wybraną wersją aplikacji (%1$s).\n\nKliknij na poprawki, aby zobaczyć więcej szczegółów.</string>\n  <string name=\"incompatible_patch\">Niekompatybilna poprawka</string>\n  <string name=\"any_version\">Dowolny</string>\n  <string name=\"never_show_again\">Nigdy więcej nie pokazuj</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Pokaż komunikat o aktualizacji przy uruchomieniu</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Pokaż wyskakujące powiadomienie, gdy tylko nowa aktualizacja będzie dostępna przy uruchomieniu</string>\n  <string name=\"failed_to_import_keystore\">Nie udało się zaimportować magazynu kluczy</string>\n  <string name=\"export\">Eksportuj</string>\n  <string name=\"confirm\">Potwierdź</string>\n  <string name=\"new_announcement\">Nowe ogłoszenie:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d łatka</item>\n    <item quantity=\"few\">%d łatki</item>\n    <item quantity=\"many\">%d łatek</item>\n    <item quantity=\"other\">%d łatek</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Wykonaj %d łatkę</item>\n    <item quantity=\"few\">Wykonaj %d łatki</item>\n    <item quantity=\"many\">Wykonaj %d łatek</item>\n    <item quantity=\"other\">Wykonaj %d łatek</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">Wybrano %d</item>\n    <item quantity=\"few\">Wybrano %d</item>\n    <item quantity=\"many\">Wybrano %d</item>\n    <item quantity=\"other\">Wybrano %d</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt-rBR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Atualizador</string>\n  <string name=\"patches\">Patches</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Gerenciador</string>\n  <string name=\"onboarding_welcome_to\">Bem-vindo ao</string>\n  <string name=\"onboarding_welcome_back\">Olá! É o novo</string>\n  <string name=\"onboarding_apps_subtitle\">Você pode selecionar um aplicativo para corrigir agora ou fazer isso mais tarde</string>\n  <string name=\"onboarding_updates_subtitle\">Configure as atualizações automáticas para manter o ReVanced Manager e os patches atualizados</string>\n  <string name=\"onboarding_updates_note\">O ReVanced Manager irá se conectar a %s para baixar as versões iniciais se o seu dispositivo estiver conectado à internet.</string>\n  <string name=\"retry\">Tentar novamente</string>\n  <string name=\"onboarding_skip\">Pular por enquanto</string>\n  <string name=\"onboarding_recommended_version\">Versão recomendada: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Pular permissões?</string>\n  <string name=\"onboarding_permissions_skip_description\">Sem as permissões necessárias, alguns recursos podem não funcionar corretamente. Você pode concedê-las mais tarde nas configurações do aplicativo.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Pular mesmo assim</string>\n  <string name=\"onboarding_permissions_subtitle\">O ReVanced Manager precisa de algumas permissões para funcionar corretamente</string>\n  <string name=\"permission_install_apps\">Instalar aplicativos desconhecidos</string>\n  <string name=\"permission_install_apps_description\">Necessário para instalar aplicativos com patches</string>\n  <string name=\"permission_notifications\">Notificações</string>\n  <string name=\"permission_battery\">Otimização de bateria</string>\n  <string name=\"permission_battery_description\">Impede que a aplicação de patches seja interrompida em segundo plano</string>\n  <string name=\"permission_grant\">Conceder</string>\n  <string name=\"downloader_host_permission_label\">Host de downloader do ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Usado para controlar o acesso aos downloaders do ReVanced Manager. Apenas o ReVanced Manager possui isso.</string>\n  <string name=\"toast_copied_to_clipboard\">Copiado!</string>\n  <string name=\"copy_to_clipboard\">Copiar para área de transferência</string>\n  <string name=\"dashboard\">Painel</string>\n  <string name=\"settings\">Configurações</string>\n  <string name=\"select_app\">Selecione um aplicativo</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d selecionados</string>\n  <string name=\"fab_patch_app\">Aplicar patch em um aplicativo</string>\n  <string name=\"fab_add_patches\">Adicionar patches</string>\n  <string name=\"new_downloader_notification\">Novos downloaders disponíveis. Clique aqui para configurá-los.</string>\n  <string name=\"unsupported_architecture_warning\">A aplicação de patches nesta arquitetura de dispositivo não é suportada e provavelmente falhará.</string>\n  <string name=\"import_\">Importar</string>\n  <string name=\"import_patches\">Importar patches</string>\n  <string name=\"file_field_set\">Selecionado</string>\n  <string name=\"file_field_not_set\">Não selecionado</string>\n  <string name=\"field_not_set\">Não definido</string>\n  <string name=\"patches_missing\">Faltando</string>\n  <string name=\"patches_error\">Erro</string>\n  <string name=\"patches_error_description\">Os patches não puderam ser carregados. Clique para ver o erro</string>\n  <string name=\"patches_not_downloaded\">Os patches não foram baixados.</string>\n  <string name=\"patches_name_default\">Patches</string>\n  <string name=\"patches_name_fallback\">Sem nome</string>\n  <string name=\"android_11_bug_dialog_title\">Bug do Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">A permissão de instalação do aplicativo deve ser concedida antecipadamente para evitar um bug no sistema Android 11 que afetará negativamente a experiência do usuário.</string>\n  <string name=\"no_network_toast\">Nenhuma conexão de internet disponível</string>\n  <string name=\"selected_app_meta_any_version\">Qualquer versão disponível</string>\n  <string name=\"app_source_dialog_title\">Selecionar origem</string>\n  <string name=\"app_source_dialog_option_auto\">Automático</string>\n  <string name=\"app_source_dialog_option_auto_description\">Usar aplicativo instalado, depois APK baixado, depois baixadores disponíveis</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Nenhum aplicativo ou baixador compatível disponível</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Aplicativos montados não podem ser corrigidos novamente sem acesso root</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">A versão %s não corresponde à versão sugerida</string>\n  <string name=\"patch_item_description\">Iniciar aplicação de patches no aplicativo</string>\n  <string name=\"patch_selector_item\">Selecionar patches</string>\n  <string name=\"patch_selector_item_description\">%d patches selecionados</string>\n  <string name=\"patch_selection_changed_warning\">A seleção de patches foi alterada</string>\n  <string name=\"no_patches_selected\">Nenhum patch selecionado</string>\n  <string name=\"network_unavailable_warning\">Seu dispositivo não está conectado à internet. O download falhará mais tarde.</string>\n  <string name=\"network_metered_warning\">Você está atualmente em uma conexão limitada. Podem ser aplicadas tarifas de dados da sua provedora de serviços.</string>\n  <string name=\"apk_source_selector_item\">Selecionar fonte do APK</string>\n  <string name=\"apk_source_auto\">Automático</string>\n  <string name=\"apk_source_auto_installed\">Automático · Usando APK instalado</string>\n  <string name=\"apk_source_auto_downloaded\">Automático · Usando APK baixado</string>\n  <string name=\"apk_source_auto_downloader\">Automático · Usando baixadores disponíveis</string>\n  <string name=\"apk_source_auto_storage\">Automático · Selecionar do armazenamento</string>\n  <string name=\"apk_source_downloader\">Usando %s</string>\n  <string name=\"apk_source_installed\">Usando APK instalado</string>\n  <string name=\"apk_source_local\">Usando um arquivo APK local</string>\n  <string name=\"apk_source_downloaded\">Já baixado</string>\n  <string name=\"legacy_import_failed\">Não foi possível importar configurações legadas</string>\n  <string name=\"auto_updates_dialog_title\">Configurar atualizações</string>\n  <string name=\"auto_updates_dialog_description\">Você deseja que o ReVanced Manager verifique periodicamente por atualizações para os seguintes componentes?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Patches do ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Baixadores</string>\n  <string name=\"auto_updates_dialog_note\">Essas configurações podem ser alteradas mais tarde.\n\n    O ReVanced Manager irá se conectar a %s para baixar as versões iniciais se o seu dispositivo estiver conectado à internet.</string>\n  <string name=\"announcements_filter_tag\">Filtrar por tag</string>\n  <string name=\"announcements_show_archived\">Mostrar arquivados</string>\n  <string name=\"general\">Geral</string>\n  <string name=\"general_description\">Idioma, tema, cor dinâmica</string>\n  <string name=\"updates\">Atualizações</string>\n  <string name=\"updates_description\">Verificar atualizações e ver registro de alterações</string>\n  <string name=\"downloads\">Downloads</string>\n  <string name=\"downloads_description\">Baixadores e aplicativos baixados</string>\n  <string name=\"import_export\">Importar &amp; exportar</string>\n  <string name=\"import_export_description\">Keystore, opções de patch e seleção</string>\n  <string name=\"advanced\">Avançado</string>\n  <string name=\"advanced_description\">URL da API, limite de memória, depuração</string>\n  <string name=\"safeguards_toggled_warning\">As salvaguardas foram alternadas</string>\n  <string name=\"about\">Sobre</string>\n  <string name=\"about_app_name\">Sobre %1$s</string>\n  <string name=\"opensource_licenses\">Licenças de código aberto</string>\n  <string name=\"opensource_licenses_description\">Visualizar todas as bibliotecas usadas para criar este aplicativo</string>\n  <string name=\"contributors\">Contribuidores</string>\n  <string name=\"contributors_description\">Visualizar os contribuidores do ReVanced</string>\n  <string name=\"dynamic_color\">Cor dinâmica</string>\n  <string name=\"dynamic_color_description\">Adaptar cores ao papel de parede</string>\n  <string name=\"pure_black_theme\">Tema preto puro</string>\n  <string name=\"pure_black_theme_description\">Usar fundos pretos puros para o tema escuro</string>\n  <string name=\"theme\">Tema</string>\n  <string name=\"theme_description\">Escolher entre tema claro ou escuro</string>\n  <string name=\"language\">Idioma</string>\n  <string name=\"language_description\">Escolher o idioma de exibição do aplicativo</string>\n  <string name=\"language_system_default\">Padrão do sistema</string>\n  <string name=\"search_languages\">Pesquisar idiomas…</string>\n  <string name=\"safeguards\">Salvaguardas</string>\n  <string name=\"patch_compat_check\">Desativar verificação de compatibilidade de versão</string>\n  <string name=\"patch_compat_check_description\">Não restringir patches a versões de aplicativos compatíveis</string>\n  <string name=\"patch_compat_check_confirmation\">Selecionar patches incompatíveis pode resultar em um aplicativo quebrado.\\n\\nDeseja continuar mesmo assim?</string>\n  <string name=\"suggested_version_safeguard\">Exigir versão de aplicativo sugerida</string>\n  <string name=\"suggested_version_safeguard_description\">Impor a seleção da versão de aplicativo sugerida</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Selecionar um aplicativo que não seja a versão sugerida pode causar problemas inesperados.\\n\\nDeseja continuar mesmo assim?</string>\n  <string name=\"patch_selection_safeguard\">Permitir alterar seleção e opções de patch</string>\n  <string name=\"patch_selection_safeguard_description\">Não impedir a seleção ou desselesão de patches e a personalização de opções</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Alterar a seleção de patches pode causar problemas inesperados.\\n\\nHabilitar mesmo assim?</string>\n  <string name=\"universal_patches_safeguard\">Permitir o uso de patches universais</string>\n  <string name=\"universal_patches_safeguard_description\">Não impedir o uso de patches universais</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Patches universais não são tão bem testados quanto aqueles que visam aplicativos específicos.\\n\\nHabilitar mesmo assim?</string>\n  <string name=\"keystore\">Keystore</string>\n  <string name=\"patches_selections\">Seleções de patches</string>\n  <string name=\"import_keystore\">Importar keystore</string>\n  <string name=\"import_keystore_description\">Importar um keystore personalizado</string>\n  <string name=\"import_keystore_dialog_title\">Inserir credenciais do keystore</string>\n  <string name=\"import_keystore_dialog_description\">Você precisará inserir as credenciais do keystore para importá-lo.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Nome de usuário (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Senha</string>\n  <string name=\"import_keystore_dialog_button\">Importar</string>\n  <string name=\"import_keystore_wrong_credentials\">Credenciais do keystore incorretas</string>\n  <string name=\"import_keystore_success\">Keystore importado</string>\n  <string name=\"export_keystore\">Exportar keystore</string>\n  <string name=\"export_keystore_description\">Exportar o keystore atual</string>\n  <string name=\"export_keystore_unavailable\">Nenhum keystore para exportar</string>\n  <string name=\"export_keystore_success\">Keystore exportado</string>\n  <string name=\"regenerate_keystore\">Regenerar keystore</string>\n  <string name=\"regenerate_keystore_description\">Gerar um novo keystore</string>\n  <string name=\"regenerate_keystore_dialog_description\">Você está prestes a regenerar seu keystore que o gerenciador usará durante o processo de aplicação de patches.\\n\\nVocê não poderá atualizar os aplicativos instalados anteriormente a partir desta origem.</string>\n  <string name=\"regenerate_keystore_success\">O keystore foi substituído com sucesso</string>\n  <string name=\"import_patch_selection\">Importar seleção de patch</string>\n  <string name=\"import_patch_selection_description\">Importar seleção de patch de um arquivo JSON</string>\n  <string name=\"import_patch_selection_fail\">Não foi possível importar a seleção de patch: %s</string>\n  <string name=\"import_patch_selection_success\">Seleção de patch importada</string>\n  <string name=\"select_bundle_for_import\">Selecionar pacote para importar</string>\n  <string name=\"export_patch_selection\">Exportar seleção de patch</string>\n  <string name=\"export_patch_selection_description\">Exportar seleção de patch para um arquivo JSON</string>\n  <string name=\"export_patch_selection_fail\">Não foi possível exportar a seleção de patch: %s</string>\n  <string name=\"export_patch_selection_success\">Seleção de patch exportada</string>\n  <string name=\"select_bundle_for_export\">Selecionar pacote para exportar</string>\n  <string name=\"patch_selection_packages\">Aplicativos com seleções salvas</string>\n  <string name=\"patch_selection_entries\">Total de patches selecionados</string>\n  <string name=\"reset_configuration\">Redefinir configuração</string>\n  <string name=\"reset_patch_selection\">Seleções de patches</string>\n  <string name=\"reset_patch_selection_description\">Redefinir a seleção de patch armazenada</string>\n  <string name=\"reset_patch_options\">Opções de patch</string>\n  <string name=\"reset_patch_options_description\">Redefinir as opções de patch armazenadas</string>\n  <string name=\"reset_patch_selection_success\">A seleção de patch foi redefinida</string>\n  <string name=\"patch_selection_reset_all\">Redefinir seleção de patch globalmente</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Você está prestes a redefinir todas as seleções de patch. Você precisará selecionar manualmente cada patch novamente.</string>\n  <string name=\"patch_selection_reset_all_description\">Redefine todas as seleções de patch</string>\n  <string name=\"patch_selection_reset_package\">Redefinir seleção de patch para aplicativo</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Você está prestes a redefinir a seleção de patch para o aplicativo \\\"%s\\\". Você terá que selecionar manualmente cada patch novamente.</string>\n  <string name=\"patch_selection_reset_package_description\">Redefine a seleção de patches para um único aplicativo</string>\n  <string name=\"patch_selection_reset_patches\">Redefinir seleção de patches (único)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Você está prestes a redefinir a seleção de patches para \\\"%s\\\". Você terá que selecionar manualmente cada patch novamente.</string>\n  <string name=\"patch_selection_reset_patches_description\">Redefine a seleção de patches para uma coleção específica de patches</string>\n  <string name=\"patch_options_reset_package\">Redefinir opções de patches para o aplicativo</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Você está prestes a redefinir as opções de patches para o aplicativo \\\"%s\\\". Você terá que reaplicar cada opção novamente.</string>\n  <string name=\"patch_options_reset_package_description\">Redefine as opções de patches para um único aplicativo</string>\n  <string name=\"patch_options_reset_patches\">Redefinir opções de patches (único)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Você está prestes a redefinir as opções de patches para \\\"%s\\\". Você terá que reaplicar cada opção novamente.</string>\n  <string name=\"patch_options_reset_patches_description\">Redefine as opções de patches para uma coleção específica de patches</string>\n  <string name=\"patch_options_reset_all\">Redefinir opções de patches globalmente</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Você está prestes a redefinir todas as opções de patches. Você terá que reaplicar cada opção novamente.</string>\n  <string name=\"patch_options_reset_all_description\">Redefine todas as opções de patches</string>\n  <string name=\"downloaders\">Baixadores</string>\n  <string name=\"downloader_prereleases\">Usar pré-lançamentos</string>\n  <string name=\"downloader_prereleases_description\">Usar versões de pré-lançamento do baixador principal</string>\n  <string name=\"downloader_state_loaded\">Carregado</string>\n  <string name=\"downloader_state_failed\">Falha ao carregar. Clique para mais detalhes</string>\n  <string name=\"downloader_state_missing\">Ausente</string>\n  <string name=\"downloader_delete_apps_title\">Excluir aplicativos selecionados</string>\n  <string name=\"downloader_delete_apps_description\">Tem certeza de que deseja excluir os aplicativos selecionados?</string>\n  <string name=\"downloader_delete_single_description\">Tem certeza de que deseja excluir \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Nenhum aplicativo baixado encontrado.</string>\n  <string name=\"downloader_settings_no_apps_description\">Aplicativos baixados através do ReVanced Manager aparecerão aqui.</string>\n  <string name=\"downloader_url\">URL do Downloader</string>\n  <string name=\"downloader_add\">Adicionar Downloader</string>\n  <string name=\"select_downloader_type_dialog_description\">Adicionar novos downloaders de URL ou arquivos locais</string>\n  <string name=\"local_downloaders_description\">Adicionar downloaders do armazenamento local.</string>\n  <string name=\"remote_downloaders_description\">Adicionar downloaders da URL. Pode ser atualizado automaticamente.</string>\n  <string name=\"install_revanced_downloaders\">Instale downloaders para obter aplicativos diretamente no ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Instalar Downloaders do ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Cancelar instalação de downloaders?</string>\n  <string name=\"cancel_downloader_install_description\">Uma instalação de downloaders está em andamento. Se você sair agora, o download será cancelado.</string>\n  <string name=\"downloader_sources_unavailable_title\">Estes downloaders estão ausentes</string>\n  <string name=\"downloader_sources_unavailable_description\">Clique no botão de atualização para corrigir.</string>\n  <string name=\"downloader_update_failed\">Falha ao atualizar downloader: %s</string>\n  <string name=\"downloader_replace_fail\">Falha ao importar downloader: %s</string>\n  <string name=\"search_apps\">Pesquisar aplicativos…</string>\n  <string name=\"loading_body\">Carregando…</string>\n  <string name=\"downloading_patches\">Baixando patches…</string>\n  <string name=\"options\">Opções</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Sim</string>\n  <string name=\"no\">Não</string>\n  <string name=\"edit\">Editar</string>\n  <string name=\"dialog_input_placeholder\">Valor</string>\n  <string name=\"reset\">Redefinir</string>\n  <string name=\"share\">Compartilhar</string>\n  <string name=\"patch\">Patch</string>\n  <string name=\"select_from_storage\">Selecionar do armazenamento</string>\n  <string name=\"select_from_storage_description\">Selecionar um arquivo APK do armazenamento usando o seletor de arquivos</string>\n  <string name=\"suggested_version_info\">Versão sugerida: %s</string>\n  <string name=\"type_anything\">Digite algo para continuar</string>\n  <string name=\"search\">Pesquisar patches…</string>\n  <string name=\"apply\">Aplicar</string>\n  <string name=\"help\">Ajuda</string>\n  <string name=\"back\">Voltar</string>\n  <string name=\"warning\">Atenção</string>\n  <string name=\"add\">Adicionar</string>\n  <string name=\"enable\">Habilitar</string>\n  <string name=\"disable\">Desativar</string>\n  <string name=\"close\">Fechar</string>\n  <string name=\"clear\">Limpar</string>\n  <string name=\"system\">Sistema</string>\n  <string name=\"light\">Claro</string>\n  <string name=\"dark\">Escuro</string>\n  <string name=\"appearance\">Aparência</string>\n  <string name=\"networking\">Rede</string>\n  <string name=\"allow_metered_networks\">Permitir redes limitadas</string>\n  <string name=\"allow_metered_networks_description\">Permite atualizações automáticas em redes limitadas.\\n    O aplicativo ainda pode avisar sobre redes limitadas para operações manuais.</string>\n  <string name=\"downloaded_apps\">Aplicativos baixados</string>\n  <string name=\"process_runtime\">Executar Patcher em outro processo (experimental)</string>\n  <string name=\"process_runtime_description\">Isso é mais rápido e permite que o Patcher use mais memória</string>\n  <string name=\"process_runtime_memory_limit\">Limite de memória do processo Patcher</string>\n  <string name=\"process_runtime_memory_limit_description\">A quantidade máxima de memória que o processo do Patcher pode usar</string>\n  <string name=\"debug_logs_export\">Exportar logs de depuração</string>\n  <string name=\"debug_logs_export_read_failed\">Falha ao ler logs (código de saída %d)</string>\n  <string name=\"debug_logs_export_failed\">Falha ao exportar logs</string>\n  <string name=\"debug_logs_export_success\">Logs exportados</string>\n  <string name=\"api_url\">URL da API</string>\n  <string name=\"api_url_description\">A API usada para baixar arquivos necessários</string>\n  <string name=\"api_url_dialog_title\">Alterar URL da API</string>\n  <string name=\"api_url_dialog_description\">Alterar a URL da API do ReVanced Manager. O ReVanced Manager usa a API para baixar patches e atualizações.</string>\n  <string name=\"api_url_dialog_warning\">O ReVanced Manager se conecta à API para baixar patches e atualizações. Certifique-se de que você confia nele.</string>\n  <string name=\"api_url_dialog_save\">Definir</string>\n  <string name=\"api_url_dialog_reset\">Redefinir URL da API</string>\n  <string name=\"device\">Dispositivo</string>\n  <string name=\"device_android_version\">Versão do Android</string>\n  <string name=\"device_model\">Modelo</string>\n  <string name=\"device_architectures\">Arquiteturas de CPU</string>\n  <string name=\"device_memory_limit\">Limites de memória</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normal) - %2$dMB (Grande)</string>\n  <string name=\"patches_force_download\">Forçar o download de todos os patches</string>\n  <string name=\"patches_reset\">Redefinir patches</string>\n  <string name=\"reset_onboarding\">Redefinir onboarding</string>\n  <string name=\"reset_onboarding_description\">Mostrar a tela de onboarding no próximo lançamento do aplicativo</string>\n  <string name=\"patching\">Aplicando patch</string>\n  <string name=\"signing\">Assinando</string>\n  <string name=\"storage\">Armazenamento</string>\n  <string name=\"no_patch_found\">Nenhum patch pode ser encontrado. Verifique seus patches</string>\n  <string name=\"tab_apps\">Aplicativos</string>\n  <string name=\"tab_patches\">Patches</string>\n  <string name=\"delete\">Excluir</string>\n  <string name=\"refresh\">Atualizar</string>\n  <string name=\"continue_anyways\">Continuar mesmo assim</string>\n  <string name=\"download_another_version\">Baixar outra versão</string>\n  <string name=\"download_app\">Baixar aplicativo</string>\n  <string name=\"download_apk\">Baixar arquivo APK</string>\n  <string name=\"patches_download_fail\">Falha ao baixar patches: %s</string>\n  <string name=\"api_not_working_title\">O serviço da API está inativo no momento</string>\n  <string name=\"api_not_working_description\">Alguns recursos podem ser afetados. Verifique sua conexão ou o URL da API nas configurações.</string>\n  <string name=\"patches_replace_fail\">Falha ao importar patches: %s</string>\n  <string name=\"no_patched_apps_found\">Nenhum aplicativo com patch encontrado</string>\n  <string name=\"no_patched_apps_description\">Atualmente você não tem nenhum aplicativo com patch que conheçamos. Mude isso aplicando o patch no seu primeiro aplicativo!</string>\n  <string name=\"patched_apps_section_title\">Aplicativos corrigidos</string>\n  <string name=\"patchable_apps_section_title\">Aplicativos que podem ser corrigidos</string>\n  <string name=\"no_patches_found\">Nenhum patch encontrado</string>\n  <string name=\"no_patches_description\">Você ainda não tem nenhum patch. Adicione patches tocando no botão abaixo!</string>\n  <string name=\"tap_on_patches\">Toque nos patches para obter mais informações sobre eles</string>\n  <string name=\"patches_selected\">%s selecionado</string>\n  <string name=\"incompatible_patches\">Patches incompatíveis</string>\n  <string name=\"universal_patches\">Patches universais</string>\n  <string name=\"patch_selection_reset_toast\">A seleção e as opções de patches foram redefinidas para os padrões recomendados</string>\n  <string name=\"patch_options_reset_toast\">As opções de patches foram redefinidas</string>\n  <string name=\"non_suggested_version_warning_title\">Versão não sugerida</string>\n  <string name=\"non_suggested_version_warning_description\">A versão do aplicativo que você selecionou não corresponde à versão sugerida.\\nUse a versão sugerida: %s\\n\\nPara continuar mesmo assim, desative \\\"Exigir versão de aplicativo sugerida\\\" nas configurações avançadas.</string>\n  <string name=\"selection_warning_title\">Parar de usar os padrões?</string>\n  <string name=\"selection_warning_description\">É recomendado usar a seleção e as opções de patches padrão. Alterá-las pode resultar em problemas inesperados.\\n\\nVocê precisa ativar \\\"Permitir alteração de seleção e opções de patches\\\" nas configurações avançadas antes de alternar os patches.</string>\n  <string name=\"universal_patch_warning_description\">Patches universais têm um uso mais generalizado e não funcionam de forma tão confiável quanto patches que visam aplicativos específicos. Você pode encontrar problemas ao usá-los.\\n\\nVocê precisa ativar \\\"Permitir o uso de patches universais\\\" nas configurações avançadas antes de usar patches universais.</string>\n  <string name=\"this_version\">Esta versão</string>\n  <string name=\"universal\">Qualquer aplicativo</string>\n  <string name=\"search_patches\">Pesquisar patches</string>\n  <string name=\"app_version_not_compatible\">Este patch não é compatível com a versão de aplicativo selecionada (%1$s)\\n\\nÉ compatível apenas com a(s) seguinte(s) versão(ões): %2$s</string>\n  <string name=\"continue_with_version\">Continuar com esta versão?</string>\n  <string name=\"version_not_compatible\">Nem todos os patches são compatíveis com esta versão (%s). Você deseja continuar mesmo assim?</string>\n  <string name=\"download_application\">Baixar aplicativo?</string>\n  <string name=\"app_not_installed\">O aplicativo que você selecionou não está instalado. Deseja baixá-lo?</string>\n  <string name=\"failed_to_load_apk\">Falha ao carregar APK</string>\n  <string name=\"split_apk_not_supported\">APKs divididos não podem ser corrigidos</string>\n  <string name=\"loading\">Carregando…</string>\n  <string name=\"not_installed\">Não instalado</string>\n  <string name=\"installed\">Instalado</string>\n  <string name=\"app_info\">Informações do aplicativo</string>\n  <string name=\"uninstall\">Desinstalar</string>\n  <string name=\"unpatch\">Remover patch</string>\n  <string name=\"repatch\">Reaplicar patch</string>\n  <string name=\"install_type\">Tipo de instalação</string>\n  <string name=\"package_name\">Nome do pacote</string>\n  <string name=\"original_package_name\">Nome do pacote original</string>\n  <string name=\"applied_patches\">Patches aplicados</string>\n  <string name=\"view_applied_patches\">Ver patches aplicados</string>\n  <string name=\"default_install\">Padrão</string>\n  <string name=\"mount_install\">Montar</string>\n  <string name=\"mounted\">Montado</string>\n  <string name=\"not_mounted\">Não montado</string>\n  <string name=\"mount\">Montar</string>\n  <string name=\"unmount\">Desmontar</string>\n  <string name=\"failed_to_mount\">Falha ao montar: %s</string>\n  <string name=\"failed_to_unmount\">Falha ao desmontar: %s</string>\n  <string name=\"unpatch_app\">Remover patch do aplicativo?</string>\n  <string name=\"unpatch_description\">Tem certeza que deseja remover o patch deste aplicativo?</string>\n  <string name=\"downloader_invalid_version\">O downloader não buscou a versão correta</string>\n  <string name=\"downloader_app_not_found\">O downloader não encontrou o aplicativo</string>\n  <string name=\"downloader_error\">Erro do downloader: %s</string>\n  <string name=\"no_downloaders_installed\">Nenhum downloader de aplicativo está instalado!</string>\n  <string name=\"no_downloaders_trusted\">Nenhum downloader de aplicativo foi confiável! Verifique suas configurações.</string>\n  <string name=\"already_patched\">Já corrigido</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filtro</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Compatibilidade</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Pacotes</string>\n  <string name=\"patch_selector_sheet_actions_title\">Ações</string>\n  <string name=\"restore_default_selection\">Restaurar seleção padrão</string>\n  <string name=\"deselect_all\">Desmarcar tudo</string>\n  <string name=\"invert_selection\">Inverter seleção</string>\n  <string name=\"deselect_all_except\">Desmarcar tudo, exceto %s</string>\n  <string name=\"scope_dialog_title\">Aplicar a</string>\n  <string name=\"scope_all_patches\">Todas as atualizações</string>\n  <string name=\"scope_bundle_patches\">Somente %s</string>\n  <string name=\"string_option_menu_description\">Mais opções</string>\n  <string name=\"option_preset_custom_value\">Valor personalizado</string>\n  <string name=\"path_selector\">Selecionar do armazenamento</string>\n  <string name=\"path_selector_parent_dir\">Diretório anterior</string>\n  <string name=\"path_selector_dirs\">Diretórios</string>\n  <string name=\"path_selector_files\">Arquivos</string>\n  <string name=\"show_password_field\">Mostrar senha</string>\n  <string name=\"hide_password_field\">Ocultar senha</string>\n  <string name=\"installer\">Instalador</string>\n  <string name=\"install_app\">Instalar</string>\n  <string name=\"install_app_success\">Aplicativo instalado</string>\n  <string name=\"install_app_fail\">Falha ao instalar o aplicativo: %s</string>\n  <string name=\"reinstall_app_fail\">Falha ao reinstalar o aplicativo: %s</string>\n  <string name=\"uninstall_app_fail\">Falha ao desinstalar o aplicativo: %s</string>\n  <string name=\"open_app\">Abrir</string>\n  <string name=\"save_apk\">Salvar APK</string>\n  <string name=\"save_apk_success\">APK Salvo</string>\n  <string name=\"sign_fail\">Falha ao assinar APK: %s</string>\n  <string name=\"save_logs\">Salvar registros</string>\n  <string name=\"save_as_file\">Salvar em arquivos</string>\n  <string name=\"export_patcher_logs\">Exportar logs do patcher</string>\n  <string name=\"save_logs_success\">Logs salvos</string>\n  <string name=\"downloader_activity_dialog_body\">É necessária a interação do usuário para prosseguir com este baixador.</string>\n  <string name=\"select_install_type\">Selecionar tipo de instalação</string>\n  <string name=\"patcher_step_group_preparing\">Preparando</string>\n  <string name=\"patcher_step_load_patches\">Carregar patches</string>\n  <string name=\"patcher_step_unpack\">Preparar o patcher</string>\n  <string name=\"patcher_step_group_patching\">Aplicando patches</string>\n  <string name=\"patcher_step_group_saving\">Salvando</string>\n  <string name=\"patcher_step_write_patched\">Gravar arquivo APK corrigido</string>\n  <string name=\"patcher_step_sign_apk\">Assinar arquivo APK corrigido</string>\n  <string name=\"patcher_notification_title\">Aplicação de patches em andamento…</string>\n  <string name=\"patcher_notification_text\">Toque para voltar ao patcher</string>\n  <string name=\"patcher_stop_confirm_title\">Parar patcher</string>\n  <string name=\"patcher_stop_confirm_description\">Tem certeza que deseja parar o processo de aplicação de patches?</string>\n  <string name=\"patcher_install_in_progress\">A instalação está em andamento. Por favor, aguarde</string>\n  <string name=\"execute_patches\">Executar patches</string>\n  <string name=\"executing_patch\">Executar %s</string>\n  <string name=\"failed_to_execute_patch\">Falha ao executar %s</string>\n  <string name=\"step_completed\">concluído</string>\n  <string name=\"step_failed\">falhou</string>\n  <string name=\"step_running\">executando</string>\n  <string name=\"step_waiting\">aguardando</string>\n  <string name=\"expand_content\">expandir</string>\n  <string name=\"collapse_content\">recolher</string>\n  <string name=\"drag_handle\">reordenar</string>\n  <string name=\"more\">Mais</string>\n  <string name=\"less\">Menos</string>\n  <string name=\"continue_\">Continuar</string>\n  <string name=\"dismiss\">Dispensar</string>\n  <string name=\"view_announcement\">Ver anúncio</string>\n  <string name=\"permanent_dismiss\">Não exibir isso novamente</string>\n  <string name=\"donate\">Doar</string>\n  <string name=\"website\">Site</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Contato</string>\n  <string name=\"license\">Licença</string>\n  <string name=\"source\">Fonte</string>\n  <string name=\"repository\">Repositório</string>\n  <string name=\"bundle_information_by_author\">Por %1$s</string>\n  <string name=\"version\">Versão</string>\n  <string name=\"version_compatibility_warning\">A versão selecionada pode ser incompatível com os patches selecionados</string>\n  <string name=\"submit_feedback\">Enviar problema ou feedback</string>\n  <string name=\"submit_feedback_description\">Ajude-nos a melhorar este aplicativo</string>\n  <string name=\"developer_options\">Opções do desenvolvedor</string>\n  <string name=\"developer_options_description\">Opções para depurar problemas</string>\n  <string name=\"patches_update_success\">Atualização bem-sucedida</string>\n  <string name=\"patches_update_unavailable\">Nenhuma atualização disponível</string>\n  <string name=\"view_patches\">Ver patches</string>\n  <string name=\"patches_view_any_version\">Qualquer versão</string>\n  <string name=\"patches_view_any_package\">Qualquer pacote</string>\n  <string name=\"patches_delete_single_dialog_description\">Tem certeza de que deseja excluir \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Tem certeza de que deseja excluir os patches selecionados?</string>\n  <string name=\"announcements\">Anúncios</string>\n  <string name=\"archive\">Arquivo</string>\n  <string name=\"about_revanced_manager\">Sobre ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager é um aplicativo Android que usa o ReVanced Patcher para aplicar patches em aplicativos Android. Ele permite baixar e aplicar patches em aplicativos com patches personalizados e gerenciar o processo de aplicação de patches.</string>\n  <string name=\"developer_options_taps\">%d toques restantes</string>\n  <string name=\"developer_options_enabled\">Opções do desenvolvedor ativadas</string>\n  <string name=\"developer_options_already_enabled\">As opções do desenvolvedor já estão ativadas</string>\n  <string name=\"update_available\">Uma atualização está disponível</string>\n  <string name=\"current_version\">Versão atual: %s</string>\n  <string name=\"new_version\">Nova versão: %s</string>\n  <string name=\"ready_to_install_update\">Pronto para instalar a atualização</string>\n  <string name=\"update_completed\">Atualização instalada</string>\n  <string name=\"install_update_manager_failed\">Falha ao instalar a atualização</string>\n  <string name=\"manual_update_check\">Verificar atualizações</string>\n  <string name=\"view_update\">Ver atualização</string>\n  <string name=\"manual_update_check_description\">Verificar atualizações manualmente</string>\n  <string name=\"update_checking_manager\">Verificar atualizações ao iniciar</string>\n  <string name=\"update_checking_manager_description\">Verificar novas versões do ReVanced Manager quando o aplicativo iniciar</string>\n  <string name=\"update_checking_downloader\">Verificar atualizações dos Downloaders do ReVanced no lançamento</string>\n  <string name=\"update_checking_downloader_description\">Verificar atualizações dos Downloaders do ReVanced instalados quando o aplicativo iniciar</string>\n  <string name=\"manager_prereleases\">Usar pré-lançamentos</string>\n  <string name=\"manager_prereleases_description\">Usar versões de pré-lançamento do ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Versões de pré-lançamento podem ser instáveis e conter bugs. Você pode experimentar falhas, perda de dados ou outros problemas inesperados. Habilite isso apenas se você se sentir confortável com esses riscos.</string>\n  <string name=\"changelog\">Ver registro de alterações</string>\n  <string name=\"changelog_loading\">Carregando registro de alterações</string>\n  <string name=\"changelog_download_fail\">Falha ao baixar registro de alterações: %s</string>\n  <string name=\"changelog_description\">Confira as últimas alterações nesta atualização</string>\n  <string name=\"battery_optimization_notification\">As otimizações de bateria devem ser desativadas para que o ReVanced Manager funcione corretamente em segundo plano. Clique aqui para desativar as otimizações.</string>\n  <string name=\"installing_manager_update\">Instalando atualização…</string>\n  <string name=\"downloading_manager_update\">Baixando atualização…</string>\n  <string name=\"download_manager_failed\">Falha ao baixar atualização: %s</string>\n  <string name=\"cancel\">Cancelar</string>\n  <string name=\"save\">Salvar</string>\n  <string name=\"save_with_count\">Salvar (%1$s)</string>\n  <string name=\"update\">Atualizar</string>\n  <string name=\"empty\">Vazio</string>\n  <string name=\"installing_message\">Toque em <b>Atualizar</b> quando solicitado.\nReVanced Manager será fechado durante a atualização.</string>\n  <string name=\"no_changelogs_found\">Nenhum registro de alterações encontrado</string>\n  <string name=\"just_now\">Agora mesmo</string>\n  <string name=\"minutes_ago\">Há %sm</string>\n  <string name=\"hours_ago\">Há %sh</string>\n  <string name=\"days_ago\">Há %sd</string>\n  <string name=\"invalid_date\">Data inválida</string>\n  <string name=\"disable_battery_optimization\">Desativar otimização de bateria</string>\n  <string name=\"input_dialog_value_invalid\">Valor inválido</string>\n  <string name=\"option_required\">Esta opção é obrigatória</string>\n  <string name=\"required_options_screen\">Opções obrigatórias</string>\n  <string name=\"failed_to_check_updates\">Falha ao verificar atualizações: %s</string>\n  <string name=\"no_update_available\">Nenhuma atualização disponível</string>\n  <string name=\"no_announcements_found\">Nenhum anúncio encontrado</string>\n  <string name=\"update_check\">Verificando atualizações…</string>\n  <string name=\"dismiss_temporary\">Agora não</string>\n  <string name=\"update_available_dialog_description\">Uma nova versão do ReVanced Manager (%s) está disponível.</string>\n  <string name=\"failed_to_download_update\">Falha ao baixar atualização: %s</string>\n  <string name=\"download\">Baixar</string>\n  <string name=\"download_confirmation_metered\">Você está atualmente em uma conexão limitada e podem ser aplicadas taxas de dados da sua operadora.\n\nDeseja continuar mesmo assim?</string>\n  <string name=\"download_update_confirmation\">Baixar atualização?</string>\n  <string name=\"no_contributors_found\">Nenhum colaborador encontrado</string>\n  <string name=\"select\">Selecionar</string>\n  <string name=\"select_deselect_all\">Selecionar ou desmarcar todos</string>\n  <string name=\"select_patches_type_dialog_description\">Adicionar novos patches de URL ou arquivos locais</string>\n  <string name=\"local_patches_description\">Adicionar patches do armazenamento local.</string>\n  <string name=\"remote_patches_description\">Adicionar patches de URL. Os patches podem ser atualizados automaticamente.</string>\n  <string name=\"recommended\">Recomendado</string>\n  <string name=\"installation_failed_dialog_title\">Instalação falhou</string>\n  <string name=\"installation_cancelled_dialog_title\">Instalação cancelada</string>\n  <string name=\"installation_blocked_dialog_title\">Instalação bloqueada</string>\n  <string name=\"installation_conflict_dialog_title\">Conflito de instalação</string>\n  <string name=\"installation_incompatible_dialog_title\">Instalação incompatível</string>\n  <string name=\"installation_invalid_dialog_title\">Instalação inválida</string>\n  <string name=\"installation_storage_issue_dialog_title\">Armazenamento insuficiente</string>\n  <string name=\"installation_timeout_dialog_title\">Instalação excedeu o tempo limite</string>\n  <string name=\"installation_failed_description\">A instalação falhou devido a um motivo desconhecido. Tentar novamente?</string>\n  <string name=\"installation_aborted_description\">A instalação foi cancelada manualmente. Tentar novamente?</string>\n  <string name=\"installation_blocked_description\">A instalação foi bloqueada. Revise as configurações de segurança do seu dispositivo e tente novamente.</string>\n  <string name=\"installation_conflict_description\">A instalação foi impedida por uma instalação existente do aplicativo. Desinstalar o aplicativo instalado e tentar novamente?</string>\n  <string name=\"installation_incompatible_description\">O aplicativo é incompatível com este dispositivo. Use um APK que seja compatível com este dispositivo e tente novamente.</string>\n  <string name=\"installation_invalid_description\">O aplicativo é inválido. Desinstalar o aplicativo e tentar novamente?</string>\n  <string name=\"installation_storage_issue_description\">O aplicativo não pôde ser instalado devido a armazenamento insuficiente. Libere algum espaço e tente novamente.</string>\n  <string name=\"installation_timeout_description\">A instalação demorou muito. Tentar novamente?</string>\n  <string name=\"reinstall\">Reinstalar</string>\n  <string name=\"show\">Mostrar</string>\n  <string name=\"debugging\">Depuração</string>\n  <string name=\"about_device\">Sobre o dispositivo</string>\n  <string name=\"enter_url\">Inserir URL</string>\n  <string name=\"next\">Próximo</string>\n  <string name=\"auto_update\">Atualização automática</string>\n  <string name=\"add_patches\">Adicionar patches</string>\n  <string name=\"auto_update_description\">Atualizar automaticamente quando uma nova versão estiver disponível</string>\n  <string name=\"patches_prereleases\">Usar pré-lançamentos</string>\n  <string name=\"patches_prereleases_description\">Usar versões de pré-lançamento de %s</string>\n  <string name=\"patches_url\">URL dos patches</string>\n  <string name=\"incompatible_patches_dialog\">Estes patches não são compatíveis com a versão de aplicativo selecionada (%1$s).\n\nClique nos patches para ver mais detalhes.</string>\n  <string name=\"incompatible_patch\">Patch incompatível</string>\n  <string name=\"any_version\">Qualquer</string>\n  <string name=\"never_show_again\">Nunca mais mostrar</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Mostrar mensagem de atualização ao iniciar</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Mostrar uma notificação pop-up sempre que uma nova atualização estiver disponível ao iniciar</string>\n  <string name=\"failed_to_import_keystore\">Falha ao importar armazenamento de chaves</string>\n  <string name=\"export\">Exportar</string>\n  <string name=\"confirm\">Confirmar</string>\n  <string name=\"new_announcement\">Novo anúncio:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d correção</item>\n    <item quantity=\"other\">%d correções</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Executar %d correção</item>\n    <item quantity=\"other\">Executar %d correções</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d selecionado</item>\n    <item quantity=\"other\">%d selecionados</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-pt-rPT/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Patcher</string>\n  <string name=\"patches\">Patches</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Gerenciador</string>\n  <string name=\"onboarding_welcome_to\">Bem-vindo ao</string>\n  <string name=\"onboarding_welcome_back\">Olá! É o novo ReVanced Manager</string>\n  <string name=\"onboarding_apps_subtitle\">Você pode selecionar um aplicativo para aplicar o patch agora ou fazer isso mais tarde</string>\n  <string name=\"onboarding_apps_network_error\">Não foi possível carregar patches porque a rede está indisponível ou instável. Conecte-se a uma rede estável e tente novamente.</string>\n  <string name=\"onboarding_updates_subtitle\">Configure as atualizações automáticas para manter o ReVanced Manager e os patches atualizados</string>\n  <string name=\"banner_sources_not_downloaded_description\">Patches e baixadores não puderam ser baixados durante a configuração. Toque em atualizar para baixá-los.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager irá se conectar a %s para baixar as versões iniciais se o seu dispositivo estiver conectado à internet.</string>\n  <string name=\"retry\">Tentar novamente</string>\n  <string name=\"onboarding_skip\">Pular por enquanto</string>\n  <string name=\"onboarding_recommended_version\">Versão recomendada: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Ignorar permissões?</string>\n  <string name=\"onboarding_permissions_skip_description\">Sem as permissões necessárias, alguns recursos podem não funcionar corretamente. Você pode concedê-las mais tarde nas configurações do aplicativo.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Ignorar de qualquer forma</string>\n  <string name=\"onboarding_permissions_subtitle\">O ReVanced Manager precisa de algumas permissões para funcionar corretamente</string>\n  <string name=\"permission_install_apps\">Instalar aplicativos desconhecidos</string>\n  <string name=\"permission_install_apps_description\">Necessário para instalar aplicativos com patches</string>\n  <string name=\"permission_notifications\">Notificações</string>\n  <string name=\"permission_notifications_description\">Permite aplicação de patches ininterrupta em segundo plano</string>\n  <string name=\"permission_battery\">Otimização da bateria</string>\n  <string name=\"permission_battery_description\">Evita que a aplicação de patches seja interrompida em segundo plano</string>\n  <string name=\"permission_grant\">Conceder</string>\n  <string name=\"downloader_host_permission_label\">Host do downloader do ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Usado para controlar o acesso aos downloaders do ReVanced Manager. Apenas o ReVanced Manager tem isso.</string>\n  <string name=\"toast_copied_to_clipboard\">Copiado!</string>\n  <string name=\"copy_to_clipboard\">Copiar para a área de transferência</string>\n  <string name=\"dashboard\">Painel</string>\n  <string name=\"settings\">Configurações</string>\n  <string name=\"select_app\">Selecionar uma aplicação</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d selecionados</string>\n  <string name=\"fab_patch_app\">Aplicar patch em um aplicativo</string>\n  <string name=\"fab_add_patches\">Adicionar patches</string>\n  <string name=\"new_downloader_notification\">Novos downloaders disponíveis. Clique aqui para configurá-los.</string>\n  <string name=\"unsupported_architecture_warning\">A aplicação de patches nesta arquitetura de dispositivo não é suportada e provavelmente falhará.</string>\n  <string name=\"import_\">Importar</string>\n  <string name=\"import_patches\">Importar patches</string>\n  <string name=\"file_field_set\">Selecionado</string>\n  <string name=\"file_field_not_set\">Não selecionado</string>\n  <string name=\"field_not_set\">Não definido</string>\n  <string name=\"patches_missing\">Ausente</string>\n  <string name=\"patches_error\">Erro</string>\n  <string name=\"patches_error_description\">Não foi possível carregar os patches. Clique para ver o erro</string>\n  <string name=\"patches_not_downloaded\">Os patches não foram baixados.</string>\n  <string name=\"patches_name_default\">Patches</string>\n  <string name=\"patches_name_fallback\">Sem nome</string>\n  <string name=\"android_11_bug_dialog_title\">Bug do Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">A permissão de instalação da aplicação deve ser concedida antecipadamente para evitar um bug no sistema Android 11 que afetará negativamente a experiência do utilizador.</string>\n  <string name=\"no_network_toast\">Nenhuma conexão de internet disponível</string>\n  <string name=\"selected_app_meta_any_version\">Qualquer versão disponível</string>\n  <string name=\"app_source_dialog_title\">Selecionar fonte</string>\n  <string name=\"app_source_dialog_option_auto\">Automático</string>\n  <string name=\"app_source_dialog_option_auto_description\">Usar aplicativo instalado, depois APK baixado, depois baixadores disponíveis</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Nenhum aplicativo compatível ou baixadores disponíveis</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Aplicativos montados não podem ser corrigidos novamente sem acesso root</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">A versão %s não corresponde à versão sugerida</string>\n  <string name=\"patch_item_description\">Começar a aplicar patches na aplicação</string>\n  <string name=\"patch_selector_item\">Selecionar patches</string>\n  <string name=\"patch_selector_item_description\">%d patches selecionados</string>\n  <string name=\"patch_selection_changed_warning\">A seleção de patches foi alterada</string>\n  <string name=\"no_patches_selected\">Nenhum patch selecionado</string>\n  <string name=\"network_unavailable_warning\">O seu dispositivo não está conectado à internet. O download falhará mais tarde.</string>\n  <string name=\"network_metered_warning\">Você está atualmente em uma conexão limitada. Podem ser aplicadas taxas de dados da sua operadora de serviços.</string>\n  <string name=\"apk_source_selector_item\">Selecionar fonte APK</string>\n  <string name=\"apk_source_auto\">Automático</string>\n  <string name=\"apk_source_auto_installed\">Automático · Usando APK instalado</string>\n  <string name=\"apk_source_auto_downloaded\">Automático · Usando APK baixado</string>\n  <string name=\"apk_source_auto_downloader\">Automático · Utilizando baixadores disponíveis</string>\n  <string name=\"apk_source_auto_storage\">Automático · Selecionar do armazenamento</string>\n  <string name=\"apk_source_downloader\">Usando %s</string>\n  <string name=\"apk_source_installed\">Usando APK instalado</string>\n  <string name=\"apk_source_local\">Usando um arquivo APK local</string>\n  <string name=\"apk_source_downloaded\">Já baixado</string>\n  <string name=\"legacy_import_failed\">Não foi possível importar as configurações legadas</string>\n  <string name=\"auto_updates_dialog_title\">Configurar atualizações</string>\n  <string name=\"auto_updates_dialog_description\">Deseja que o ReVanced Manager verifique periodicamente por atualizações para os seguintes componentes?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Patches do ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Baixadores</string>\n  <string name=\"auto_updates_dialog_note\">Estas configurações podem ser alteradas mais tarde.\n\n    ReVanced Manager irá se conectar a %s para baixar as versões iniciais se o seu dispositivo estiver conectado à internet.</string>\n  <string name=\"announcements_filter_tag\">Filtrar por tag</string>\n  <string name=\"announcements_show_archived\">Mostrar arquivados</string>\n  <string name=\"general\">Geral</string>\n  <string name=\"general_description\">Idioma, tema, cor dinâmica</string>\n  <string name=\"updates\">Atualizações</string>\n  <string name=\"updates_description\">Verificar atualizações e ver o registro de alterações</string>\n  <string name=\"downloads\">Transferências</string>\n  <string name=\"downloads_description\">Baixadores e aplicativos baixados</string>\n  <string name=\"import_export\">Importar &amp; exportar</string>\n  <string name=\"import_export_description\">Keystore, opções de patch e seleção</string>\n  <string name=\"advanced\">Avançado</string>\n  <string name=\"advanced_description\">URL da API, limite de memória, depuração</string>\n  <string name=\"safeguards_toggled_warning\">As salvaguardas foram alternadas</string>\n  <string name=\"about\">Sobre</string>\n  <string name=\"about_app_name\">Sobre %1$s</string>\n  <string name=\"opensource_licenses\">Licenças de código aberto</string>\n  <string name=\"opensource_licenses_description\">Ver todas as bibliotecas usadas para fazer esta aplicação</string>\n  <string name=\"contributors\">Contribuidores</string>\n  <string name=\"contributors_description\">Ver os contribuidores do ReVanced</string>\n  <string name=\"dynamic_color\">Cor dinâmica</string>\n  <string name=\"dynamic_color_description\">Adaptar cores ao papel de parede</string>\n  <string name=\"pure_black_theme\">Tema preto puro</string>\n  <string name=\"pure_black_theme_description\">Usar fundos pretos puros para o tema escuro</string>\n  <string name=\"theme\">Tema</string>\n  <string name=\"theme_description\">Escolher entre tema claro ou escuro</string>\n  <string name=\"language\">Idioma</string>\n  <string name=\"language_description\">Escolher o idioma de exibição da aplicação</string>\n  <string name=\"language_system_default\">Padrão do sistema</string>\n  <string name=\"search_languages\">Pesquisar idiomas…</string>\n  <string name=\"safeguards\">Salvaguardas</string>\n  <string name=\"patch_compat_check\">Desativar verificação de compatibilidade de versão</string>\n  <string name=\"patch_compat_check_description\">Não restringir patches a versões de aplicação compatíveis</string>\n  <string name=\"patch_compat_check_confirmation\">A seleção de patches incompatíveis pode resultar numa aplicação quebrada.\\n\\nDeseja prosseguir assim mesmo?</string>\n  <string name=\"suggested_version_safeguard\">Exigir versão sugerida da aplicação</string>\n  <string name=\"suggested_version_safeguard_description\">Forçar a seleção da versão sugerida da aplicação</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Selecionar uma aplicação que não é a versão sugerida pode causar problemas inesperados.\\n\\nDeseja prosseguir assim mesmo?</string>\n  <string name=\"patch_selection_safeguard\">Permitir alterar a seleção e opções de patches</string>\n  <string name=\"patch_selection_safeguard_description\">Não impedir a seleção ou desseleção de patches e a personalização de opções</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Alterar a seleção de patches pode causar problemas inesperados.\\n\\nAtivar mesmo assim?</string>\n  <string name=\"universal_patches_safeguard\">Permitir usar patches universais</string>\n  <string name=\"universal_patches_safeguard_description\">Não impedir o uso de patches universais</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Patches universais não são tão bem testados quanto aqueles que visam aplicações específicas.\\n\\nAtivar mesmo assim?</string>\n  <string name=\"keystore\">Keystore</string>\n  <string name=\"patches_selections\">Seleções de patches</string>\n  <string name=\"import_keystore\">Importar keystore</string>\n  <string name=\"import_keystore_description\">Importar um keystore personalizado</string>\n  <string name=\"import_keystore_dialog_title\">Inserir credenciais do keystore</string>\n  <string name=\"import_keystore_dialog_description\">Será necessário inserir as credenciais do keystore para importá-lo.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Nome de utilizador (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Palavra-passe</string>\n  <string name=\"import_keystore_dialog_button\">Importar</string>\n  <string name=\"import_keystore_wrong_credentials\">Credenciais do keystore erradas</string>\n  <string name=\"import_keystore_success\">Keystore importado</string>\n  <string name=\"export_keystore\">Exportar keystore</string>\n  <string name=\"export_keystore_description\">Exportar o keystore atual</string>\n  <string name=\"export_keystore_unavailable\">Nenhum keystore para exportar</string>\n  <string name=\"export_keystore_success\">Keystore exportado</string>\n  <string name=\"regenerate_keystore\">Regenerar keystore</string>\n  <string name=\"regenerate_keystore_description\">Gerar um novo keystore</string>\n  <string name=\"regenerate_keystore_dialog_description\">Você está prestes a regenerar o seu keystore que o gerenciador usará durante o processo de aplicação de patches.\\n\\nNão será possível atualizar as aplicações previamente instaladas a partir desta fonte.</string>\n  <string name=\"regenerate_keystore_success\">O keystore foi substituído com sucesso</string>\n  <string name=\"import_patch_selection\">Importar seleção de patch</string>\n  <string name=\"import_patch_selection_description\">Importar seleção de patch de um arquivo JSON</string>\n  <string name=\"import_patch_selection_fail\">Não foi possível importar a seleção de patch: %s</string>\n  <string name=\"import_patch_selection_success\">Seleção de patch importada</string>\n  <string name=\"select_bundle_for_import\">Selecionar pacote para importar</string>\n  <string name=\"export_patch_selection\">Exportar seleção de patch</string>\n  <string name=\"export_patch_selection_description\">Exportar seleção de patch para um arquivo JSON</string>\n  <string name=\"export_patch_selection_fail\">Não foi possível exportar a seleção de patch: %s</string>\n  <string name=\"export_patch_selection_success\">Seleção de patch exportada</string>\n  <string name=\"select_bundle_for_export\">Selecionar pacote para exportar</string>\n  <string name=\"patch_selection_packages\">Aplicativos com seleções salvas</string>\n  <string name=\"patch_selection_entries\">Total de patches selecionados</string>\n  <string name=\"reset_configuration\">Redefinir configuração</string>\n  <string name=\"reset_patch_selection\">Seleções de patches</string>\n  <string name=\"reset_patch_selection_description\">Redefinir a seleção de patch armazenada</string>\n  <string name=\"reset_patch_options\">Opções de patch</string>\n  <string name=\"reset_patch_options_description\">Redefinir as opções de patch armazenadas</string>\n  <string name=\"reset_patch_selection_success\">A seleção de patch foi redefinida</string>\n  <string name=\"patch_selection_reset_all\">Redefinir seleção de patch globalmente</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Você está prestes a redefinir todas as seleções de patches. Será necessário selecionar manualmente cada patch novamente.</string>\n  <string name=\"patch_selection_reset_all_description\">Redefine todas as seleções de patches</string>\n  <string name=\"patch_selection_reset_package\">Redefinir seleção de patch para aplicação</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Você está prestes a redefinir a seleção de patches para a aplicação \\\"%s\\\". Você terá que selecionar manualmente cada patch novamente.</string>\n  <string name=\"patch_selection_reset_package_description\">Redefine a seleção de patches para uma única aplicação</string>\n  <string name=\"patch_selection_reset_patches\">Redefinir seleção de patches (único)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Você está prestes a redefinir a seleção de patches para \\\"%s\\\". Você terá que selecionar cada patch manualmente novamente.</string>\n  <string name=\"patch_selection_reset_patches_description\">Redefine a seleção de patches para uma coleção específica de patches</string>\n  <string name=\"patch_options_reset_package\">Redefinir opções de patch para o aplicativo</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Você está prestes a redefinir as opções de patch para o aplicativo \\\"%s\\\". Você terá que reaplicar cada opção novamente.</string>\n  <string name=\"patch_options_reset_package_description\">Redefine as opções de patch para um único aplicativo</string>\n  <string name=\"patch_options_reset_patches\">Redefinir opções de patch (único)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Você está prestes a redefinir as opções de patch para \\\"%s\\\". Você terá que reaplicar cada opção novamente.</string>\n  <string name=\"patch_options_reset_patches_description\">Redefine as opções de patch para uma coleção específica de patches</string>\n  <string name=\"patch_options_reset_all\">Redefinir opções de patch globalmente</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Você está prestes a redefinir todas as opções de patch. Você terá que reaplicar cada opção novamente.</string>\n  <string name=\"patch_options_reset_all_description\">Redefine todas as opções de patch</string>\n  <string name=\"downloaders\">Baixadores</string>\n  <string name=\"downloader_prereleases\">Usar versões pré-lançamento</string>\n  <string name=\"downloader_prereleases_description\">Usar versões pré-lançamento do baixador principal</string>\n  <string name=\"downloader_state_loaded\">Carregado</string>\n  <string name=\"downloader_state_failed\">Falha ao carregar. Clique para mais detalhes</string>\n  <string name=\"downloader_state_missing\">Faltando</string>\n  <string name=\"downloader_delete_apps_title\">Excluir aplicativos selecionados</string>\n  <string name=\"downloader_delete_apps_description\">Tem certeza de que deseja excluir os aplicativos selecionados?</string>\n  <string name=\"downloader_delete_single_description\">Tem certeza de que deseja excluir \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Nenhum aplicativo baixado encontrado.</string>\n  <string name=\"downloader_settings_no_apps_description\">Os aplicativos baixados através do ReVanced Manager aparecerão aqui.</string>\n  <string name=\"downloader_url\">URL do Downloader</string>\n  <string name=\"downloader_add\">Adicionar Downloader</string>\n  <string name=\"select_downloader_type_dialog_description\">Adicionar novos downloaders de URL ou arquivos locais</string>\n  <string name=\"local_downloaders_description\">Adicionar downloaders do armazenamento local.</string>\n  <string name=\"remote_downloaders_description\">Adicionar downloaders de URL. Podem ser atualizados automaticamente.</string>\n  <string name=\"install_revanced_downloaders\">Instale downloaders para obter aplicativos diretamente dentro do ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Instalar Downloaders do ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Cancelar instalação de downloaders?</string>\n  <string name=\"cancel_downloader_install_description\">Uma instalação de downloaders está em andamento. Se você sair agora, o download será cancelado.</string>\n  <string name=\"downloader_sources_unavailable_title\">Estes downloaders estão faltando</string>\n  <string name=\"downloader_sources_unavailable_description\">Clique no botão de atualização para corrigir.</string>\n  <string name=\"downloader_update_failed\">Falha ao atualizar o downloader: %s</string>\n  <string name=\"downloader_replace_fail\">Falha ao importar o downloader: %s</string>\n  <string name=\"search_apps\">Pesquisar aplicativos…</string>\n  <string name=\"loading_body\">Carregando…</string>\n  <string name=\"downloading_patches\">Baixando patches…</string>\n  <string name=\"options\">Opções</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Sim</string>\n  <string name=\"no\">Não</string>\n  <string name=\"edit\">Editar</string>\n  <string name=\"dialog_input_placeholder\">Valor</string>\n  <string name=\"reset\">Redefinir</string>\n  <string name=\"share\">Compartilhar</string>\n  <string name=\"patch\">Patch</string>\n  <string name=\"select_from_storage\">Selecionar do armazenamento</string>\n  <string name=\"select_from_storage_description\">Selecione um arquivo APK do armazenamento usando o seletor de arquivos</string>\n  <string name=\"suggested_version_info\">Versão sugerida: %s</string>\n  <string name=\"type_anything\">Digite algo para continuar</string>\n  <string name=\"search\">Pesquisar patches…</string>\n  <string name=\"apply\">Aplicar</string>\n  <string name=\"help\">Ajuda</string>\n  <string name=\"back\">Voltar</string>\n  <string name=\"warning\">Aviso</string>\n  <string name=\"add\">Adicionar</string>\n  <string name=\"enable\">Ativar</string>\n  <string name=\"disable\">Desativar</string>\n  <string name=\"close\">Fechar</string>\n  <string name=\"clear\">Limpar</string>\n  <string name=\"system\">Sistema</string>\n  <string name=\"light\">Claro</string>\n  <string name=\"dark\">Escuro</string>\n  <string name=\"appearance\">Aparência</string>\n  <string name=\"networking\">Rede</string>\n  <string name=\"allow_metered_networks\">Permitir redes limitadas</string>\n  <string name=\"allow_metered_networks_description\">Permite atualizações automáticas em redes limitadas.\\n    O aplicativo ainda pode avisar sobre redes limitadas para operações manuais.</string>\n  <string name=\"downloaded_apps\">Aplicativos baixados</string>\n  <string name=\"process_runtime\">Executar Patcher em outro processo (experimental)</string>\n  <string name=\"process_runtime_description\">Isso é mais rápido e permite que o Patcher use mais memória</string>\n  <string name=\"process_runtime_memory_limit\">Limite de memória do processo Patcher</string>\n  <string name=\"process_runtime_memory_limit_description\">A quantidade máxima de memória que o processo de Patcher pode usar</string>\n  <string name=\"debug_logs_export\">Exportar logs de depuração</string>\n  <string name=\"debug_logs_export_read_failed\">Falha ao ler logs (código de saída %d)</string>\n  <string name=\"debug_logs_export_failed\">Falha ao exportar logs</string>\n  <string name=\"debug_logs_export_success\">Logs exportados</string>\n  <string name=\"api_url\">URL da API</string>\n  <string name=\"api_url_description\">A API usada para baixar arquivos necessários</string>\n  <string name=\"api_url_dialog_title\">Alterar URL da API</string>\n  <string name=\"api_url_dialog_description\">Altere a URL da API do ReVanced Manager. O ReVanced Manager usa a API para baixar patches e atualizações.</string>\n  <string name=\"api_url_dialog_warning\">O ReVanced Manager se conecta à API para baixar patches e atualizações. Certifique-se de que você confia nele.</string>\n  <string name=\"api_url_dialog_save\">Definir</string>\n  <string name=\"api_url_dialog_reset\">Redefinir URL da API</string>\n  <string name=\"device\">Dispositivo</string>\n  <string name=\"device_android_version\">Versão do Android</string>\n  <string name=\"device_model\">Modelo</string>\n  <string name=\"device_architectures\">Arquiteturas de CPU</string>\n  <string name=\"device_memory_limit\">Limites de memória</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normal) - %2$dMB (Grande)</string>\n  <string name=\"patches_force_download\">Forçar download de todos os patches</string>\n  <string name=\"patches_reset\">Redefinir patches</string>\n  <string name=\"reset_onboarding\">Redefinir integração</string>\n  <string name=\"reset_onboarding_description\">Mostrar a tela de integração na próxima inicialização do aplicativo</string>\n  <string name=\"patching\">Aplicando patch</string>\n  <string name=\"signing\">Assinando</string>\n  <string name=\"storage\">Armazenamento</string>\n  <string name=\"no_patch_found\">Nenhum patch encontrado. Verifique seus patches</string>\n  <string name=\"tab_apps\">Aplicativos</string>\n  <string name=\"tab_patches\">Patches</string>\n  <string name=\"delete\">Excluir</string>\n  <string name=\"refresh\">Atualizar</string>\n  <string name=\"continue_anyways\">Continuar de qualquer forma</string>\n  <string name=\"download_another_version\">Baixar outra versão</string>\n  <string name=\"download_app\">Baixar aplicativo</string>\n  <string name=\"download_apk\">Baixar arquivo APK</string>\n  <string name=\"patches_download_fail\">Falha ao baixar patches: %s</string>\n  <string name=\"api_not_working_title\">O serviço da API está atualmente inativo</string>\n  <string name=\"api_not_working_description\">Alguns recursos podem ser afetados. Verifique sua conexão ou URL da API nas configurações.</string>\n  <string name=\"patches_replace_fail\">Falha ao importar patches: %s</string>\n  <string name=\"no_patched_apps_found\">Nenhum aplicativo com patch encontrado</string>\n  <string name=\"no_patched_apps_description\">Atualmente, você não tem nenhum aplicativo com patch que conheçamos. Mude isso aplicando o patch no seu primeiro aplicativo!</string>\n  <string name=\"patched_apps_section_title\">Aplicativos corrigidos</string>\n  <string name=\"patchable_apps_section_title\">Aplicativos que podem ser corrigidos</string>\n  <string name=\"no_patches_found\">Nenhum patch encontrado</string>\n  <string name=\"no_patches_description\">Você ainda não tem nenhum patch. Adicione patches tocando no botão abaixo!</string>\n  <string name=\"tap_on_patches\">Toque nos patches para obter mais informações sobre eles</string>\n  <string name=\"patches_selected\">%s selecionado(s)</string>\n  <string name=\"incompatible_patches\">Patches incompatíveis</string>\n  <string name=\"universal_patches\">Patches universais</string>\n  <string name=\"patch_selection_reset_toast\">A seleção e as opções de patch foram redefinidas para os padrões recomendados</string>\n  <string name=\"patch_options_reset_toast\">As opções de patch foram redefinidas</string>\n  <string name=\"non_suggested_version_warning_title\">Versão não sugerida</string>\n  <string name=\"non_suggested_version_warning_description\">A versão do aplicativo que você selecionou não corresponde à versão sugerida.\\nPor favor, use a versão sugerida: %s\\n\\nPara continuar de qualquer forma, desative \\\"Exigir versão sugerida do aplicativo\\\" nas configurações avançadas.</string>\n  <string name=\"selection_warning_title\">Parar de usar os padrões?</string>\n  <string name=\"selection_warning_description\">É recomendado usar a seleção e as opções de patch padrão. Alterá-los pode resultar em problemas inesperados.\\n\\nVocê precisa ativar \\\"Permitir alteração da seleção e opções de patch\\\" nas configurações avançadas antes de alternar os patches.</string>\n  <string name=\"universal_patch_warning_description\">Patches universais têm um uso mais generalizado e não funcionam de forma tão confiável quanto os patches que visam aplicativos específicos. Você pode encontrar problemas ao usá-los.\\n\\nVocê precisa ativar \\\"Permitir uso de patches universais\\\" nas configurações avançadas antes de usar patches universais.</string>\n  <string name=\"this_version\">Esta versão</string>\n  <string name=\"universal\">Qualquer aplicativo</string>\n  <string name=\"search_patches\">Pesquisar patches</string>\n  <string name=\"app_version_not_compatible\">Este patch não é compatível com a versão selecionada do aplicativo (%1$s)\\n\\nÉ compatível apenas com a(s) seguinte(s) versão(ões): %2$s</string>\n  <string name=\"continue_with_version\">Continuar com esta versão?</string>\n  <string name=\"version_not_compatible\">Nem todos os patches são compatíveis com esta versão (%s). Deseja continuar de qualquer forma?</string>\n  <string name=\"download_application\">Baixar aplicativo?</string>\n  <string name=\"app_not_installed\">O aplicativo selecionado não está instalado. Deseja baixá-lo?</string>\n  <string name=\"failed_to_load_apk\">Falha ao carregar APK</string>\n  <string name=\"split_apk_not_supported\">APKs divididos não podem ser corrigidos</string>\n  <string name=\"loading\">Carregando…</string>\n  <string name=\"not_installed\">Não instalado</string>\n  <string name=\"installed\">Instalado</string>\n  <string name=\"app_info\">Informações do aplicativo</string>\n  <string name=\"uninstall\">Desinstalar</string>\n  <string name=\"unpatch\">Remover patch</string>\n  <string name=\"repatch\">Aplicar patch novamente</string>\n  <string name=\"install_type\">Tipo de instalação</string>\n  <string name=\"package_name\">Nome do pacote</string>\n  <string name=\"original_package_name\">Nome do pacote original</string>\n  <string name=\"applied_patches\">Patches aplicados</string>\n  <string name=\"view_applied_patches\">Ver patches aplicados</string>\n  <string name=\"default_install\">Padrão</string>\n  <string name=\"mount_install\">Montar</string>\n  <string name=\"mounted\">Montado</string>\n  <string name=\"not_mounted\">Não montado</string>\n  <string name=\"mount\">Montar</string>\n  <string name=\"unmount\">Desmontar</string>\n  <string name=\"failed_to_mount\">Falha ao montar: %s</string>\n  <string name=\"failed_to_unmount\">Falha ao desmontar: %s</string>\n  <string name=\"unpatch_app\">Desfazer patch do aplicativo?</string>\n  <string name=\"unpatch_description\">Tem certeza de que deseja desfazer o patch deste aplicativo?</string>\n  <string name=\"downloader_invalid_version\">O downloader não buscou a versão correta</string>\n  <string name=\"downloader_app_not_found\">O downloader não encontrou o aplicativo</string>\n  <string name=\"downloader_error\">Erro do downloader: %s</string>\n  <string name=\"no_downloaders_installed\">Nenhum downloader de aplicativo está instalado!</string>\n  <string name=\"no_downloaders_trusted\">Nenhum downloader de aplicativo foi confiado! Verifique suas configurações.</string>\n  <string name=\"already_patched\">Já corrigido</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filtro</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Compatibilidade</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Pacotes</string>\n  <string name=\"patch_selector_sheet_actions_title\">Ações</string>\n  <string name=\"restore_default_selection\">Restaurar seleção padrão</string>\n  <string name=\"deselect_all\">Desmarcar tudo</string>\n  <string name=\"invert_selection\">Inverter seleção</string>\n  <string name=\"deselect_all_except\">Desmarcar tudo, exceto %s</string>\n  <string name=\"scope_dialog_title\">Aplicar a</string>\n  <string name=\"scope_all_patches\">Todos os patches</string>\n  <string name=\"scope_bundle_patches\">Apenas %s</string>\n  <string name=\"string_option_menu_description\">Mais opções</string>\n  <string name=\"option_preset_custom_value\">Valor personalizado</string>\n  <string name=\"path_selector\">Selecionar do armazenamento</string>\n  <string name=\"path_selector_parent_dir\">Diretório anterior</string>\n  <string name=\"path_selector_dirs\">Diretórios</string>\n  <string name=\"path_selector_files\">Arquivos</string>\n  <string name=\"show_password_field\">Mostrar senha</string>\n  <string name=\"hide_password_field\">Ocultar senha</string>\n  <string name=\"installer\">Instalador</string>\n  <string name=\"install_app\">Instalar</string>\n  <string name=\"install_app_success\">Aplicativo instalado</string>\n  <string name=\"install_app_fail\">Falha ao instalar o aplicativo: %s</string>\n  <string name=\"reinstall_app_fail\">Falha ao reinstalar o aplicativo: %s</string>\n  <string name=\"uninstall_app_fail\">Falha ao desinstalar o aplicativo: %s</string>\n  <string name=\"open_app\">Abrir</string>\n  <string name=\"save_apk\">Salvar APK</string>\n  <string name=\"save_apk_success\">APK Salvo</string>\n  <string name=\"sign_fail\">Falha ao assinar APK: %s</string>\n  <string name=\"save_logs\">Salvar registros</string>\n  <string name=\"save_as_file\">Salvar em arquivos</string>\n  <string name=\"export_patcher_logs\">Exportar logs do patcher</string>\n  <string name=\"save_logs_success\">Logs salvos</string>\n  <string name=\"downloader_activity_dialog_body\">É necessária a interação do usuário para prosseguir com este baixador.</string>\n  <string name=\"select_install_type\">Selecionar tipo de instalação</string>\n  <string name=\"patcher_step_group_preparing\">Preparando</string>\n  <string name=\"patcher_step_load_patches\">Carregar patches</string>\n  <string name=\"patcher_step_unpack\">Preparar o patcher</string>\n  <string name=\"patcher_step_group_patching\">Aplicando patches</string>\n  <string name=\"patcher_step_group_saving\">Salvando</string>\n  <string name=\"patcher_step_write_patched\">Escrever arquivo APK corrigido</string>\n  <string name=\"patcher_step_sign_apk\">Assinar arquivo APK corrigido</string>\n  <string name=\"patcher_notification_title\">Aplicando patches em andamento…</string>\n  <string name=\"patcher_notification_text\">Toque para voltar ao patcher</string>\n  <string name=\"patcher_stop_confirm_title\">Parar patcher</string>\n  <string name=\"patcher_stop_confirm_description\">Tem certeza de que deseja parar o processo de aplicação de patches?</string>\n  <string name=\"patcher_install_in_progress\">A instalação está em andamento. Por favor, aguarde</string>\n  <string name=\"execute_patches\">Executar patches</string>\n  <string name=\"executing_patch\">Executar %s</string>\n  <string name=\"failed_to_execute_patch\">Falha ao executar %s</string>\n  <string name=\"step_completed\">concluído</string>\n  <string name=\"step_failed\">falhou</string>\n  <string name=\"step_running\">em execução</string>\n  <string name=\"step_waiting\">aguardando</string>\n  <string name=\"expand_content\">expandir</string>\n  <string name=\"collapse_content\">recolher</string>\n  <string name=\"drag_handle\">reorganizar</string>\n  <string name=\"more\">Mais</string>\n  <string name=\"less\">Menos</string>\n  <string name=\"continue_\">Continuar</string>\n  <string name=\"dismiss\">Dispensar</string>\n  <string name=\"view_announcement\">Ver anúncio</string>\n  <string name=\"permanent_dismiss\">Não mostrar novamente</string>\n  <string name=\"donate\">Doar</string>\n  <string name=\"website\">Site</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Contato</string>\n  <string name=\"license\">Licença</string>\n  <string name=\"source\">Fonte</string>\n  <string name=\"repository\">Repositório</string>\n  <string name=\"bundle_information_by_author\">Por %1$s</string>\n  <string name=\"version\">Versão</string>\n  <string name=\"version_compatibility_warning\">A versão selecionada pode ser incompatível com os patches selecionados</string>\n  <string name=\"submit_feedback\">Enviar problema ou feedback</string>\n  <string name=\"submit_feedback_description\">Ajude-nos a melhorar este aplicativo</string>\n  <string name=\"developer_options\">Opções do desenvolvedor</string>\n  <string name=\"developer_options_description\">Opções para depurar problemas</string>\n  <string name=\"patches_update_success\">Atualização bem-sucedida</string>\n  <string name=\"patches_update_unavailable\">Nenhuma atualização disponível</string>\n  <string name=\"view_patches\">Ver patches</string>\n  <string name=\"patches_view_any_version\">Qualquer versão</string>\n  <string name=\"patches_view_any_package\">Qualquer pacote</string>\n  <string name=\"patches_delete_single_dialog_description\">Tem certeza de que deseja excluir \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Tem certeza de que deseja excluir os patches selecionados?</string>\n  <string name=\"announcements\">Anúncios</string>\n  <string name=\"archive\">Arquivo</string>\n  <string name=\"about_revanced_manager\">Sobre o ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager é um aplicativo Android que usa o ReVanced Patcher para aplicar patches em aplicativos Android. Ele permite que você baixe e aplique patches em aplicativos com patches personalizados e gerencie o processo de aplicação de patches.</string>\n  <string name=\"developer_options_taps\">%d toques restantes</string>\n  <string name=\"developer_options_enabled\">Opções do desenvolvedor ativadas</string>\n  <string name=\"developer_options_already_enabled\">As opções do desenvolvedor já estão ativadas</string>\n  <string name=\"update_available\">Uma atualização está disponível</string>\n  <string name=\"current_version\">Versão atual: %s</string>\n  <string name=\"new_version\">Nova versão: %s</string>\n  <string name=\"ready_to_install_update\">Pronto para instalar a atualização</string>\n  <string name=\"update_completed\">Atualização instalada</string>\n  <string name=\"install_update_manager_failed\">Falha ao instalar a atualização</string>\n  <string name=\"manual_update_check\">Verificar atualizações</string>\n  <string name=\"view_update\">Ver atualização</string>\n  <string name=\"manual_update_check_description\">Verificar atualizações manualmente</string>\n  <string name=\"update_checking_manager\">Verificar atualizações ao iniciar</string>\n  <string name=\"update_checking_manager_description\">Verificar novas versões do ReVanced Manager quando o aplicativo iniciar</string>\n  <string name=\"update_checking_downloader\">Verificar atualizações dos Downloaders do ReVanced ao iniciar</string>\n  <string name=\"update_checking_downloader_description\">Verificar atualizações para os Downloaders do ReVanced instalados quando o aplicativo iniciar</string>\n  <string name=\"manager_prereleases\">Usar pré-lançamentos</string>\n  <string name=\"manager_prereleases_description\">Usar versões de pré-lançamento do ReVanced Manager</string>\n  <string name=\"prereleases_warning\">As versões de pré-lançamento podem ser instáveis e conter bugs. Você pode experimentar travamentos, perda de dados ou outros problemas inesperados. Habilite isso apenas se você estiver confortável com esses riscos.</string>\n  <string name=\"changelog\">Ver registro de alterações</string>\n  <string name=\"changelog_loading\">Carregando registro de alterações</string>\n  <string name=\"changelog_download_fail\">Falha ao baixar registro de alterações: %s</string>\n  <string name=\"changelog_description\">Confira as últimas alterações nesta atualização</string>\n  <string name=\"battery_optimization_notification\">As otimizações de bateria devem ser desativadas para que o ReVanced Manager funcione corretamente em segundo plano. Clique aqui para desativar as otimizações.</string>\n  <string name=\"installing_manager_update\">Instalando atualização…</string>\n  <string name=\"downloading_manager_update\">Baixando atualização…</string>\n  <string name=\"download_manager_failed\">Falha ao baixar atualização: %s</string>\n  <string name=\"cancel\">Cancelar</string>\n  <string name=\"save\">Salvar</string>\n  <string name=\"save_with_count\">Salvar (%1$s)</string>\n  <string name=\"update\">Atualizar</string>\n  <string name=\"empty\">Vazio</string>\n  <string name=\"installing_message\">Toque em <b>Atualizar</b> quando solicitado.\nReVanced Manager será fechado durante a atualização.</string>\n  <string name=\"no_changelogs_found\">Nenhum registro de alterações encontrado</string>\n  <string name=\"just_now\">Agora mesmo</string>\n  <string name=\"minutes_ago\">Há %sm</string>\n  <string name=\"hours_ago\">Há %sh</string>\n  <string name=\"days_ago\">Há %sd</string>\n  <string name=\"invalid_date\">Data inválida</string>\n  <string name=\"disable_battery_optimization\">Desativar otimização de bateria</string>\n  <string name=\"input_dialog_value_invalid\">Valor inválido</string>\n  <string name=\"option_required\">Esta opção é obrigatória</string>\n  <string name=\"required_options_screen\">Opções obrigatórias</string>\n  <string name=\"failed_to_check_updates\">Falha ao verificar atualizações: %s</string>\n  <string name=\"no_update_available\">Nenhuma atualização disponível</string>\n  <string name=\"no_announcements_found\">Nenhum anúncio encontrado</string>\n  <string name=\"update_check\">Verificando atualizações…</string>\n  <string name=\"dismiss_temporary\">Agora não</string>\n  <string name=\"update_available_dialog_description\">Uma nova versão do ReVanced Manager (%s) está disponível.</string>\n  <string name=\"failed_to_download_update\">Falha ao baixar atualização: %s</string>\n  <string name=\"download\">Baixar</string>\n  <string name=\"download_confirmation_metered\">Você está atualmente em uma conexão limitada, e cobranças de dados do seu provedor de serviços podem ser aplicadas.\n\nDeseja continuar mesmo assim?</string>\n  <string name=\"download_update_confirmation\">Baixar atualização?</string>\n  <string name=\"no_contributors_found\">Nenhum colaborador encontrado</string>\n  <string name=\"select\">Selecionar</string>\n  <string name=\"select_deselect_all\">Selecionar ou desselecionar tudo</string>\n  <string name=\"select_patches_type_dialog_description\">Adicionar novos patches de URL ou arquivos locais</string>\n  <string name=\"local_patches_description\">Adicionar patches do armazenamento local.</string>\n  <string name=\"remote_patches_description\">Adicionar patches de URL. Os patches podem ser atualizados automaticamente.</string>\n  <string name=\"recommended\">Recomendado</string>\n  <string name=\"installation_failed_dialog_title\">Falha na instalação</string>\n  <string name=\"installation_cancelled_dialog_title\">Instalação cancelada</string>\n  <string name=\"installation_blocked_dialog_title\">Instalação bloqueada</string>\n  <string name=\"installation_conflict_dialog_title\">Conflito de instalação</string>\n  <string name=\"installation_incompatible_dialog_title\">Instalação incompatível</string>\n  <string name=\"installation_invalid_dialog_title\">Instalação inválida</string>\n  <string name=\"installation_storage_issue_dialog_title\">Armazenamento insuficiente</string>\n  <string name=\"installation_timeout_dialog_title\">Tempo limite da instalação esgotado</string>\n  <string name=\"installation_failed_description\">A instalação falhou devido a um motivo desconhecido. Tentar novamente?</string>\n  <string name=\"installation_aborted_description\">A instalação foi cancelada manualmente. Tentar novamente?</string>\n  <string name=\"installation_blocked_description\">A instalação foi bloqueada. Revise suas configurações de segurança do dispositivo e tente novamente.</string>\n  <string name=\"installation_conflict_description\">A instalação foi impedida por uma instalação existente do aplicativo. Desinstalar o aplicativo instalado e tentar novamente?</string>\n  <string name=\"installation_incompatible_description\">O aplicativo é incompatível com este dispositivo. Use um APK compatível com este dispositivo e tente novamente.</string>\n  <string name=\"installation_invalid_description\">O aplicativo é inválido. Desinstalar o aplicativo e tentar novamente?</string>\n  <string name=\"installation_storage_issue_description\">O aplicativo não pôde ser instalado devido a armazenamento insuficiente. Libere espaço e tente novamente.</string>\n  <string name=\"installation_timeout_description\">A instalação demorou muito. Tentar novamente?</string>\n  <string name=\"reinstall\">Reinstalar</string>\n  <string name=\"show\">Mostrar</string>\n  <string name=\"debugging\">Depuração</string>\n  <string name=\"about_device\">Sobre o dispositivo</string>\n  <string name=\"enter_url\">Inserir URL</string>\n  <string name=\"next\">Próximo</string>\n  <string name=\"auto_update\">Atualização automática</string>\n  <string name=\"add_patches\">Adicionar patches</string>\n  <string name=\"auto_update_description\">Atualizar automaticamente quando uma nova versão estiver disponível</string>\n  <string name=\"patches_prereleases\">Usar pré-lançamentos</string>\n  <string name=\"patches_prereleases_description\">Usar versões de pré-lançamento de %s</string>\n  <string name=\"patches_url\">URL dos patches</string>\n  <string name=\"incompatible_patches_dialog\">Esses patches não são compatíveis com a versão selecionada do aplicativo (%1$s).\n\nClique nos patches para ver mais detalhes.</string>\n  <string name=\"incompatible_patch\">Patch incompatível</string>\n  <string name=\"any_version\">Qualquer</string>\n  <string name=\"never_show_again\">Nunca mais mostrar</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Mostrar mensagem de atualização ao iniciar</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Mostrar uma notificação pop-up sempre que uma nova atualização estiver disponível ao iniciar</string>\n  <string name=\"failed_to_import_keystore\">Falha ao importar armazenamento de chaves</string>\n  <string name=\"export\">Exportar</string>\n  <string name=\"confirm\">Confirmar</string>\n  <string name=\"new_announcement\">Novo anúncio:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d patch</item>\n    <item quantity=\"other\">%d patches</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Executar %d patch</item>\n    <item quantity=\"other\">Executar %d patches</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d selecionado</item>\n    <item quantity=\"other\">%d selecionados</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ro-rRO/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Patcher</string>\n  <string name=\"patches\">Patch-uri</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Manager</string>\n  <string name=\"onboarding_welcome_to\">Bine ați venit la</string>\n  <string name=\"onboarding_welcome_back\">Salut! Este noul</string>\n  <string name=\"onboarding_apps_subtitle\">Puteți selecta o aplicație pentru a o patch-ui acum sau mai târziu</string>\n  <string name=\"onboarding_apps_network_error\">Nu s-au putut încărca patch-urile deoarece rețeaua este indisponibilă sau instabilă. Conectați-vă la o rețea stabilă și încercați din nou.</string>\n  <string name=\"onboarding_updates_subtitle\">Configurați actualizări automate pentru a menține ReVanced Manager și patch-urile la zi</string>\n  <string name=\"banner_sources_not_downloaded_description\">Patch-urile și descărcătoarele nu au putut fi descărcate în timpul configurării. Atingeți actualizare pentru a le descărca.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager se va conecta la %s pentru a descărca versiunile inițiale dacă dispozitivul tău este conectat la internet.</string>\n  <string name=\"retry\">Reîncercați</string>\n  <string name=\"onboarding_skip\">Omiteți pentru moment</string>\n  <string name=\"onboarding_recommended_version\">Versiune recomandată: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Omiteți permisiunile?</string>\n  <string name=\"onboarding_permissions_skip_description\">Fără permisiunile necesare, unele funcții ar putea să nu funcționeze corect. Le puteți acorda mai târziu din setările aplicației.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Omiteți oricum</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager are nevoie de câteva permisiuni pentru a funcționa corect</string>\n  <string name=\"permission_install_apps\">Instalați aplicații necunoscute</string>\n  <string name=\"permission_install_apps_description\">Necesar pentru a instala aplicațiile patch-uite</string>\n  <string name=\"permission_notifications\">Notificări</string>\n  <string name=\"permission_notifications_description\">Permite aplicarea patch-urilor neîntreruptă în fundal</string>\n  <string name=\"permission_battery\">Optimizare baterie</string>\n  <string name=\"permission_battery_description\">Previne întreruperea patch-uirii în fundal</string>\n  <string name=\"permission_grant\">Acordă</string>\n  <string name=\"downloader_host_permission_label\">Gazdă de descărcare ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Folosit pentru a controla accesul la descărcătoarele ReVanced Manager. Numai ReVanced Manager are acest lucru.</string>\n  <string name=\"toast_copied_to_clipboard\">Copiat!</string>\n  <string name=\"copy_to_clipboard\">Copiază în clipboard</string>\n  <string name=\"dashboard\">Tablou de bord</string>\n  <string name=\"settings\">Setări</string>\n  <string name=\"select_app\">Selectează o aplicație</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d selectate</string>\n  <string name=\"fab_patch_app\">Patch-uiți o aplicație</string>\n  <string name=\"fab_add_patches\">Adăugați patch-uri</string>\n  <string name=\"new_downloader_notification\">Un(e) descărcător(oare) nou(noi) disponibil(e). Faceți clic aici pentru a le configura.</string>\n  <string name=\"unsupported_architecture_warning\">Aplicarea patch-urilor pe această arhitectură de dispozitiv nu este suportată și cel mai probabil va eșua.</string>\n  <string name=\"import_\">Importă</string>\n  <string name=\"import_patches\">Importă patch-uri</string>\n  <string name=\"file_field_set\">Selectat</string>\n  <string name=\"file_field_not_set\">Neselectat</string>\n  <string name=\"field_not_set\">Nesetat</string>\n  <string name=\"patches_missing\">Lipsesc</string>\n  <string name=\"patches_error\">Eroare</string>\n  <string name=\"patches_error_description\">Patch-urile nu au putut fi încărcate. Apasă pentru a vedea eroarea.</string>\n  <string name=\"patches_not_downloaded\">Pachetele nu au fost descărcate.</string>\n  <string name=\"patches_name_default\">Patch-uri</string>\n  <string name=\"patches_name_fallback\">Fără nume</string>\n  <string name=\"android_11_bug_dialog_title\">Eroare Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">Permisiunea de instalare a aplicației trebuie acordată în avans pentru a evita o eroare în sistemul Android 11 care va afecta negativ experiența utilizatorului.</string>\n  <string name=\"no_network_toast\">Nicio conexiune la internet disponibilă</string>\n  <string name=\"selected_app_meta_any_version\">Orice versiune disponibilă</string>\n  <string name=\"app_source_dialog_title\">Selectează sursa</string>\n  <string name=\"app_source_dialog_option_auto\">Automat</string>\n  <string name=\"app_source_dialog_option_auto_description\">Folosește aplicația instalată, apoi APK-ul descărcat, apoi descărcătoarele disponibile</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Nu sunt disponibile aplicații compatibile sau programe de descărcare.</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Aplicațiile montate nu pot fi patch-uite din nou fără acces root.</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Versiunea %s nu se potrivește cu versiunea sugerată</string>\n  <string name=\"patch_item_description\">Începe aplicarea patch-urilor pentru aplicație</string>\n  <string name=\"patch_selector_item\">Selectați patch-uri</string>\n  <string name=\"patch_selector_item_description\">%d patch-uri selectate</string>\n  <string name=\"patch_selection_changed_warning\">Selecția pachetelor a fost modificată</string>\n  <string name=\"no_patches_selected\">Niciun patch selectat</string>\n  <string name=\"network_unavailable_warning\">Dispozitivul tău nu este conectat la internet. Descărcarea va eșua ulterior.</string>\n  <string name=\"network_metered_warning\">Ești conectat la o rețea cu contorizare. Se pot aplica taxe de date de la furnizorul tău de servicii.</string>\n  <string name=\"apk_source_selector_item\">Selectați sursa APK</string>\n  <string name=\"apk_source_auto\">Automat</string>\n  <string name=\"apk_source_auto_installed\">Automat · Folosind APK-ul instalat</string>\n  <string name=\"apk_source_auto_downloaded\">Automat · Folosind APK-ul descărcat</string>\n  <string name=\"apk_source_auto_downloader\">Automat · Folosind descărcătoarele disponibile</string>\n  <string name=\"apk_source_auto_storage\">Automat · Selectează din spațiul de stocare</string>\n  <string name=\"apk_source_downloader\">Se utilizează %s</string>\n  <string name=\"apk_source_installed\">Se utilizează APK-ul instalat</string>\n  <string name=\"apk_source_local\">Se utilizează un fișier APK local</string>\n  <string name=\"apk_source_downloaded\">Deja descărcat</string>\n  <string name=\"legacy_import_failed\">Nu s-au putut importa setările vechi</string>\n  <string name=\"auto_updates_dialog_title\">Configurează actualizările</string>\n  <string name=\"auto_updates_dialog_description\">Doriți ca ReVanced Manager să verifice periodic actualizările pentru următoarele componente?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Patch-uri ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Descărcătoare</string>\n  <string name=\"auto_updates_dialog_note\">Aceste setări pot fi modificate mai târziu.\n\n    ReVanced Manager se va conecta la %s pentru a descărca versiunile inițiale dacă dispozitivul tău este conectat la internet.</string>\n  <string name=\"announcements_filter_tag\">Filtrează după etichetă</string>\n  <string name=\"announcements_show_archived\">Afișează arhivate</string>\n  <string name=\"general\">General</string>\n  <string name=\"general_description\">Limba, tema, culori dinamice</string>\n  <string name=\"updates\">Actualizări</string>\n  <string name=\"updates_description\">Verificați actualizările și vizualizați istoricul modificărilor</string>\n  <string name=\"downloads\">Descărcări</string>\n  <string name=\"downloads_description\">Descărcătoare și aplicații descărcate</string>\n  <string name=\"import_export\">Import și export</string>\n  <string name=\"import_export_description\">Keystore, opțiuni și selecție de patch-uri</string>\n  <string name=\"advanced\">Avansat</string>\n  <string name=\"advanced_description\">URL API, limită de memorie, depanare</string>\n  <string name=\"safeguards_toggled_warning\">Măsurile de siguranță au fost comutate</string>\n  <string name=\"about\">Despre</string>\n  <string name=\"about_app_name\">Despre %1$s</string>\n  <string name=\"opensource_licenses\">Licențe open source</string>\n  <string name=\"opensource_licenses_description\">Vizualizează toate bibliotecile utilizate pentru a crea această aplicație</string>\n  <string name=\"contributors\">Contribuitori</string>\n  <string name=\"contributors_description\">Vizualizează contribuitorii ReVanced</string>\n  <string name=\"dynamic_color\">Culori dinamice</string>\n  <string name=\"dynamic_color_description\">Adaptează culorile la tapet</string>\n  <string name=\"pure_black_theme\">Temă negru pur</string>\n  <string name=\"pure_black_theme_description\">Utilizează fundaluri negru pur pentru tema întunecată</string>\n  <string name=\"theme\">Temă</string>\n  <string name=\"theme_description\">Alege între tema deschisă sau întunecată</string>\n  <string name=\"language\">Limbă</string>\n  <string name=\"language_description\">Alege limba de afișare a aplicației</string>\n  <string name=\"language_system_default\">Implicit din sistem</string>\n  <string name=\"search_languages\">Căutați limbi…</string>\n  <string name=\"safeguards\">Măsuri de siguranță</string>\n  <string name=\"patch_compat_check\">Dezactivează verificarea compatibilității versiunii</string>\n  <string name=\"patch_compat_check_description\">Nu restricționa patch-urile la versiuni de aplicație compatibile</string>\n  <string name=\"patch_compat_check_confirmation\">Selectarea patch-urilor incompatibile poate duce la o aplicație defectă.\\n\\nDorești să continui oricum?</string>\n  <string name=\"suggested_version_safeguard\">Impune versiunea sugerată a aplicației</string>\n  <string name=\"suggested_version_safeguard_description\">Impune selecția versiunii sugerate a aplicației</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Selectarea unei aplicații care nu este versiunea sugerată poate cauza probleme neașteptate.\\n\\nDorești să continui oricum?</string>\n  <string name=\"patch_selection_safeguard\">Permite modificarea selecției și opțiunilor patch-urilor</string>\n  <string name=\"patch_selection_safeguard_description\">Nu împiedica selectarea sau deselectarea patch-urilor și personalizarea opțiunilor</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Modificarea selecției de patch-uri poate cauza probleme neașteptate.\\n\\nActivează oricum?</string>\n  <string name=\"universal_patches_safeguard\">Permite utilizarea patch-urilor universale</string>\n  <string name=\"universal_patches_safeguard_description\">Nu împiedica utilizarea patch-urilor universale</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Patch-urile universale nu sunt testate la fel de bine ca cele care vizează aplicații specifice.\\n\\nActivează oricum?</string>\n  <string name=\"keystore\">Magazin de chei</string>\n  <string name=\"patches_selections\">Selecții de patch-uri</string>\n  <string name=\"import_keystore\">Importă keystore</string>\n  <string name=\"import_keystore_description\">Importă un keystore personalizat</string>\n  <string name=\"import_keystore_dialog_title\">Introdu acreditările keystore-ului</string>\n  <string name=\"import_keystore_dialog_description\">Va trebui să introduci acreditările keystore-ului pentru a-l importa.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Nume de utilizator (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Parolă</string>\n  <string name=\"import_keystore_dialog_button\">Importă</string>\n  <string name=\"import_keystore_wrong_credentials\">Acreditări keystore incorecte</string>\n  <string name=\"import_keystore_success\">Keystore importat</string>\n  <string name=\"export_keystore\">Exportă keystore</string>\n  <string name=\"export_keystore_description\">Exportă keystore-ul actual</string>\n  <string name=\"export_keystore_unavailable\">Niciun keystore de exportat</string>\n  <string name=\"export_keystore_success\">Keystore exportat</string>\n  <string name=\"regenerate_keystore\">Regenerează keystore</string>\n  <string name=\"regenerate_keystore_description\">Generează un keystore nou</string>\n  <string name=\"regenerate_keystore_dialog_description\">Ești pe cale să regenerezi keystore-ul tău pe care managerul îl va folosi în timpul procesului de aplicare a patch-urilor.\\n\\nNu vei mai putea actualiza aplicațiile instalate anterior din această sursă.</string>\n  <string name=\"regenerate_keystore_success\">Keystore-ul a fost înlocuit cu succes</string>\n  <string name=\"import_patch_selection\">Importă selecția de patch-uri</string>\n  <string name=\"import_patch_selection_description\">Importă selecția de patch-uri dintr-un fișier JSON</string>\n  <string name=\"import_patch_selection_fail\">Nu s-a putut importa selecția de patch-uri: %s</string>\n  <string name=\"import_patch_selection_success\">Selecție de patch-uri importată</string>\n  <string name=\"select_bundle_for_import\">Selectați pachetul în care să importați</string>\n  <string name=\"export_patch_selection\">Exportă selecția de patch-uri</string>\n  <string name=\"export_patch_selection_description\">Exportă selecția de patch-uri într-un fișier JSON</string>\n  <string name=\"export_patch_selection_fail\">Nu s-a putut exporta selecția de patch-uri: %s</string>\n  <string name=\"export_patch_selection_success\">Selecție de patch-uri exportată</string>\n  <string name=\"select_bundle_for_export\">Selectați pachetul din care să exportați</string>\n  <string name=\"patch_selection_packages\">Aplicații cu selecții salvate</string>\n  <string name=\"patch_selection_entries\">Total patch-uri selectate</string>\n  <string name=\"reset_configuration\">Resetați configurația</string>\n  <string name=\"reset_patch_selection\">Selecții de patch-uri</string>\n  <string name=\"reset_patch_selection_description\">Resetează selecția de patch-uri stocată</string>\n  <string name=\"reset_patch_options\">Opțiuni patch</string>\n  <string name=\"reset_patch_options_description\">Resetează opțiunile patch-urilor stocate</string>\n  <string name=\"reset_patch_selection_success\">Selecția de patch-uri a fost resetată</string>\n  <string name=\"patch_selection_reset_all\">Resetează selecția de patch-uri la nivel global</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Ești pe cale să resetezi toate selecțiile de patch-uri. Va trebui să selectezi manual fiecare patch din nou.</string>\n  <string name=\"patch_selection_reset_all_description\">Resetează toate selecțiile de patch-uri</string>\n  <string name=\"patch_selection_reset_package\">Resetează selecția de patch-uri pentru aplicație</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Ești pe cale să resetezi selecția de patch-uri pentru aplicația \\\"%s\\\". Va trebui să selectezi manual fiecare patch din nou.</string>\n  <string name=\"patch_selection_reset_package_description\">Resetează selecția de patch-uri pentru o singură aplicație</string>\n  <string name=\"patch_selection_reset_patches\">Resetare selecție patch (individual)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Sunteți pe cale să resetați selecția de patch-uri pentru \\\"%s\\\". Va trebui să selectați manual fiecare patch din nou.</string>\n  <string name=\"patch_selection_reset_patches_description\">Resetează selecția de patch-uri pentru o colecție specifică de patch-uri</string>\n  <string name=\"patch_options_reset_package\">Resetare opțiuni patch pentru aplicație</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Sunteți pe cale să resetați opțiunile de patch-uri pentru aplicația \\\"%s\\\". Va trebui să reaplicați fiecare opțiune din nou.</string>\n  <string name=\"patch_options_reset_package_description\">Resetează opțiunile de patch-uri pentru o singură aplicație</string>\n  <string name=\"patch_options_reset_patches\">Resetare opțiuni patch (individual)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Sunteți pe cale să resetați opțiunile de patch-uri pentru \\\"%s\\\". Va trebui să reaplicați fiecare opțiune din nou.</string>\n  <string name=\"patch_options_reset_patches_description\">Resetează opțiunile de patch-uri pentru o colecție specifică de patch-uri</string>\n  <string name=\"patch_options_reset_all\">Resetare opțiuni patch global</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Sunteți pe cale să resetați toate opțiunile de patch-uri. Va trebui să reaplicați fiecare opțiune din nou.</string>\n  <string name=\"patch_options_reset_all_description\">Resetează toate opțiunile de patch-uri</string>\n  <string name=\"downloaders\">Descărcătoare</string>\n  <string name=\"downloader_prereleases\">Utilizați versiuni preliminare</string>\n  <string name=\"downloader_prereleases_description\">Utilizați versiunile preliminare ale descărcătorului principal</string>\n  <string name=\"downloader_state_loaded\">Încărcat</string>\n  <string name=\"downloader_state_failed\">Eșuat la încărcare. Atingeți pentru mai multe detalii</string>\n  <string name=\"downloader_state_missing\">Lipsă</string>\n  <string name=\"downloader_delete_apps_title\">Ștergeți aplicațiile selectate</string>\n  <string name=\"downloader_delete_apps_description\">Sigur doriți să ștergeți aplicațiile selectate?</string>\n  <string name=\"downloader_delete_single_description\">Sigur doriți să ștergeți \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Nu s-au găsit aplicații descărcate.</string>\n  <string name=\"downloader_settings_no_apps_description\">Aplicațiile descărcate prin ReVanced Manager vor apărea aici.</string>\n  <string name=\"downloader_url\">URL descărcător</string>\n  <string name=\"downloader_add\">Adaugă descărcător</string>\n  <string name=\"select_downloader_type_dialog_description\">Adăugați descărcători noi din URL sau fișiere locale</string>\n  <string name=\"local_downloaders_description\">Adăugați descărcători din stocarea locală.</string>\n  <string name=\"remote_downloaders_description\">Adăugați descărcători din URL. Pot fi actualizați automat.</string>\n  <string name=\"install_revanced_downloaders\">Instalați descărcătoare pentru a obține aplicații direct în ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Instalați descărcătoare ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Anulați instalarea descărcătoarelor?</string>\n  <string name=\"cancel_downloader_install_description\">O instalare de descărcătoare este în curs. Dacă părăsiți acum, descărcarea va fi anulată.</string>\n  <string name=\"downloader_sources_unavailable_title\">Acești descărcători lipsesc</string>\n  <string name=\"downloader_sources_unavailable_description\">Faceți clic pe butonul de actualizare pentru a remedia.</string>\n  <string name=\"downloader_update_failed\">Eșec la actualizarea descărcătorului: %s</string>\n  <string name=\"downloader_replace_fail\">Eșec la importarea descărcătorului: %s</string>\n  <string name=\"search_apps\">Căutați aplicații…</string>\n  <string name=\"loading_body\">Se încarcă…</string>\n  <string name=\"downloading_patches\">Se descarcă patch-uri…</string>\n  <string name=\"options\">Opțiuni</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Da</string>\n  <string name=\"no\">Nu</string>\n  <string name=\"edit\">Editați</string>\n  <string name=\"dialog_input_placeholder\">Valoare</string>\n  <string name=\"reset\">Resetare</string>\n  <string name=\"share\">Partajați</string>\n  <string name=\"patch\">Patch</string>\n  <string name=\"select_from_storage\">Selectați din stocare</string>\n  <string name=\"select_from_storage_description\">Selectați un fișier APK din stocare folosind selectorul de fișiere</string>\n  <string name=\"suggested_version_info\">Versiune sugerată: %s</string>\n  <string name=\"type_anything\">Introduceți orice pentru a continua</string>\n  <string name=\"search\">Căutați patch-uri…</string>\n  <string name=\"apply\">Aplicați</string>\n  <string name=\"help\">Ajutor</string>\n  <string name=\"back\">Înapoi</string>\n  <string name=\"warning\">Avertisment</string>\n  <string name=\"add\">Adăugați</string>\n  <string name=\"enable\">Activează</string>\n  <string name=\"disable\">Dezactivează</string>\n  <string name=\"close\">Închideți</string>\n  <string name=\"clear\">Goliți</string>\n  <string name=\"system\">Sistem</string>\n  <string name=\"light\">Deschis</string>\n  <string name=\"dark\">Întunecat</string>\n  <string name=\"appearance\">Aspect</string>\n  <string name=\"networking\">Rețea</string>\n  <string name=\"allow_metered_networks\">Permiteți rețele cu contorizare</string>\n  <string name=\"allow_metered_networks_description\">Permite actualizări automate pe rețele cu contorizare.\\n    Aplicația ar putea totuși avertiza cu privire la rețelele cu contorizare pentru operațiuni manuale.</string>\n  <string name=\"downloaded_apps\">Aplicații descărcate</string>\n  <string name=\"process_runtime\">Rulați Patcher într-un alt proces (experimental)</string>\n  <string name=\"process_runtime_description\">Acest lucru este mai rapid și permite Patcher-ului să utilizeze mai multă memorie</string>\n  <string name=\"process_runtime_memory_limit\">Limita de memorie pentru procesul Patcher</string>\n  <string name=\"process_runtime_memory_limit_description\">Cantitatea maximă de memorie pe care o poate utiliza procesul Patcher</string>\n  <string name=\"debug_logs_export\">Exportați jurnalele de depanare</string>\n  <string name=\"debug_logs_export_read_failed\">Eroare la citirea jurnalelor (cod de ieșire %d)</string>\n  <string name=\"debug_logs_export_failed\">Eroare la exportarea jurnalelor</string>\n  <string name=\"debug_logs_export_success\">Jurnale exportate</string>\n  <string name=\"api_url\">URL API</string>\n  <string name=\"api_url_description\">API-ul utilizat pentru a descărca fișierele necesare</string>\n  <string name=\"api_url_dialog_title\">Schimbați URL-ul API</string>\n  <string name=\"api_url_dialog_description\">Schimbați URL-ul API al ReVanced Manager. ReVanced Manager utilizează API-ul pentru a descărca patch-uri și actualizări.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager se conectează la API pentru a descărca patch-uri și actualizări. Asigurați-vă că aveți încredere în acesta.</string>\n  <string name=\"api_url_dialog_save\">Setare</string>\n  <string name=\"api_url_dialog_reset\">Resetare URL API</string>\n  <string name=\"device\">Dispozitiv</string>\n  <string name=\"device_android_version\">Versiune Android</string>\n  <string name=\"device_model\">Model</string>\n  <string name=\"device_architectures\">Arhitecturi CPU</string>\n  <string name=\"device_memory_limit\">Limite de memorie</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normal) - %2$dMB (Mare)</string>\n  <string name=\"patches_force_download\">Forțează descărcarea tuturor patch-urilor</string>\n  <string name=\"patches_reset\">Resetare patch-uri</string>\n  <string name=\"reset_onboarding\">Resetați integrarea</string>\n  <string name=\"reset_onboarding_description\">Afișați ecranul de integrare la următoarea lansare a aplicației</string>\n  <string name=\"patching\">Aplicare patch-uri</string>\n  <string name=\"signing\">Semnare</string>\n  <string name=\"storage\">Stocare</string>\n  <string name=\"no_patch_found\">Nu s-a găsit niciun patch. Verificați-vă patch-urile</string>\n  <string name=\"tab_apps\">Aplicații</string>\n  <string name=\"tab_patches\">Patch-uri</string>\n  <string name=\"delete\">Ștergeți</string>\n  <string name=\"refresh\">Reîmprospătare</string>\n  <string name=\"continue_anyways\">Continuați oricum</string>\n  <string name=\"download_another_version\">Descărcați o altă versiune</string>\n  <string name=\"download_app\">Descărcați aplicația</string>\n  <string name=\"download_apk\">Descărcați fișierul APK</string>\n  <string name=\"patches_download_fail\">Eroare la descărcarea patch-urilor: %s</string>\n  <string name=\"api_not_working_title\">Serviciul API este momentan indisponibil</string>\n  <string name=\"api_not_working_description\">Unele funcționalități ar putea fi afectate. Verificați conexiunea sau URL-ul API în setări.</string>\n  <string name=\"patches_replace_fail\">Eroare la importarea patch-urilor: %s</string>\n  <string name=\"no_patched_apps_found\">Nu au fost găsite aplicații patch-uite</string>\n  <string name=\"no_patched_apps_description\">Momentan nu aveți aplicații patch-uite despre care să știm. Schimbați asta prin patch-uirea primei aplicații!</string>\n  <string name=\"patched_apps_section_title\">Aplicații modificate</string>\n  <string name=\"patchable_apps_section_title\">Aplicații ce pot fi modificate</string>\n  <string name=\"no_patches_found\">Nu au fost găsite patch-uri</string>\n  <string name=\"no_patches_description\">Nu aveți încă niciun patch. Adăugați patch-uri atingând butonul de mai jos!</string>\n  <string name=\"tap_on_patches\">Atingeți patch-urile pentru a obține mai multe informații despre ele</string>\n  <string name=\"patches_selected\">%s selectate</string>\n  <string name=\"incompatible_patches\">Patch-uri incompatibile</string>\n  <string name=\"universal_patches\">Patch-uri universale</string>\n  <string name=\"patch_selection_reset_toast\">Selecția de patch-uri și opțiunile au fost resetate la valorile implicite recomandate</string>\n  <string name=\"patch_options_reset_toast\">Opțiunile de patch-uri au fost resetate</string>\n  <string name=\"non_suggested_version_warning_title\">Versiune nesugerată</string>\n  <string name=\"non_suggested_version_warning_description\">Versiunea aplicației selectate nu corespunde versiunii sugerate.\\nVă rugăm să utilizați versiunea sugerată: %s\\n\\nPentru a continua oricum, dezactivați „Solicită versiunea sugerată a aplicației” din setările avansate.</string>\n  <string name=\"selection_warning_title\">Încetați utilizarea valorilor implicite?</string>\n  <string name=\"selection_warning_description\">Este recomandat să utilizați selecția și opțiunile de patch-uri implicite. Modificarea acestora poate duce la probleme neașteptate.\\n\\nTrebuie să activați „Permite modificarea selecției și opțiunilor de patch-uri” din setările avansate înainte de a comuta patch-urile.</string>\n  <string name=\"universal_patch_warning_description\">Patch-urile universale au o utilizare mai generalizată și nu funcționează la fel de fiabil ca patch-urile care vizează aplicații specifice. Puteți întâmpina probleme în timpul utilizării acestora.\\n\\nTrebuie să activați „Permite utilizarea patch-urilor universale” din setările avansate înainte de a utiliza patch-uri universale.</string>\n  <string name=\"this_version\">Această versiune</string>\n  <string name=\"universal\">Orice aplicație</string>\n  <string name=\"search_patches\">Căutați patch-uri</string>\n  <string name=\"app_version_not_compatible\">Acest patch nu este compatibil cu versiunea selectată a aplicației (%1$s)\\n\\nEste compatibil doar cu următoarele versiuni: %2$s</string>\n  <string name=\"continue_with_version\">Continuați cu această versiune?</string>\n  <string name=\"version_not_compatible\">Nu toate patch-urile sunt compatibile cu această versiune (%s). Doriți să continuați oricum?</string>\n  <string name=\"download_application\">Descărcați aplicația?</string>\n  <string name=\"app_not_installed\">Aplicația selectată nu este instalată. Doriți să o descărcați?</string>\n  <string name=\"failed_to_load_apk\">Eroare la încărcarea APK</string>\n  <string name=\"split_apk_not_supported\">APK-urile divizate nu pot fi patch-uite</string>\n  <string name=\"loading\">Se încarcă…</string>\n  <string name=\"not_installed\">Neinstalat</string>\n  <string name=\"installed\">Instalat</string>\n  <string name=\"app_info\">Informații aplicație</string>\n  <string name=\"uninstall\">Dezinstalați</string>\n  <string name=\"unpatch\">Anulați patch-ul</string>\n  <string name=\"repatch\">Reaplicați patch-ul</string>\n  <string name=\"install_type\">Tip de instalare</string>\n  <string name=\"package_name\">Nume pachet</string>\n  <string name=\"original_package_name\">Nume pachet original</string>\n  <string name=\"applied_patches\">Corecții aplicate</string>\n  <string name=\"view_applied_patches\">Vizualizați corecțiile aplicate</string>\n  <string name=\"default_install\">Implicit</string>\n  <string name=\"mount_install\">Montează</string>\n  <string name=\"mounted\">Montat</string>\n  <string name=\"not_mounted\">Nu este montat</string>\n  <string name=\"mount\">Montează</string>\n  <string name=\"unmount\">Demontați</string>\n  <string name=\"failed_to_mount\">Eșec la montare: %s</string>\n  <string name=\"failed_to_unmount\">Eșec la demontare: %s</string>\n  <string name=\"unpatch_app\">Anulezi corecțiile aplicației?</string>\n  <string name=\"unpatch_description\">Sigur doriți să anulați corecțiile acestei aplicații?</string>\n  <string name=\"downloader_invalid_version\">Descărcătorul nu a preluat versiunea corectă</string>\n  <string name=\"downloader_app_not_found\">Descărcătorul nu a găsit aplicația</string>\n  <string name=\"downloader_error\">Eroare descărcător: %s</string>\n  <string name=\"no_downloaders_installed\">Nu sunt instalate descărcătoare de aplicații!</string>\n  <string name=\"no_downloaders_trusted\">Niciun descărcător de aplicații nu a fost de încredere! Vă rugăm să verificați setările.</string>\n  <string name=\"already_patched\">Deja corectat</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filtru</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Compatibilitate</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Pachete</string>\n  <string name=\"patch_selector_sheet_actions_title\">Acțiuni</string>\n  <string name=\"restore_default_selection\">Restabilește selecția implicită</string>\n  <string name=\"deselect_all\">Deselectează tot</string>\n  <string name=\"invert_selection\">Inversează selecția</string>\n  <string name=\"deselect_all_except\">Deselectați tot, cu excepția %s</string>\n  <string name=\"scope_dialog_title\">Aplicați la</string>\n  <string name=\"scope_all_patches\">Toate corecțiile</string>\n  <string name=\"scope_bundle_patches\">Doar %s</string>\n  <string name=\"string_option_menu_description\">Mai multe opțiuni</string>\n  <string name=\"option_preset_custom_value\">Valoare personalizată</string>\n  <string name=\"path_selector\">Selectați din stocare</string>\n  <string name=\"path_selector_parent_dir\">Director anterior</string>\n  <string name=\"path_selector_dirs\">Directoare</string>\n  <string name=\"path_selector_files\">Fișiere</string>\n  <string name=\"show_password_field\">Afișează parola</string>\n  <string name=\"hide_password_field\">Ascunde parola</string>\n  <string name=\"installer\">Program de instalare</string>\n  <string name=\"install_app\">Instalează</string>\n  <string name=\"install_app_success\">Aplicație instalată</string>\n  <string name=\"install_app_fail\">Eșec la instalarea aplicației: %s</string>\n  <string name=\"reinstall_app_fail\">Eșec la reinstalarea aplicației: %s</string>\n  <string name=\"uninstall_app_fail\">Eșec la dezinstalarea aplicației: %s</string>\n  <string name=\"open_app\">Deschide</string>\n  <string name=\"save_apk\">Salvați APK</string>\n  <string name=\"save_apk_success\">APK salvat</string>\n  <string name=\"sign_fail\">Eșec la semnarea APK: %s</string>\n  <string name=\"save_logs\">Salvați jurnalele</string>\n  <string name=\"save_as_file\">Salvați în fișiere</string>\n  <string name=\"export_patcher_logs\">Exportați jurnalele patcherului</string>\n  <string name=\"save_logs_success\">Jurnale salvate</string>\n  <string name=\"downloader_activity_dialog_body\">Este necesară interacțiunea utilizatorului pentru a continua cu acest descărcător.</string>\n  <string name=\"select_install_type\">Selectați tipul de instalare</string>\n  <string name=\"patcher_step_group_preparing\">Se pregătește</string>\n  <string name=\"patcher_step_load_patches\">Încărcați corecții</string>\n  <string name=\"patcher_step_unpack\">Pregătire patcher</string>\n  <string name=\"patcher_step_group_patching\">Se aplică corecții</string>\n  <string name=\"patcher_step_group_saving\">Se salvează</string>\n  <string name=\"patcher_step_write_patched\">Scrieți fișierul APK corectat</string>\n  <string name=\"patcher_step_sign_apk\">Semnați fișierul APK corectat</string>\n  <string name=\"patcher_notification_title\">Aplicarea corecțiilor în curs…</string>\n  <string name=\"patcher_notification_text\">Atingeți pentru a reveni la programul de corecții</string>\n  <string name=\"patcher_stop_confirm_title\">Opriți programul de corecții</string>\n  <string name=\"patcher_stop_confirm_description\">Sigur doriți să opriți procesul de aplicare a corecțiilor?</string>\n  <string name=\"patcher_install_in_progress\">Instalarea este în curs. Vă rugăm să așteptați</string>\n  <string name=\"execute_patches\">Executați corecțiile</string>\n  <string name=\"executing_patch\">Executați %s</string>\n  <string name=\"failed_to_execute_patch\">Eșec la executarea %s</string>\n  <string name=\"step_completed\">finalizat</string>\n  <string name=\"step_failed\">eșuat</string>\n  <string name=\"step_running\">în execuție</string>\n  <string name=\"step_waiting\">în așteptare</string>\n  <string name=\"expand_content\">extinde</string>\n  <string name=\"collapse_content\">restrânge</string>\n  <string name=\"drag_handle\">rearanjează</string>\n  <string name=\"more\">Mai mult</string>\n  <string name=\"less\">Mai puțin</string>\n  <string name=\"continue_\">Continuă</string>\n  <string name=\"dismiss\">Anulează</string>\n  <string name=\"view_announcement\">Vizualizează anunțul</string>\n  <string name=\"permanent_dismiss\">Nu mai afișa asta</string>\n  <string name=\"donate\">Donează</string>\n  <string name=\"website\">Site web</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Contact</string>\n  <string name=\"license\">Licență</string>\n  <string name=\"source\">Sursă</string>\n  <string name=\"repository\">Depozit</string>\n  <string name=\"bundle_information_by_author\">De %1$s</string>\n  <string name=\"version\">Versiune</string>\n  <string name=\"version_compatibility_warning\">Versiunea selectată ar putea fi incompatibilă cu patch-urile selectate</string>\n  <string name=\"submit_feedback\">Trimiteți o problemă sau feedback</string>\n  <string name=\"submit_feedback_description\">Ajutați-ne să îmbunătățim această aplicație</string>\n  <string name=\"developer_options\">Opțiuni dezvoltator</string>\n  <string name=\"developer_options_description\">Opțiuni pentru depanarea problemelor</string>\n  <string name=\"patches_update_success\">Actualizare reușită</string>\n  <string name=\"patches_update_unavailable\">Nicio actualizare disponibilă</string>\n  <string name=\"view_patches\">Vizualizați corecțiile</string>\n  <string name=\"patches_view_any_version\">Orice versiune</string>\n  <string name=\"patches_view_any_package\">Orice pachet</string>\n  <string name=\"patches_delete_single_dialog_description\">Sigur doriți să ștergeți „%s”?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Sigur doriți să ștergeți corecțiile selectate?</string>\n  <string name=\"announcements\">Anunțuri</string>\n  <string name=\"archive\">Arhivă</string>\n  <string name=\"about_revanced_manager\">Despre ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager este o aplicație Android care utilizează ReVanced Patcher pentru a corecta aplicațiile Android. Vă permite să descărcați și să corectați aplicații cu corecții personalizate și să gestionați procesul de aplicare a corecțiilor.</string>\n  <string name=\"developer_options_taps\">%d apăsări rămase</string>\n  <string name=\"developer_options_enabled\">Opțiuni dezvoltator activate</string>\n  <string name=\"developer_options_already_enabled\">Opțiunile dezvoltator sunt deja activate</string>\n  <string name=\"update_available\">O actualizare este disponibilă</string>\n  <string name=\"current_version\">Versiune curentă: %s</string>\n  <string name=\"new_version\">Versiune nouă: %s</string>\n  <string name=\"ready_to_install_update\">Gata de instalat actualizarea</string>\n  <string name=\"update_completed\">Actualizare instalată</string>\n  <string name=\"install_update_manager_failed\">Eșec la instalarea actualizării</string>\n  <string name=\"manual_update_check\">Verificați actualizările</string>\n  <string name=\"view_update\">Vizualizați actualizarea</string>\n  <string name=\"manual_update_check_description\">Verificați manual actualizările</string>\n  <string name=\"update_checking_manager\">Verificați actualizările la pornire</string>\n  <string name=\"update_checking_manager_description\">Verificați versiunile noi ale ReVanced Manager la pornirea aplicației</string>\n  <string name=\"update_checking_downloader\">Verificați actualizările descărcătoarelor ReVanced la pornire</string>\n  <string name=\"update_checking_downloader_description\">Verificați actualizările pentru descărcătoarele ReVanced instalate la pornirea aplicației</string>\n  <string name=\"manager_prereleases\">Utilizați versiuni pre-lansare</string>\n  <string name=\"manager_prereleases_description\">Utilizați versiuni pre-lansare ale ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Versiunile pre-lansare pot fi instabile și pot conține erori. Puteți întâmpina blocări, pierderi de date sau alte probleme neașteptate. Activați aceasta numai dacă sunteți confortabil cu aceste riscuri.</string>\n  <string name=\"changelog\">Vizualizați istoricul modificărilor</string>\n  <string name=\"changelog_loading\">Se încarcă jurnalul de modificări</string>\n  <string name=\"changelog_download_fail\">Eșec la descărcarea jurnalului de modificări: %s</string>\n  <string name=\"changelog_description\">Vedeți cele mai recente modificări din această actualizare</string>\n  <string name=\"battery_optimization_notification\">Optimizările bateriei trebuie dezactivate pentru ca ReVanced Manager să funcționeze corect în fundal. Faceți clic aici pentru a dezactiva optimizările.</string>\n  <string name=\"installing_manager_update\">Se instalează actualizarea…</string>\n  <string name=\"downloading_manager_update\">Se descarcă actualizarea…</string>\n  <string name=\"download_manager_failed\">Eșec la descărcarea actualizării: %s</string>\n  <string name=\"cancel\">Anulează</string>\n  <string name=\"save\">Salvați</string>\n  <string name=\"save_with_count\">Salvați (%1$s)</string>\n  <string name=\"update\">Actualizare</string>\n  <string name=\"empty\">Gol</string>\n  <string name=\"installing_message\">Atingeți <b>Actualizare</b> când vi se solicită.\nReVanced Manager se va închide la actualizare.</string>\n  <string name=\"no_changelogs_found\">Niciun jurnal de modificări găsit</string>\n  <string name=\"just_now\">Chiar acum</string>\n  <string name=\"minutes_ago\">acum %sm</string>\n  <string name=\"hours_ago\">acum %sh</string>\n  <string name=\"days_ago\">acum %sd</string>\n  <string name=\"invalid_date\">Dată invalidă</string>\n  <string name=\"disable_battery_optimization\">Dezactivați optimizarea bateriei</string>\n  <string name=\"input_dialog_value_invalid\">Valoare invalidă</string>\n  <string name=\"option_required\">Această opțiune este obligatorie</string>\n  <string name=\"required_options_screen\">Opțiuni obligatorii</string>\n  <string name=\"failed_to_check_updates\">Eșec la verificarea actualizărilor: %s</string>\n  <string name=\"no_update_available\">Nicio actualizare disponibilă</string>\n  <string name=\"no_announcements_found\">Nu au fost găsite anunțuri</string>\n  <string name=\"update_check\">Se verifică actualizările…</string>\n  <string name=\"dismiss_temporary\">Nu acum</string>\n  <string name=\"update_available_dialog_description\">O nouă versiune a ReVanced Manager (%s) este disponibilă.</string>\n  <string name=\"failed_to_download_update\">Eșec la descărcarea actualizării: %s</string>\n  <string name=\"download\">Descărcați</string>\n  <string name=\"download_confirmation_metered\">Sunteți conectat la o rețea cu taxare pe bază de utilizare, iar furnizorul de servicii vă poate percepe taxe pentru date.\n\nDoriți să continuați?</string>\n  <string name=\"download_update_confirmation\">Descărcați actualizarea?</string>\n  <string name=\"no_contributors_found\">Niciun contribuitor găsit</string>\n  <string name=\"select\">Selectați</string>\n  <string name=\"select_deselect_all\">Selectați sau deselectați tot</string>\n  <string name=\"select_patches_type_dialog_description\">Adăugați corecții noi de la URL sau din fișiere locale</string>\n  <string name=\"local_patches_description\">Adăugați corecții din stocarea locală.</string>\n  <string name=\"remote_patches_description\">Adăugați corecții de la URL. Corecțiile se pot actualiza automat.</string>\n  <string name=\"recommended\">Recomandat</string>\n  <string name=\"installation_failed_dialog_title\">Instalare eșuată</string>\n  <string name=\"installation_cancelled_dialog_title\">Instalare anulată</string>\n  <string name=\"installation_blocked_dialog_title\">Instalare blocată</string>\n  <string name=\"installation_conflict_dialog_title\">Conflict la instalare</string>\n  <string name=\"installation_incompatible_dialog_title\">Instalare incompatibilă</string>\n  <string name=\"installation_invalid_dialog_title\">Instalare invalidă</string>\n  <string name=\"installation_storage_issue_dialog_title\">Spațiu de stocare insuficient</string>\n  <string name=\"installation_timeout_dialog_title\">Instalarea a expirat</string>\n  <string name=\"installation_failed_description\">Instalarea a eșuat din cauza unui motiv necunoscut. Încercați din nou?</string>\n  <string name=\"installation_aborted_description\">Instalarea a fost anulată manual. Încercați din nou?</string>\n  <string name=\"installation_blocked_description\">Instalarea a fost blocată. Verificați setările de securitate ale dispozitivului și încercați din nou.</string>\n  <string name=\"installation_conflict_description\">Instalarea a fost împiedicată de o instalare existentă a aplicației. Dezinstalați aplicația instalată și încercați din nou?</string>\n  <string name=\"installation_incompatible_description\">Aplicația este incompatibilă cu acest dispozitiv. Utilizați un APK compatibil cu acest dispozitiv și încercați din nou.</string>\n  <string name=\"installation_invalid_description\">Aplicația este invalidă. Dezinstalați aplicația și încercați din nou?</string>\n  <string name=\"installation_storage_issue_description\">Aplicația nu a putut fi instalată din cauza spațiului de stocare insuficient. Eliberați spațiu și încercați din nou.</string>\n  <string name=\"installation_timeout_description\">Instalarea a durat prea mult. Încercați din nou?</string>\n  <string name=\"reinstall\">Reinstalează</string>\n  <string name=\"show\">Afișează</string>\n  <string name=\"debugging\">Depanare</string>\n  <string name=\"about_device\">Despre dispozitiv</string>\n  <string name=\"enter_url\">Introduceți URL</string>\n  <string name=\"next\">Următorul</string>\n  <string name=\"auto_update\">Actualizare automată</string>\n  <string name=\"add_patches\">Adăugați corecții</string>\n  <string name=\"auto_update_description\">Actualizați automat când o nouă versiune este disponibilă</string>\n  <string name=\"patches_prereleases\">Utilizați versiuni pre-lansare</string>\n  <string name=\"patches_prereleases_description\">Utilizați versiuni pre-lansare ale %s</string>\n  <string name=\"patches_url\">URL corecții</string>\n  <string name=\"incompatible_patches_dialog\">Aceste corecții nu sunt compatibile cu versiunea selectată a aplicației (%1$s).\n\nFaceți clic pe corecții pentru a vedea mai multe detalii.</string>\n  <string name=\"incompatible_patch\">Corecție incompatibilă</string>\n  <string name=\"any_version\">Oricare</string>\n  <string name=\"never_show_again\">Nu mai afișa niciodată</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Afișați mesajul de actualizare la pornire</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Afișați o notificare pop-up ori de câte ori este disponibilă o nouă actualizare la pornire</string>\n  <string name=\"failed_to_import_keystore\">Eșec la importarea keystore-ului</string>\n  <string name=\"export\">Exportă</string>\n  <string name=\"confirm\">Confirmați</string>\n  <string name=\"new_announcement\">Anunț nou:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d plasture</item>\n    <item quantity=\"few\">%d plasturi</item>\n    <item quantity=\"other\">%d plasturi</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Executați %d plasture</item>\n    <item quantity=\"few\">Executați %d plasturi</item>\n    <item quantity=\"other\">Executați %d plasturi</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d selectat</item>\n    <item quantity=\"few\">%d selectate</item>\n    <item quantity=\"other\">%d selectate</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ru-rRU/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Патчер</string>\n  <string name=\"patches\">Патчи</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Менеджер</string>\n  <string name=\"onboarding_welcome_to\">Добро пожаловать в</string>\n  <string name=\"onboarding_welcome_back\">Привет! Это новый</string>\n  <string name=\"onboarding_apps_subtitle\">Вы можете выбрать приложение для патчинга сейчас или сделать это позже</string>\n  <string name=\"onboarding_apps_network_error\">Не удалось загрузить патчи, так как сеть недоступна или нестабильна. Подключитесь к стабильной сети и попробуйте снова.</string>\n  <string name=\"onboarding_updates_subtitle\">Настройте автоматические обновления, чтобы ReVanced Manager и патчи были актуальными</string>\n  <string name=\"banner_sources_not_downloaded_description\">Патчи и загрузчики не удалось загрузить во время установки. Нажмите «Обновить», чтобы загрузить их.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager подключится к %s для загрузки первоначальных версий, если ваше устройство подключено к Интернету.</string>\n  <string name=\"retry\">Повторить</string>\n  <string name=\"onboarding_skip\">Пока пропустить</string>\n  <string name=\"onboarding_recommended_version\">Рекомендуемая версия: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Пропустить разрешения?</string>\n  <string name=\"onboarding_permissions_skip_description\">Без необходимых разрешений некоторые функции могут работать некорректно. Вы можете предоставить их позже в настройках приложения.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Все равно пропустить</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager требуется несколько разрешений для корректной работы</string>\n  <string name=\"permission_install_apps\">Установка неизвестных приложений</string>\n  <string name=\"permission_install_apps_description\">Требуется для установки пропатченных приложений</string>\n  <string name=\"permission_notifications\">Уведомления</string>\n  <string name=\"permission_notifications_description\">Позволяет выполнять непрерывное патчинг в фоновом режиме</string>\n  <string name=\"permission_battery\">Оптимизация батареи</string>\n  <string name=\"permission_battery_description\">Предотвращает прерывание патчинга в фоновом режиме</string>\n  <string name=\"permission_grant\">Предоставить</string>\n  <string name=\"downloader_host_permission_label\">Хост загрузчика ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Используется для управления доступом к загрузчикам ReVanced Manager. Только ReVanced Manager имеет эту функцию.</string>\n  <string name=\"toast_copied_to_clipboard\">Скопировано!</string>\n  <string name=\"copy_to_clipboard\">Копировать в буфер обмена</string>\n  <string name=\"dashboard\">Панель управления</string>\n  <string name=\"settings\">Настройки</string>\n  <string name=\"select_app\">Выберите приложение</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d выбрано</string>\n  <string name=\"fab_patch_app\">Пропатчить приложение</string>\n  <string name=\"fab_add_patches\">Добавить патчи</string>\n  <string name=\"new_downloader_notification\">Доступны новые загрузчики. Щелкните здесь, чтобы настроить их.</string>\n  <string name=\"unsupported_architecture_warning\">Патчинг на данной архитектуре устройства не поддерживается и, скорее всего, завершится неудачей.</string>\n  <string name=\"import_\">Импортировать</string>\n  <string name=\"import_patches\">Импортировать патчи</string>\n  <string name=\"file_field_set\">Выбрано</string>\n  <string name=\"file_field_not_set\">Не выбрано</string>\n  <string name=\"field_not_set\">Не установлено</string>\n  <string name=\"patches_missing\">Отсутствует</string>\n  <string name=\"patches_error\">Ошибка</string>\n  <string name=\"patches_error_description\">Патчи не могут быть загружены. Нажмите, чтобы просмотреть ошибку</string>\n  <string name=\"patches_not_downloaded\">Патчи не были загружены.</string>\n  <string name=\"patches_name_default\">Патчи</string>\n  <string name=\"patches_name_fallback\">Без названия</string>\n  <string name=\"android_11_bug_dialog_title\">Ошибка Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">Разрешение на установку приложения должно быть предоставлено заранее, чтобы избежать ошибки в системе Android 11, которая негативно скажется на пользовательском опыте.</string>\n  <string name=\"no_network_toast\">Нет доступного интернет-соединения</string>\n  <string name=\"selected_app_meta_any_version\">Любая доступная версия</string>\n  <string name=\"app_source_dialog_title\">Выберите источник</string>\n  <string name=\"app_source_dialog_option_auto\">Автоматический</string>\n  <string name=\"app_source_dialog_option_auto_description\">Использовать установленное приложение, затем загруженный APK, затем доступные загрузчики</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Совместимые приложения или загрузчики не найдены</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Смонтированные приложения не могут быть повторно пропатчены без root-доступа</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Версия %s не соответствует рекомендованной</string>\n  <string name=\"patch_item_description\">Начать патчинг приложения</string>\n  <string name=\"patch_selector_item\">Выберите патчи</string>\n  <string name=\"patch_selector_item_description\">%d патчей выбрано</string>\n  <string name=\"patch_selection_changed_warning\">Выбор исправлений был изменен</string>\n  <string name=\"no_patches_selected\">Патчи не выбраны</string>\n  <string name=\"network_unavailable_warning\">Ваше устройство не подключено к интернету. Загрузка позже завершится неудачей.</string>\n  <string name=\"network_metered_warning\">Вы используете лимитное соединение. Ваш провайдер может взимать плату за передачу данных.</string>\n  <string name=\"apk_source_selector_item\">Выберите источник APK</string>\n  <string name=\"apk_source_auto\">Автоматически</string>\n  <string name=\"apk_source_auto_installed\">Автоматически · Используется установленный APK</string>\n  <string name=\"apk_source_auto_downloaded\">Автоматически · Используется загруженный APK</string>\n  <string name=\"apk_source_auto_downloader\">Автоматически · Используя доступные загрузчики</string>\n  <string name=\"apk_source_auto_storage\">Автоматически · Выбрать из хранилища</string>\n  <string name=\"apk_source_downloader\">Используется %s</string>\n  <string name=\"apk_source_installed\">Используется установленный APK</string>\n  <string name=\"apk_source_local\">Используется локальный файл APK</string>\n  <string name=\"apk_source_downloaded\">Уже загружено</string>\n  <string name=\"legacy_import_failed\">Не удалось импортировать устаревшие настройки</string>\n  <string name=\"auto_updates_dialog_title\">Настроить обновления</string>\n  <string name=\"auto_updates_dialog_description\">Вы хотите, чтобы ReVanced Manager периодически проверял наличие обновлений для следующих компонентов?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Патчи ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Загрузчики</string>\n  <string name=\"auto_updates_dialog_note\">Эти настройки можно изменить позже.\n\n    ReVanced Manager подключится к %s для загрузки первоначальных версий, если ваше устройство подключено к Интернету.</string>\n  <string name=\"announcements_filter_tag\">Фильтровать по тегу</string>\n  <string name=\"announcements_show_archived\">Показать архивированные</string>\n  <string name=\"general\">Общие настройки</string>\n  <string name=\"general_description\">Язык, тема, динамический цвет</string>\n  <string name=\"updates\">Обновления</string>\n  <string name=\"updates_description\">Проверить наличие обновлений и просмотреть список изменений</string>\n  <string name=\"downloads\">Загрузки</string>\n  <string name=\"downloads_description\">Загрузчики и загруженные приложения</string>\n  <string name=\"import_export\">Импорт &amp; экспорт</string>\n  <string name=\"import_export_description\">Хранилище ключей, параметры и выбор патчей</string>\n  <string name=\"advanced\">Дополнительно</string>\n  <string name=\"advanced_description\">URL API, лимит памяти, отладка</string>\n  <string name=\"safeguards_toggled_warning\">Защитные механизмы были переключены</string>\n  <string name=\"about\">Об интеграции</string>\n  <string name=\"about_app_name\">О %1$s</string>\n  <string name=\"opensource_licenses\">Лицензии открытого исходного кода</string>\n  <string name=\"opensource_licenses_description\">Посмотреть все библиотеки, использованные для создания этого приложения</string>\n  <string name=\"contributors\">Авторы</string>\n  <string name=\"contributors_description\">Посмотреть авторов ReVanced</string>\n  <string name=\"dynamic_color\">Динамический цвет</string>\n  <string name=\"dynamic_color_description\">Адаптировать цвета к обоям</string>\n  <string name=\"pure_black_theme\">Чисто черная тема</string>\n  <string name=\"pure_black_theme_description\">Использовать чисто черные фоны для темной темы</string>\n  <string name=\"theme\">Тема</string>\n  <string name=\"theme_description\">Выбрать между светлой или темной темой</string>\n  <string name=\"language\">Язык</string>\n  <string name=\"language_description\">Выберите язык отображения приложения</string>\n  <string name=\"language_system_default\">Системный по умолчанию</string>\n  <string name=\"search_languages\">Поиск языков…</string>\n  <string name=\"safeguards\">Меры предосторожности</string>\n  <string name=\"patch_compat_check\">Отключить проверку совместимости версий</string>\n  <string name=\"patch_compat_check_description\">Не ограничивать патчи совместимыми версиями приложений</string>\n  <string name=\"patch_compat_check_confirmation\">Выбор несовместимых патчей может привести к неработоспособности приложения.\\n\\nВы хотите продолжить?</string>\n  <string name=\"suggested_version_safeguard\">Требовать рекомендованную версию приложения</string>\n  <string name=\"suggested_version_safeguard_description\">Принудительно использовать рекомендованную версию приложения</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Выбор приложения, которое не является рекомендованной версией, может вызвать непредвиденные проблемы.\\n\\nВы хотите продолжить?</string>\n  <string name=\"patch_selection_safeguard\">Разрешить изменение выбора и параметров патчей</string>\n  <string name=\"patch_selection_safeguard_description\">Не препятствовать выбору, отмене выбора патчей и настройке параметров</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Изменение выбора патчей может вызвать непредвиденные проблемы.\\n\\nВключить в любом случае?</string>\n  <string name=\"universal_patches_safeguard\">Разрешить использование универсальных патчей</string>\n  <string name=\"universal_patches_safeguard_description\">Не препятствовать использованию универсальных патчей</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Универсальные патчи протестированы не так хорошо, как те, что предназначены для конкретных приложений.\\n\\nВключить в любом случае?</string>\n  <string name=\"keystore\">Хранилище ключей</string>\n  <string name=\"patches_selections\">Выбор патчей</string>\n  <string name=\"import_keystore\">Импортировать хранилище ключей</string>\n  <string name=\"import_keystore_description\">Импортировать пользовательское хранилище ключей</string>\n  <string name=\"import_keystore_dialog_title\">Введите учетные данные хранилища ключей</string>\n  <string name=\"import_keystore_dialog_description\">Вам потребуется ввести учетные данные хранилища ключей для его импорта.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Имя пользователя (Псевдоним)</string>\n  <string name=\"import_keystore_dialog_password_field\">Пароль</string>\n  <string name=\"import_keystore_dialog_button\">Импортировать</string>\n  <string name=\"import_keystore_wrong_credentials\">Неверные учетные данные хранилища ключей</string>\n  <string name=\"import_keystore_success\">Хранилище ключей импортировано</string>\n  <string name=\"export_keystore\">Экспортировать хранилище ключей</string>\n  <string name=\"export_keystore_description\">Экспортировать текущее хранилище ключей</string>\n  <string name=\"export_keystore_unavailable\">Нет хранилища ключей для экспорта</string>\n  <string name=\"export_keystore_success\">Хранилище ключей экспортировано</string>\n  <string name=\"regenerate_keystore\">Перегенерировать хранилище ключей</string>\n  <string name=\"regenerate_keystore_description\">Сгенерировать новое хранилище ключей</string>\n  <string name=\"regenerate_keystore_dialog_description\">Вы собираетесь перегенерировать хранилище ключей, которое менеджер будет использовать во время процесса патчинга.\\n\\nВы не сможете обновлять ранее установленные приложения из этого источника.</string>\n  <string name=\"regenerate_keystore_success\">Хранилище ключей успешно заменено</string>\n  <string name=\"import_patch_selection\">Импортировать выбор патчей</string>\n  <string name=\"import_patch_selection_description\">Импортировать выбор патчей из файла JSON</string>\n  <string name=\"import_patch_selection_fail\">Не удалось импортировать выбор патчей: %s</string>\n  <string name=\"import_patch_selection_success\">Выбор патчей импортирован</string>\n  <string name=\"select_bundle_for_import\">Выберите пакет для импорта</string>\n  <string name=\"export_patch_selection\">Экспортировать выбор патчей</string>\n  <string name=\"export_patch_selection_description\">Экспортировать выбор патчей в файл JSON</string>\n  <string name=\"export_patch_selection_fail\">Не удалось экспортировать выбор патчей: %s</string>\n  <string name=\"export_patch_selection_success\">Выбор патчей экспортирован</string>\n  <string name=\"select_bundle_for_export\">Выберите пакет для экспорта</string>\n  <string name=\"patch_selection_packages\">Приложения с сохраненными выборками</string>\n  <string name=\"patch_selection_entries\">Всего выбрано патчей</string>\n  <string name=\"reset_configuration\">Сбросить конфигурацию</string>\n  <string name=\"reset_patch_selection\">Выбор патчей</string>\n  <string name=\"reset_patch_selection_description\">Сбросить сохраненный выбор патчей</string>\n  <string name=\"reset_patch_options\">Параметры патчей</string>\n  <string name=\"reset_patch_options_description\">Сбросить сохраненные параметры патчей</string>\n  <string name=\"reset_patch_selection_success\">Выбор патчей сброшен</string>\n  <string name=\"patch_selection_reset_all\">Сбросить выбор патчей глобально</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Вы собираетесь сбросить все выбранные патчи. Вам потребуется выбрать каждый патч вручную заново.</string>\n  <string name=\"patch_selection_reset_all_description\">Сбрасывает все выбранные патчи</string>\n  <string name=\"patch_selection_reset_package\">Сбросить выбор патчей для приложения</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Вы собираетесь сбросить выбор патчей для приложения \\\"%s\\\". Вам потребуется выбрать каждый патч вручную заново.</string>\n  <string name=\"patch_selection_reset_package_description\">Сбрасывает выбор патчей для одного приложения</string>\n  <string name=\"patch_selection_reset_patches\">Сбросить выбор патчей (одиночный)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Вы собираетесь сбросить выбор патчей для \\\"%s\\\". Вам придётся вручную выбрать каждый патч заново.</string>\n  <string name=\"patch_selection_reset_patches_description\">Сбрасывает выбор патчей для определённой коллекции патчей</string>\n  <string name=\"patch_options_reset_package\">Сбросить параметры патчей для приложения</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Вы собираетесь сбросить параметры патчей для приложения \\\"%s\\\". Вам придётся повторно применить каждый параметр.</string>\n  <string name=\"patch_options_reset_package_description\">Сбрасывает параметры патчей для одного приложения</string>\n  <string name=\"patch_options_reset_patches\">Сбросить параметры патчей (одиночный)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Вы собираетесь сбросить параметры патчей для \\\"%s\\\". Вам придётся повторно применить каждый параметр.</string>\n  <string name=\"patch_options_reset_patches_description\">Сбрасывает параметры патчей для определённой коллекции патчей</string>\n  <string name=\"patch_options_reset_all\">Сбросить параметры патчей глобально</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Вы собираетесь сбросить все параметры патчей. Вам придётся повторно применить каждый параметр.</string>\n  <string name=\"patch_options_reset_all_description\">Сбрасывает все параметры патчей</string>\n  <string name=\"downloaders\">Загрузчики</string>\n  <string name=\"downloader_prereleases\">Использовать предварительные версии</string>\n  <string name=\"downloader_prereleases_description\">Использовать предварительные версии основного загрузчика</string>\n  <string name=\"downloader_state_loaded\">Загружено</string>\n  <string name=\"downloader_state_failed\">Не удалось загрузить. Нажмите, чтобы узнать больше</string>\n  <string name=\"downloader_state_missing\">Отсутствует</string>\n  <string name=\"downloader_delete_apps_title\">Удалить выбранные приложения</string>\n  <string name=\"downloader_delete_apps_description\">Вы уверены, что хотите удалить выбранные приложения?</string>\n  <string name=\"downloader_delete_single_description\">Вы уверены, что хотите удалить \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Загруженных приложений не найдено.</string>\n  <string name=\"downloader_settings_no_apps_description\">Приложения, загруженные через ReVanced Manager, появятся здесь.</string>\n  <string name=\"downloader_url\">URL загрузчика</string>\n  <string name=\"downloader_add\">Добавить загрузчик</string>\n  <string name=\"select_downloader_type_dialog_description\">Добавить новые загрузчики по URL или из локальных файлов</string>\n  <string name=\"local_downloaders_description\">Добавить загрузчики из локального хранилища.</string>\n  <string name=\"remote_downloaders_description\">Добавить загрузчики по URL. Могут автоматически обновляться.</string>\n  <string name=\"install_revanced_downloaders\">Установите загрузчики, чтобы получать приложения непосредственно в ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Установить загрузчики ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Отменить установку загрузчиков?</string>\n  <string name=\"cancel_downloader_install_description\">Выполняется установка загрузчиков. Если вы сейчас выйдете, загрузка будет отменена.</string>\n  <string name=\"downloader_sources_unavailable_title\">Эти загрузчики отсутствуют</string>\n  <string name=\"downloader_sources_unavailable_description\">Нажмите на кнопку обновления, чтобы исправить это.</string>\n  <string name=\"downloader_update_failed\">Не удалось обновить загрузчик: %s</string>\n  <string name=\"downloader_replace_fail\">Не удалось импортировать загрузчик: %s</string>\n  <string name=\"search_apps\">Поиск приложений…</string>\n  <string name=\"loading_body\">Загрузка…</string>\n  <string name=\"downloading_patches\">Загрузка патчей…</string>\n  <string name=\"options\">Параметры</string>\n  <string name=\"ok\">ОК</string>\n  <string name=\"yes\">Да</string>\n  <string name=\"no\">Нет</string>\n  <string name=\"edit\">Редактировать</string>\n  <string name=\"dialog_input_placeholder\">Значение</string>\n  <string name=\"reset\">Сбросить</string>\n  <string name=\"share\">Поделиться</string>\n  <string name=\"patch\">Патч</string>\n  <string name=\"select_from_storage\">Выбрать из хранилища</string>\n  <string name=\"select_from_storage_description\">Выберите файл APK из хранилища с помощью файлового менеджера</string>\n  <string name=\"suggested_version_info\">Рекомендуемая версия: %s</string>\n  <string name=\"type_anything\">Введите что-либо для продолжения</string>\n  <string name=\"search\">Поиск патчей…</string>\n  <string name=\"apply\">Применить</string>\n  <string name=\"help\">Помощь</string>\n  <string name=\"back\">Назад</string>\n  <string name=\"warning\">Внимание</string>\n  <string name=\"add\">Добавить</string>\n  <string name=\"enable\">Включить</string>\n  <string name=\"disable\">Отключить</string>\n  <string name=\"close\">Закрыть</string>\n  <string name=\"clear\">Очистить</string>\n  <string name=\"system\">Система</string>\n  <string name=\"light\">Светлая</string>\n  <string name=\"dark\">Тёмная</string>\n  <string name=\"appearance\">Внешний вид</string>\n  <string name=\"networking\">Сеть</string>\n  <string name=\"allow_metered_networks\">Разрешить лимитные сети</string>\n  <string name=\"allow_metered_networks_description\">Разрешает автоматические обновления в лимитных сетях.\\n    Приложение всё ещё может предупреждать о лимитных сетях для ручных операций.</string>\n  <string name=\"downloaded_apps\">Загруженные приложения</string>\n  <string name=\"process_runtime\">Запускать Patcher в другом процессе (экспериментально)</string>\n  <string name=\"process_runtime_description\">Это быстрее и позволяет Patcher использовать больше памяти</string>\n  <string name=\"process_runtime_memory_limit\">Лимит памяти процесса Patcher</string>\n  <string name=\"process_runtime_memory_limit_description\">Максимальный объем памяти, который может использовать процесс Patcher</string>\n  <string name=\"debug_logs_export\">Экспортировать журналы отладки</string>\n  <string name=\"debug_logs_export_read_failed\">Не удалось прочитать логи (код выхода %d)</string>\n  <string name=\"debug_logs_export_failed\">Не удалось экспортировать журналы</string>\n  <string name=\"debug_logs_export_success\">Экспортированные логи</string>\n  <string name=\"api_url\">URL API</string>\n  <string name=\"api_url_description\">API, используемый для загрузки необходимых файлов</string>\n  <string name=\"api_url_dialog_title\">Изменить URL-адрес API</string>\n  <string name=\"api_url_dialog_description\">Изменить URL API ReVanced Manager. ReVanced Manager использует API для загрузки патчей и обновлений.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager подключается к API для загрузки патчей и обновлений. Убедитесь, что вы доверяете ему.</string>\n  <string name=\"api_url_dialog_save\">Установить</string>\n  <string name=\"api_url_dialog_reset\">Сбросить URL API</string>\n  <string name=\"device\">Устройство</string>\n  <string name=\"device_android_version\">Версия Android</string>\n  <string name=\"device_model\">Модель</string>\n  <string name=\"device_architectures\">Архитектуры ЦП</string>\n  <string name=\"device_memory_limit\">Ограничения памяти</string>\n  <string name=\"device_memory_limit_format\">%1$dМБ (Нормальный) - %2$dМБ (Большой)</string>\n  <string name=\"patches_force_download\">Принудительно загрузить все патчи</string>\n  <string name=\"patches_reset\">Сбросить патчи</string>\n  <string name=\"reset_onboarding\">Сбросить ознакомительный процесс</string>\n  <string name=\"reset_onboarding_description\">Показывать ознакомительный экран при следующем запуске приложения</string>\n  <string name=\"patching\">Патчинг</string>\n  <string name=\"signing\">Подписание</string>\n  <string name=\"storage\">Хранилище</string>\n  <string name=\"no_patch_found\">Патчи не найдены. Проверьте свои патчи</string>\n  <string name=\"tab_apps\">Приложения</string>\n  <string name=\"tab_patches\">Патчи</string>\n  <string name=\"delete\">Удалить</string>\n  <string name=\"refresh\">Обновить</string>\n  <string name=\"continue_anyways\">Всё равно продолжить</string>\n  <string name=\"download_another_version\">Загрузить другую версию</string>\n  <string name=\"download_app\">Загрузить приложение</string>\n  <string name=\"download_apk\">Загрузить файл APK</string>\n  <string name=\"patches_download_fail\">Не удалось загрузить патчи: %s</string>\n  <string name=\"api_not_working_title\">Сервис API в данный момент недоступен</string>\n  <string name=\"api_not_working_description\">Некоторые функции могут быть затронуты. Проверьте ваше соединение или URL API в настройках.</string>\n  <string name=\"patches_replace_fail\">Не удалось импортировать патчи: %s</string>\n  <string name=\"no_patched_apps_found\">Пропатченные приложения не найдены</string>\n  <string name=\"no_patched_apps_description\">У вас пока нет известных нам пропатченных приложений. Измените это, пропатчив свое первое приложение!</string>\n  <string name=\"patched_apps_section_title\">Пропатченные приложения</string>\n  <string name=\"patchable_apps_section_title\">Приложения, которые можно пропатчить</string>\n  <string name=\"no_patches_found\">Патчи не найдены</string>\n  <string name=\"no_patches_description\">У вас пока нет патчей. Добавьте патчи, нажав на кнопку ниже!</string>\n  <string name=\"tap_on_patches\">Нажмите на патчи, чтобы получить о них дополнительную информацию</string>\n  <string name=\"patches_selected\">%s выбрано</string>\n  <string name=\"incompatible_patches\">Несовместимые патчи</string>\n  <string name=\"universal_patches\">Универсальные патчи</string>\n  <string name=\"patch_selection_reset_toast\">Выбор патчей и параметры были сброшены до рекомендуемых значений по умолчанию</string>\n  <string name=\"patch_options_reset_toast\">Параметры патчей были сброшены</string>\n  <string name=\"non_suggested_version_warning_title\">Нерекомендуемая версия</string>\n  <string name=\"non_suggested_version_warning_description\">Выбранная вами версия приложения не соответствует рекомендуемой.\\nПожалуйста, используйте рекомендуемую версию: %s\\n\\nЧтобы продолжить, отключите опцию \\\"Требовать рекомендуемую версию приложения\\\" в расширенных настройках.</string>\n  <string name=\"selection_warning_title\">Прекратить использование значений по умолчанию?</string>\n  <string name=\"selection_warning_description\">Рекомендуется использовать выбор патчей и параметры по умолчанию. Их изменение может привести к непредвиденным проблемам.\\n\\nВам необходимо включить опцию \\\"Разрешить изменение выбора патчей и параметров\\\" в расширенных настройках перед переключением патчей.</string>\n  <string name=\"universal_patch_warning_description\">Универсальные патчи имеют более общее применение и работают не так надёжно, как патчи, предназначенные для конкретных приложений. Вы можете столкнуться с проблемами при их использовании.\\n\\nВам необходимо включить опцию \\\"Разрешить использование универсальных патчей\\\" в расширенных настройках перед использованием универсальных патчей.</string>\n  <string name=\"this_version\">Эта версия</string>\n  <string name=\"universal\">Любое приложение</string>\n  <string name=\"search_patches\">Поиск патчей</string>\n  <string name=\"app_version_not_compatible\">Этот патч несовместим с выбранной версией приложения (%1$s)\\n\\nОн совместим только со следующими версиями: %2$s</string>\n  <string name=\"continue_with_version\">Продолжить с этой версией?</string>\n  <string name=\"version_not_compatible\">Не все патчи совместимы с этой версией (%s). Вы хотите продолжить?</string>\n  <string name=\"download_application\">Загрузить приложение?</string>\n  <string name=\"app_not_installed\">Выбранное приложение не установлено. Хотите загрузить его?</string>\n  <string name=\"failed_to_load_apk\">Не удалось загрузить APK</string>\n  <string name=\"split_apk_not_supported\">Разделенные APK не могут быть пропатчены</string>\n  <string name=\"loading\">Загрузка…</string>\n  <string name=\"not_installed\">Не установлено</string>\n  <string name=\"installed\">Установлено</string>\n  <string name=\"app_info\">Информация о приложении</string>\n  <string name=\"uninstall\">Удалить</string>\n  <string name=\"unpatch\">Отпатчить</string>\n  <string name=\"repatch\">Перепатчить</string>\n  <string name=\"install_type\">Тип установки</string>\n  <string name=\"package_name\">Имя пакета</string>\n  <string name=\"original_package_name\">Оригинальное имя пакета</string>\n  <string name=\"applied_patches\">Применённые патчи</string>\n  <string name=\"view_applied_patches\">Просмотреть применённые патчи</string>\n  <string name=\"default_install\">По умолчанию</string>\n  <string name=\"mount_install\">Монтировать</string>\n  <string name=\"mounted\">Смонтировано</string>\n  <string name=\"not_mounted\">Не смонтировано</string>\n  <string name=\"mount\">Монтировать</string>\n  <string name=\"unmount\">Отмонтировать</string>\n  <string name=\"failed_to_mount\">Не удалось смонтировать: %s</string>\n  <string name=\"failed_to_unmount\">Не удалось отмонтировать: %s</string>\n  <string name=\"unpatch_app\">Отменить патчи приложения?</string>\n  <string name=\"unpatch_description\">Вы уверены, что хотите отменить патчи для этого приложения?</string>\n  <string name=\"downloader_invalid_version\">Загрузчик не получил правильную версию</string>\n  <string name=\"downloader_app_not_found\">Загрузчик не нашёл приложение</string>\n  <string name=\"downloader_error\">Ошибка загрузчика: %s</string>\n  <string name=\"no_downloaders_installed\">Загрузчики приложений не установлены!</string>\n  <string name=\"no_downloaders_trusted\">Загрузчикам приложений не доверяют! Пожалуйста, проверьте свои настройки.</string>\n  <string name=\"already_patched\">Уже пропатчено</string>\n  <string name=\"patch_selector_sheet_filter_title\">Фильтр</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Совместимость</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Пакеты</string>\n  <string name=\"patch_selector_sheet_actions_title\">Действия</string>\n  <string name=\"restore_default_selection\">Восстановить выбор по умолчанию</string>\n  <string name=\"deselect_all\">Снять выбор всех</string>\n  <string name=\"invert_selection\">Инвертировать выбор</string>\n  <string name=\"deselect_all_except\">Снять выбор из всех, кроме %s</string>\n  <string name=\"scope_dialog_title\">Применить к</string>\n  <string name=\"scope_all_patches\">Все патчи</string>\n  <string name=\"scope_bundle_patches\">Только %s</string>\n  <string name=\"string_option_menu_description\">Дополнительные параметры</string>\n  <string name=\"option_preset_custom_value\">Пользовательское значение</string>\n  <string name=\"path_selector\">Выбрать из хранилища</string>\n  <string name=\"path_selector_parent_dir\">Предыдущая директория</string>\n  <string name=\"path_selector_dirs\">Директории</string>\n  <string name=\"path_selector_files\">Файлы</string>\n  <string name=\"show_password_field\">Показать пароль</string>\n  <string name=\"hide_password_field\">Скрыть пароль</string>\n  <string name=\"installer\">Установщик</string>\n  <string name=\"install_app\">Установить</string>\n  <string name=\"install_app_success\">Приложение установлено</string>\n  <string name=\"install_app_fail\">Не удалось установить приложение: %s</string>\n  <string name=\"reinstall_app_fail\">Не удалось переустановить приложение: %s</string>\n  <string name=\"uninstall_app_fail\">Не удалось удалить приложение: %s</string>\n  <string name=\"open_app\">Открыть</string>\n  <string name=\"save_apk\">Сохранить APK</string>\n  <string name=\"save_apk_success\">APK сохранён</string>\n  <string name=\"sign_fail\">Не удалось подписать APK: %s</string>\n  <string name=\"save_logs\">Сохранить журналы</string>\n  <string name=\"save_as_file\">Сохранить в файлы</string>\n  <string name=\"export_patcher_logs\">Экспорт логов патчера</string>\n  <string name=\"save_logs_success\">Логи сохранены</string>\n  <string name=\"downloader_activity_dialog_body\">Для продолжения работы этого загрузчика требуется взаимодействие с пользователем.</string>\n  <string name=\"select_install_type\">Выберите тип установки</string>\n  <string name=\"patcher_step_group_preparing\">Подготовка</string>\n  <string name=\"patcher_step_load_patches\">Загрузка патчей</string>\n  <string name=\"patcher_step_unpack\">Подготовить патчер</string>\n  <string name=\"patcher_step_group_patching\">Патчинг</string>\n  <string name=\"patcher_step_group_saving\">Сохранение</string>\n  <string name=\"patcher_step_write_patched\">Запись пропатченного файла APK</string>\n  <string name=\"patcher_step_sign_apk\">Подписание пропатченного файла APK</string>\n  <string name=\"patcher_notification_title\">Патчинг в процессе…</string>\n  <string name=\"patcher_notification_text\">Нажмите, чтобы вернуться к патчеру</string>\n  <string name=\"patcher_stop_confirm_title\">Остановить патчер</string>\n  <string name=\"patcher_stop_confirm_description\">Вы уверены, что хотите остановить процесс патчинга?</string>\n  <string name=\"patcher_install_in_progress\">Установка в процессе. Пожалуйста, подождите</string>\n  <string name=\"execute_patches\">Выполнить патчи</string>\n  <string name=\"executing_patch\">Выполнить %s</string>\n  <string name=\"failed_to_execute_patch\">Не удалось выполнить %s</string>\n  <string name=\"step_completed\">завершено</string>\n  <string name=\"step_failed\">сбой</string>\n  <string name=\"step_running\">выполняется</string>\n  <string name=\"step_waiting\">ожидание</string>\n  <string name=\"expand_content\">развернуть</string>\n  <string name=\"collapse_content\">свернуть</string>\n  <string name=\"drag_handle\">изменить порядок</string>\n  <string name=\"more\">Больше</string>\n  <string name=\"less\">Меньше</string>\n  <string name=\"continue_\">Продолжить</string>\n  <string name=\"dismiss\">Закрыть</string>\n  <string name=\"view_announcement\">Просмотреть объявление</string>\n  <string name=\"permanent_dismiss\">Больше не показывать</string>\n  <string name=\"donate\">Пожертвовать</string>\n  <string name=\"website\">Веб-сайт</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Контакт</string>\n  <string name=\"license\">Лицензия</string>\n  <string name=\"source\">Источник</string>\n  <string name=\"repository\">Репозиторий</string>\n  <string name=\"bundle_information_by_author\">От %1$s</string>\n  <string name=\"version\">Версия</string>\n  <string name=\"version_compatibility_warning\">Выбранная версия может быть несовместима с выбранными патчами</string>\n  <string name=\"submit_feedback\">Отправить сообщение о проблеме или отзыв</string>\n  <string name=\"submit_feedback_description\">Помогите нам улучшить это приложение</string>\n  <string name=\"developer_options\">Параметры разработчика</string>\n  <string name=\"developer_options_description\">Параметры для отладки проблем</string>\n  <string name=\"patches_update_success\">Обновление успешно</string>\n  <string name=\"patches_update_unavailable\">Нет доступных обновлений</string>\n  <string name=\"view_patches\">Просмотреть патчи</string>\n  <string name=\"patches_view_any_version\">Любая версия</string>\n  <string name=\"patches_view_any_package\">Любой пакет</string>\n  <string name=\"patches_delete_single_dialog_description\">Вы уверены, что хотите удалить \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Вы уверены, что хотите удалить выбранные патчи?</string>\n  <string name=\"announcements\">Объявления</string>\n  <string name=\"archive\">Архив</string>\n  <string name=\"about_revanced_manager\">О ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager — это приложение для Android, которое использует ReVanced Patcher для патчинга приложений Android. Оно позволяет загружать и патчить приложения с помощью пользовательских патчей, а также управлять процессом патчинга.</string>\n  <string name=\"developer_options_taps\">%d нажатий осталось</string>\n  <string name=\"developer_options_enabled\">Параметры разработчика включены</string>\n  <string name=\"developer_options_already_enabled\">Параметры разработчика уже включены</string>\n  <string name=\"update_available\">Доступно обновление</string>\n  <string name=\"current_version\">Текущая версия: %s</string>\n  <string name=\"new_version\">Новая версия: %s</string>\n  <string name=\"ready_to_install_update\">Готово к установке обновления</string>\n  <string name=\"update_completed\">Обновление установлено</string>\n  <string name=\"install_update_manager_failed\">Не удалось установить обновление</string>\n  <string name=\"manual_update_check\">Проверить обновления</string>\n  <string name=\"view_update\">Просмотреть обновление</string>\n  <string name=\"manual_update_check_description\">Вручную проверить обновления</string>\n  <string name=\"update_checking_manager\">Проверять обновления при запуске</string>\n  <string name=\"update_checking_manager_description\">Проверять наличие новых версий ReVanced Manager при запуске приложения</string>\n  <string name=\"update_checking_downloader\">Проверять обновления загрузчиков ReVanced при запуске</string>\n  <string name=\"update_checking_downloader_description\">Проверять обновления установленных загрузчиков ReVanced при запуске приложения</string>\n  <string name=\"manager_prereleases\">Использовать предварительные версии</string>\n  <string name=\"manager_prereleases_description\">Использовать предварительные версии ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Предварительные версии могут быть нестабильными и содержать ошибки. Вы можете столкнуться со сбоями, потерей данных или другими неожиданными проблемами. Включайте это только в том случае, если вы готовы к этим рискам.</string>\n  <string name=\"changelog\">Просмотреть список изменений</string>\n  <string name=\"changelog_loading\">Загрузка списка изменений</string>\n  <string name=\"changelog_download_fail\">Не удалось загрузить список изменений: %s</string>\n  <string name=\"changelog_description\">Ознакомьтесь с последними изменениями в этом обновлении</string>\n  <string name=\"battery_optimization_notification\">Оптимизация батареи должна быть отключена, чтобы ReVanced Manager правильно работал в фоновом режиме. Нажмите здесь, чтобы отключить оптимизацию.</string>\n  <string name=\"installing_manager_update\">Установка обновления…</string>\n  <string name=\"downloading_manager_update\">Загрузка обновления…</string>\n  <string name=\"download_manager_failed\">Не удалось загрузить обновление: %s</string>\n  <string name=\"cancel\">Отмена</string>\n  <string name=\"save\">Сохранить</string>\n  <string name=\"save_with_count\">Сохранить (%1$s)</string>\n  <string name=\"update\">Обновить</string>\n  <string name=\"empty\">Пусто</string>\n  <string name=\"installing_message\">Нажмите <b>Обновить</b> по запросу.\\nReVanced Manager закроется при обновлении.</string>\n  <string name=\"no_changelogs_found\">Список изменений не найден</string>\n  <string name=\"just_now\">Только что</string>\n  <string name=\"minutes_ago\">%sm назад</string>\n  <string name=\"hours_ago\">%sh назад</string>\n  <string name=\"days_ago\">%sd назад</string>\n  <string name=\"invalid_date\">Неверная дата</string>\n  <string name=\"disable_battery_optimization\">Отключить оптимизацию батареи</string>\n  <string name=\"input_dialog_value_invalid\">Неверное значение</string>\n  <string name=\"option_required\">Этот параметр обязателен</string>\n  <string name=\"required_options_screen\">Обязательные параметры</string>\n  <string name=\"failed_to_check_updates\">Не удалось проверить обновления: %s</string>\n  <string name=\"no_update_available\">Нет доступных обновлений</string>\n  <string name=\"no_announcements_found\">Объявлений не найдено</string>\n  <string name=\"update_check\">Проверка обновлений…</string>\n  <string name=\"dismiss_temporary\">Не сейчас</string>\n  <string name=\"update_available_dialog_description\">Доступна новая версия ReVanced Manager (%s).</string>\n  <string name=\"failed_to_download_update\">Не удалось загрузить обновление: %s</string>\n  <string name=\"download\">Скачать</string>\n  <string name=\"download_confirmation_metered\">Вы используете лимитное соединение, и ваш оператор может взимать плату за передачу данных.\\n\\nВы всё ещё хотите продолжить?</string>\n  <string name=\"download_update_confirmation\">Загрузить обновление?</string>\n  <string name=\"no_contributors_found\">Участники не найдены</string>\n  <string name=\"select\">Выбрать</string>\n  <string name=\"select_deselect_all\">Выбрать или отменить выбор всех</string>\n  <string name=\"select_patches_type_dialog_description\">Добавить новые патчи по URL или из локальных файлов</string>\n  <string name=\"local_patches_description\">Добавить патчи из локального хранилища.</string>\n  <string name=\"remote_patches_description\">Добавить патчи по URL. Патчи могут автоматически обновляться.</string>\n  <string name=\"recommended\">Рекомендуется</string>\n  <string name=\"installation_failed_dialog_title\">Установка не удалась</string>\n  <string name=\"installation_cancelled_dialog_title\">Установка отменена</string>\n  <string name=\"installation_blocked_dialog_title\">Установка заблокирована</string>\n  <string name=\"installation_conflict_dialog_title\">Конфликт установки</string>\n  <string name=\"installation_incompatible_dialog_title\">Установка несовместима</string>\n  <string name=\"installation_invalid_dialog_title\">Недействительная установка</string>\n  <string name=\"installation_storage_issue_dialog_title\">Недостаточно места</string>\n  <string name=\"installation_timeout_dialog_title\">Время установки истекло</string>\n  <string name=\"installation_failed_description\">Установка не удалась по неизвестной причине. Попробовать ещё раз?</string>\n  <string name=\"installation_aborted_description\">Установка была отменена вручную. Попробовать ещё раз?</string>\n  <string name=\"installation_blocked_description\">Установка была заблокирована. Проверьте настройки безопасности вашего устройства и попробуйте ещё раз.</string>\n  <string name=\"installation_conflict_description\">Установка была предотвращена из-за уже существующей установки приложения. Удалить установленное приложение и попробовать ещё раз?</string>\n  <string name=\"installation_incompatible_description\">Приложение несовместимо с этим устройством. Используйте APK, совместимый с этим устройством, и попробуйте ещё раз.</string>\n  <string name=\"installation_invalid_description\">Приложение недействительно. Удалить приложение и попробовать ещё раз?</string>\n  <string name=\"installation_storage_issue_description\">Приложение не удалось установить из-за недостатка места. Освободите место и попробуйте ещё раз.</string>\n  <string name=\"installation_timeout_description\">Установка заняла слишком много времени. Попробовать ещё раз?</string>\n  <string name=\"reinstall\">Переустановить</string>\n  <string name=\"show\">Показать</string>\n  <string name=\"debugging\">Отладка</string>\n  <string name=\"about_device\">Об устройстве</string>\n  <string name=\"enter_url\">Введите URL</string>\n  <string name=\"next\">Далее</string>\n  <string name=\"auto_update\">Автообновление</string>\n  <string name=\"add_patches\">Добавить патчи</string>\n  <string name=\"auto_update_description\">Автоматически обновлять, когда доступна новая версия</string>\n  <string name=\"patches_prereleases\">Использовать предварительные версии</string>\n  <string name=\"patches_prereleases_description\">Использовать предварительные версии %s</string>\n  <string name=\"patches_url\">URL патчей</string>\n  <string name=\"incompatible_patches_dialog\">Эти патчи несовместимы с выбранной версией приложения (%1$s).\\n\\nНажмите на патчи, чтобы увидеть подробности.</string>\n  <string name=\"incompatible_patch\">Несовместимый патч</string>\n  <string name=\"any_version\">Любой</string>\n  <string name=\"never_show_again\">Больше не показывать</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Показывать сообщение об обновлении при запуске</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Показывать всплывающее уведомление, когда при запуске доступно новое обновление</string>\n  <string name=\"failed_to_import_keystore\">Не удалось импортировать хранилище ключей</string>\n  <string name=\"export\">Экспорт</string>\n  <string name=\"confirm\">Подтвердить</string>\n  <string name=\"new_announcement\">Новое объявление:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d патч</item>\n    <item quantity=\"few\">%d патча</item>\n    <item quantity=\"many\">%d патчей</item>\n    <item quantity=\"other\">%d патчей</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Выполнить %d патч</item>\n    <item quantity=\"few\">Выполнить %d патча</item>\n    <item quantity=\"many\">Выполнить %d патчей</item>\n    <item quantity=\"other\">Выполнить %d патчей</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d выбран</item>\n    <item quantity=\"few\">%d выбрано</item>\n    <item quantity=\"many\">%d выбрано</item>\n    <item quantity=\"other\">%d выбрано</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-si-rLK/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">පැචර්</string>\n  <string name=\"onboarding_welcome_to\">සාදරයෙන් පිළිගනිමු</string>\n  <string name=\"onboarding_welcome_back\">ආයුබෝවන්! එය අලුත්</string>\n  <string name=\"onboarding_apps_subtitle\">ඔබට දැන් පැච් කිරීමට යෙදුමක් තෝරා ගැනීමට හෝ පසුව එය කිරීමට හැකිය</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager සහ පැච් යාවත්කාලීනව තබා ගැනීමට ස්වයංක්‍රීය යාවත්කාලීන සකසන්න</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager ඔබගේ උපාංගය අන්තර්ජාලයට සම්බන්ධ වී ඇත්නම්, මූලික සංස්කරණ බාගත කිරීම සඳහා %s වෙත සම්බන්ධ වනු ඇත.</string>\n  <string name=\"retry\">නැවත උත්සාහ කරන්න</string>\n  <string name=\"onboarding_skip\">දැනට මඟ හරින්න</string>\n  <string name=\"onboarding_recommended_version\">නිර්දේශිත අනුවාදය: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">අවසර මඟ හරිනවාද?</string>\n  <string name=\"onboarding_permissions_skip_description\">අවශ්‍ය අවසරයන් නොමැතිව, සමහර විශේෂාංග නිවැරදිව ක්‍රියා නොකරනු ඇත. ඔබට පසුව යෙදුම් සැකසීම් තුළින් ඒවා ලබා දිය හැක.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">කෙසේ හෝ මඟ හරින්න</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager ට නිසි ලෙස ක්‍රියා කිරීමට අවසර කිහිපයක් අවශ්‍ය වේ</string>\n  <string name=\"permission_install_apps\">නොදන්නා යෙදුම් ස්ථාපනය කරන්න</string>\n  <string name=\"permission_install_apps_description\">පැච් කරන ලද යෙදුම් ස්ථාපනය කිරීමට අවශ්‍ය වේ</string>\n  <string name=\"permission_notifications\">දැනුම්දීම්</string>\n  <string name=\"permission_battery\">බැටරි ප්‍රශස්තකරණය</string>\n  <string name=\"permission_battery_description\">පසුබිමේ පැච් කිරීම බාධා වීම වළක්වයි</string>\n  <string name=\"permission_grant\">ලබා දෙන්න</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager බාගන්නා ධාරකය</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager බාගන්නන්ට ප්‍රවේශය පාලනය කිරීමට භාවිතා කරයි. මෙය ඇත්තේ ReVanced Manager ට පමණි.</string>\n  <string name=\"fab_patch_app\">යෙදුමක් පැච් කරන්න</string>\n  <string name=\"fab_add_patches\">පැච් එකතු කරන්න</string>\n  <string name=\"new_downloader_notification\">නව බාගැනීම්කරු(න්) තිබේ. ඒවා වින්‍යාස කිරීමට මෙහි ක්ලික් කරන්න.</string>\n  <string name=\"patches_not_downloaded\">පැච් බාගත කර නැත.</string>\n  <string name=\"app_source_dialog_option_auto_description\">ස්ථාපිත යෙදුම භාවිතා කරන්න, ඉන්පසු බාගත කළ APK, ඉන්පසු පවතින බාගැනීම්කරුවන්</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">ගැලපෙන යෙදුමක් හෝ බාගැනීම්කරුවන් සොයාගත නොහැක</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">මූල ප්‍රවේශය නොමැතිව සවිකර ඇති යෙදුම් නැවත පැච් කළ නොහැක</string>\n  <string name=\"patch_selector_item\">පැච් තෝරන්න</string>\n  <string name=\"patch_selector_item_description\">%d පැච් තෝරා ඇත</string>\n  <string name=\"patch_selection_changed_warning\">පැච් තේරීම වෙනස් කර ඇත</string>\n  <string name=\"apk_source_selector_item\">APK ප්‍රභවය තෝරන්න</string>\n  <string name=\"apk_source_auto\">ස්වයංක්‍රීය</string>\n  <string name=\"apk_source_auto_installed\">ස්වයංක්‍රීය · ස්ථාපිත APK භාවිතා කරමින්</string>\n  <string name=\"apk_source_auto_downloaded\">ස්වයංක්‍රීය · බාගත කළ APK භාවිතා කරමින්</string>\n  <string name=\"apk_source_auto_downloader\">ස්වයංක්‍රීය · පවතින බාගැනීම් යොදාගනිමින්</string>\n  <string name=\"apk_source_auto_storage\">ස්වයංක්‍රීය · ගබඩාවෙන් තෝරන්න</string>\n  <string name=\"apk_source_downloaded\">දැනටමත් බාගත කර ඇත</string>\n  <string name=\"auto_updates_dialog_description\">ReVanced Manager ට පහත සඳහන් සංරචක සඳහා යාවත්කාලීන කිරීම් වරින් වර පරීක්ෂා කිරීමට ඔබට අවශ්‍යද?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced පැච්</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: බාගත කරන්නන්</string>\n  <string name=\"auto_updates_dialog_note\">මෙම සැකසුම් පසුව වෙනස් කළ හැක.\n\n    ReVanced Manager ඔබගේ උපාංගය අන්තර්ජාලයට සම්බන්ධ වී ඇත්නම්, මූලික සංස්කරණ බාගත කිරීම සඳහා %s වෙත සම්බන්ධ වනු ඇත.</string>\n  <string name=\"announcements_filter_tag\">ටැගය මඟින් පෙරහන් කරන්න</string>\n  <string name=\"announcements_show_archived\">සංරක්ෂණය කළ දෑ පෙන්වන්න</string>\n  <string name=\"updates_description\">යාවත්කාලීන කිරීම් පරීක්ෂා කර වෙනස්වීම් වාර්තාව බලන්න</string>\n  <string name=\"downloads_description\">බාගැනීම්කරුවන් සහ බාගත් යෙදුම්</string>\n  <string name=\"safeguards_toggled_warning\">ආරක්ෂක ක්‍රියාමාර්ග මාරු කර ඇත</string>\n  <string name=\"about_app_name\">%1$s ගැන</string>\n  <string name=\"search_languages\">භාෂා සොයන්න…</string>\n  <string name=\"keystore\">කීස්ටෝර්</string>\n  <string name=\"patches_selections\">පැච් තේරීම්</string>\n  <string name=\"select_bundle_for_import\">ආයාත කිරීමට බණ්ඩලය තෝරන්න</string>\n  <string name=\"select_bundle_for_export\">අපනයනය කිරීමට බණ්ඩලය තෝරන්න</string>\n  <string name=\"patch_selection_packages\">සුරකින ලද තේරීම් සහිත යෙදුම්</string>\n  <string name=\"patch_selection_entries\">තෝරාගත් මුළු පැච්</string>\n  <string name=\"reset_configuration\">වින්‍යාසය යළි සකසන්න</string>\n  <string name=\"reset_patch_selection\">පැච් තේරීම්</string>\n  <string name=\"reset_patch_options\">පැච් විකල්ප</string>\n  <string name=\"downloaders\">බාගැනීම්කරුවන්</string>\n  <string name=\"downloader_prereleases\">පූර්ව නිකුතු භාවිතා කරන්න</string>\n  <string name=\"downloader_prereleases_description\">ප්‍රධාන බාගත කරන්නාගේ පූර්ව නිකුතු සංස්කරණ භාවිතා කරන්න</string>\n  <string name=\"downloader_state_loaded\">පූරණය කරන ලදි</string>\n  <string name=\"downloader_state_failed\">පූරණය කිරීමට අසමත් විය. වැඩි විස්තර සඳහා ක්ලික් කරන්න</string>\n  <string name=\"downloader_state_missing\">අතුරුදහන්</string>\n  <string name=\"downloader_delete_apps_title\">තෝරාගත් යෙදුම් මකන්න</string>\n  <string name=\"downloader_delete_apps_description\">තෝරාගත් යෙදුම් මකා දැමීමට ඔබට විශ්වාසද?</string>\n  <string name=\"downloader_delete_single_description\">ඔබට \\\"%s\\\" මකා දැමීමට අවශ්‍ය බව සහතිකද?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager හරහා බාගත කළ යෙදුම් මෙහි දිස්වනු ඇත.</string>\n  <string name=\"downloader_url\">බාගන්නා URL</string>\n  <string name=\"downloader_add\">බාගන්නා එකතු කරන්න</string>\n  <string name=\"select_downloader_type_dialog_description\">URL එකකින් හෝ දේශීය ගොනු වලින් නව බාගන්නන් එකතු කරන්න</string>\n  <string name=\"local_downloaders_description\">දේශීය ගබඩාවෙන් බාගන්නන් එකතු කරන්න.</string>\n  <string name=\"remote_downloaders_description\">URL එකකින් බාගන්නන් එකතු කරන්න. ස්වයංක්‍රීයව යාවත්කාලීන කළ හැක.</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager තුළින් සෘජුවම යෙදුම් ලබා ගැනීමට බාගැනීම්කරු ස්ථාපනය කරන්න.</string>\n  <string name=\"install_revanced_downloader\">ReVanced බාගැනීම්කරු ස්ථාපනය කරන්න</string>\n  <string name=\"cancel_downloader_install_title\">බාගැනීම්කරු ස්ථාපනය අවලංගු කරනවාද?</string>\n  <string name=\"cancel_downloader_install_description\">බාගැනීම්කරු ස්ථාපනයක් සිදුවෙමින් පවතී. ඔබ දැන් පිටව ගියහොත්, බාගත කිරීම අවලංගු වනු ඇත.</string>\n  <string name=\"downloader_sources_unavailable_title\">මෙම බාගන්නන් අතුරුදහන් වී ඇත</string>\n  <string name=\"downloader_sources_unavailable_description\">එය නිවැරදි කිරීමට යාවත්කාලීන බොත්තම ක්ලික් කරන්න.</string>\n  <string name=\"downloader_update_failed\">බාගන්නා යාවත්කාලීන කිරීම අසාර්ථක විය: %s</string>\n  <string name=\"downloader_replace_fail\">බාගන්නා ආනයනය කිරීම අසාර්ථක විය: %s</string>\n  <string name=\"select_from_storage_description\">ගොනු තේරීම භාවිතයෙන් ගබඩාවෙන් APK ගොනුවක් තෝරන්න</string>\n  <string name=\"enable\">සක්‍රීය කරන්න</string>\n  <string name=\"disable\">අක්‍රීය කරන්න</string>\n  <string name=\"process_runtime_memory_limit_description\">පැචර් ක්‍රියාවලියට භාවිතා කළ හැකි උපරිම මතක ප්‍රමාණය</string>\n  <string name=\"reset_onboarding\">ප්‍රථම භාවිතය යළි සකසන්න</string>\n  <string name=\"reset_onboarding_description\">ඊළඟ යෙදුම් දියත් කිරීමේදී ප්‍රථම භාවිත තිරය පෙන්වන්න</string>\n  <string name=\"api_not_working_title\">API සේවාව දැනට අක්‍රියයි</string>\n  <string name=\"api_not_working_description\">සමහර විශේෂාංග වලට බලපෑම් ඇති විය හැක. ඔබගේ සම්බන්ධතාවය හෝ සැකසීම් වල ඇති API URL පරීක්ෂා කරන්න.</string>\n  <string name=\"no_patched_apps_found\">පැච් කරන ලද යෙදුම් හමු නොවීය</string>\n  <string name=\"no_patched_apps_description\">ඔබට දැනට අප දන්නා කිසිදු පැච් කරන ලද යෙදුම් නොමැත. ඔබේ පළමු යෙදුම පැච් කිරීමෙන් එය වෙනස් කරන්න!</string>\n  <string name=\"patched_apps_section_title\">පැච් කරන ලද යෙදුම්</string>\n  <string name=\"patchable_apps_section_title\">පැච් කළ හැකි යෙදුම්</string>\n  <string name=\"no_patches_found\">පැච් හමු නොවීය</string>\n  <string name=\"no_patches_description\">ඔබට තවමත් කිසිදු පැච් නොමැත. පහත බොත්තම තට්ටු කිරීමෙන් පැච් එකතු කරන්න!</string>\n  <string name=\"split_apk_not_supported\">බෙදුණු APK පැච් කළ නොහැක</string>\n  <string name=\"no_downloaders_installed\">කිසිදු යෙදුම් බාගැනීම්කරු ස්ථාපනය කර නොමැත!</string>\n  <string name=\"no_downloaders_trusted\">කිසිදු යෙදුම් බාගැනීම්කරු විශ්වාස කර නොමැත! කරුණාකර ඔබේ සැකසීම් පරීක්ෂා කරන්න.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">පැකේජ</string>\n  <string name=\"patch_selector_sheet_actions_title\">ක්‍රියා</string>\n  <string name=\"restore_default_selection\">පෙරනිමි තේරීම ප්‍රතිසාධනය කරන්න</string>\n  <string name=\"deselect_all\">සියල්ල තේරීම ඉවත් කරන්න</string>\n  <string name=\"invert_selection\">තේරීම ප්‍රතිවර්තනය කරන්න</string>\n  <string name=\"deselect_all_except\">සියල්ල තෝරාගැනීම ඉවත් කරන්න %s හැර</string>\n  <string name=\"scope_dialog_title\">යොදන්න</string>\n  <string name=\"scope_all_patches\">සියලු පැච්</string>\n  <string name=\"scope_bundle_patches\">%s පමණි</string>\n  <string name=\"save_as_file\">ගොනු වලට සුරකින්න</string>\n  <string name=\"export_patcher_logs\">පැචර් ලොග් අපනයනය කරන්න</string>\n  <string name=\"save_logs_success\">ලොග් සුරැකිණි</string>\n  <string name=\"downloader_activity_dialog_body\">මෙම බාගැනීම්කරු සමඟ ඉදිරියට යාමට පරිශීලක අන්තර්ක්‍රියාව අවශ්‍ය වේ.</string>\n  <string name=\"patcher_step_unpack\">පැචර් සූදානම් කරන්න</string>\n  <string name=\"view_announcement\">නිවේදනය බලන්න</string>\n  <string name=\"license\">බලපත්‍රය</string>\n  <string name=\"source\">ප්‍රභවය</string>\n  <string name=\"repository\">ගබඩාව</string>\n  <string name=\"bundle_information_by_author\">%1$s විසින්</string>\n  <string name=\"version_compatibility_warning\">තෝරාගත් සංස්කරණය තෝරාගත් පැච් සමඟ නොගැලපෙනවා විය හැක.</string>\n  <string name=\"announcements\">නිවේදන</string>\n  <string name=\"archive\">ලේඛනාගාරය</string>\n  <string name=\"view_update\">යාවත්කාලීන කිරීම බලන්න</string>\n  <string name=\"update_checking_downloader\">දියත් කිරීමේදී ReVanced බාගැනීම්කරු යාවත්කාලීන කිරීම් පරීක්ෂා කරන්න</string>\n  <string name=\"update_checking_downloader_description\">යෙදුම ආරම්භ වන විට ස්ථාපනය කර ඇති ReVanced බාගැනීම්කරු සඳහා යාවත්කාලීන කිරීම් පරීක්ෂා කරන්න</string>\n  <string name=\"prereleases_warning\">පූර්ව නිකුත් කිරීමේ අනුවාද අස්ථායී විය හැකි අතර දෝෂ අඩංගු විය හැක. ඔබට බිඳ වැටීම්, දත්ත අහිමිවීම් හෝ වෙනත් අනපේක්ෂිත ගැටළු අත්විඳිය හැක. මෙම අවදානම් සමඟ ඔබට පහසු නම් පමණක් මෙය සක්‍රිය කරන්න.</string>\n  <string name=\"changelog\">වෙනස්වීම් වාර්තාව බලන්න</string>\n  <string name=\"no_announcements_found\">නිවේදන හමු නොවීය</string>\n  <string name=\"new_announcement\">නව නිවේදනය:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d පැච් එකක්</item>\n    <item quantity=\"other\">%d පැච්</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d පැච් එකක් ක්‍රියාත්මක කරන්න</item>\n    <item quantity=\"other\">%d පැච් ක්‍රියාත්මක කරන්න</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d තේරී ඇත</item>\n    <item quantity=\"other\">%d තේරී ඇත</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sk-rSK/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Patchovač</string>\n  <string name=\"patches\">Záplaty</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Správca</string>\n  <string name=\"onboarding_welcome_to\">Vitajte v</string>\n  <string name=\"onboarding_welcome_back\">Ahoj! Je to nový</string>\n  <string name=\"onboarding_apps_subtitle\">Aplikáciu na patchovanie si môžete vybrať teraz alebo neskôr</string>\n  <string name=\"onboarding_apps_network_error\">Nepodarilo sa načítať záplaty, pretože sieť je nedostupná alebo nestabilná. Pripojte sa k stabilnej sieti a skúste to znova.</string>\n  <string name=\"onboarding_updates_subtitle\">Nakonfigurujte automatické aktualizácie, aby bol ReVanced Manager a patche aktuálne</string>\n  <string name=\"banner_sources_not_downloaded_description\">Záplaty a sťahovače sa nepodarilo stiahnuť počas nastavenia. Klepnite na aktualizovať, aby ste ich stiahli.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager sa pripojí k %s, aby stiahol počiatočné verzie, ak je vaše zariadenie pripojené k internetu.</string>\n  <string name=\"retry\">Opakovať</string>\n  <string name=\"onboarding_skip\">Preskočiť zatiaľ</string>\n  <string name=\"onboarding_recommended_version\">Odporúčaná verzia: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Preskočiť povolenia?</string>\n  <string name=\"onboarding_permissions_skip_description\">Bez požadovaných povolení nemôžu niektoré funkcie fungovať správne. Môžete ich udeliť neskôr v nastaveniach aplikácie.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Preskočiť aj tak</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager potrebuje niekoľko povolení na správne fungovanie</string>\n  <string name=\"permission_install_apps\">Inštalácia neznámych aplikácií</string>\n  <string name=\"permission_install_apps_description\">Vyžaduje sa na inštaláciu záplatovaných aplikácií</string>\n  <string name=\"permission_notifications\">Upozornenia</string>\n  <string name=\"permission_notifications_description\">Umožňuje neprerušované opravy na pozadí</string>\n  <string name=\"permission_battery\">Optimalizácia batérie</string>\n  <string name=\"permission_battery_description\">Zabraňuje prerušeniu záplatovania na pozadí</string>\n  <string name=\"permission_grant\">Udeliť</string>\n  <string name=\"downloader_host_permission_label\">Host sťahovania ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Používa sa na kontrolu prístupu k sťahovaniu ReVanced Manager. Len ReVanced Manager to má.</string>\n  <string name=\"toast_copied_to_clipboard\">Skopírované!</string>\n  <string name=\"copy_to_clipboard\">Kopírovať do schránky</string>\n  <string name=\"dashboard\">Prehľad</string>\n  <string name=\"settings\">Nastavenia</string>\n  <string name=\"select_app\">Vybrať aplikáciu</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d vybratých</string>\n  <string name=\"fab_patch_app\">Záplatovať aplikáciu</string>\n  <string name=\"fab_add_patches\">Pridať záplaty</string>\n  <string name=\"new_downloader_notification\">K dispozícii sú nové sťahovače. Kliknutím sem ich nakonfigurujete.</string>\n  <string name=\"unsupported_architecture_warning\">Patchovanie na tejto architektúre zariadenia nie je podporované a s najväčšou pravdepodobnosťou zlyhá.</string>\n  <string name=\"import_\">Importovať</string>\n  <string name=\"import_patches\">Importovať patche</string>\n  <string name=\"file_field_set\">Vybraté</string>\n  <string name=\"file_field_not_set\">Nevybraté</string>\n  <string name=\"field_not_set\">Nenastavené</string>\n  <string name=\"patches_missing\">Chýba</string>\n  <string name=\"patches_error\">Chyba</string>\n  <string name=\"patches_error_description\">Patche sa nepodarilo načítať. Kliknutím zobrazíte chybu.</string>\n  <string name=\"patches_not_downloaded\">Záplaty neboli stiahnuté.</string>\n  <string name=\"patches_name_default\">Patche</string>\n  <string name=\"patches_name_fallback\">Bez názvu</string>\n  <string name=\"android_11_bug_dialog_title\">Chyba systému Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">Povolenie na inštaláciu aplikácií musí byť udelené vopred, aby sa predišlo chybe v systéme Android 11, ktorá negatívne ovplyvní používateľský zážitok.</string>\n  <string name=\"no_network_toast\">Nie je k dispozícii žiadne internetové pripojenie</string>\n  <string name=\"selected_app_meta_any_version\">Akákoľvek dostupná verzia</string>\n  <string name=\"app_source_dialog_title\">Vybrať zdroj</string>\n  <string name=\"app_source_dialog_option_auto\">Automaticky</string>\n  <string name=\"app_source_dialog_option_auto_description\">Použiť nainštalovanú aplikáciu, potom stiahnutý APK, potom dostupné sťahovače</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Nie sú dostupné žiadne kompatibilné aplikácie ani sťahovače</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Pripojené aplikácie nemožno znova patchovať bez oprávnení root</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Verzia %s sa nezhoduje s odporúčanou verziou</string>\n  <string name=\"patch_item_description\">Začať patchovať aplikáciu</string>\n  <string name=\"patch_selector_item\">Vybrať záplaty</string>\n  <string name=\"patch_selector_item_description\">Vybratých %d záplat</string>\n  <string name=\"patch_selection_changed_warning\">Výber záplat bol zmenený.</string>\n  <string name=\"no_patches_selected\">Nie sú vybraté žiadne patche</string>\n  <string name=\"network_unavailable_warning\">Vaše zariadenie nie je pripojené k internetu. Sťahovanie neskôr zlyhá.</string>\n  <string name=\"network_metered_warning\">Momentálne ste pripojení k meranému pripojeniu. Môžu sa účtovať poplatky za dáta od vášho poskytovateľa služieb.</string>\n  <string name=\"apk_source_selector_item\">Vybrať zdroj APK</string>\n  <string name=\"apk_source_auto\">Automaticky</string>\n  <string name=\"apk_source_auto_installed\">Automaticky · Používa sa nainštalovaný APK</string>\n  <string name=\"apk_source_auto_downloaded\">Automaticky · Používa sa stiahnutý APK</string>\n  <string name=\"apk_source_auto_downloader\">Automatické · Použitie dostupných sťahovačov</string>\n  <string name=\"apk_source_auto_storage\">Automatické · Výber z úložiska</string>\n  <string name=\"apk_source_downloader\">Používa sa %s</string>\n  <string name=\"apk_source_installed\">Používa sa nainštalovaný APK</string>\n  <string name=\"apk_source_local\">Používa sa lokálny súbor APK</string>\n  <string name=\"apk_source_downloaded\">Už stiahnuté</string>\n  <string name=\"legacy_import_failed\">Nepodarilo sa importovať staré nastavenia</string>\n  <string name=\"auto_updates_dialog_title\">Nakonfigurovať aktualizácie</string>\n  <string name=\"auto_updates_dialog_description\">Chcete, aby ReVanced Manager pravidelne kontroloval aktualizácie nasledujúcich komponentov?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced záplaty</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Sťahovače</string>\n  <string name=\"auto_updates_dialog_note\">Tieto nastavenia je možné zmeniť neskôr.\n\n    ReVanced Manager sa pripojí k %s, aby stiahol počiatočné verzie, ak je vaše zariadenie pripojené k internetu.</string>\n  <string name=\"announcements_filter_tag\">Filtrovať podľa značky</string>\n  <string name=\"announcements_show_archived\">Zobraziť archivované</string>\n  <string name=\"general\">Všeobecné</string>\n  <string name=\"general_description\">Jazyk, téma, dynamická farba</string>\n  <string name=\"updates\">Aktualizácie</string>\n  <string name=\"updates_description\">Skontrolovať aktualizácie a zobraziť protokol zmien</string>\n  <string name=\"downloads\">Sťahovanie</string>\n  <string name=\"downloads_description\">Sťahovače a stiahnuté aplikácie</string>\n  <string name=\"import_export\">Import &amp; export</string>\n  <string name=\"import_export_description\">Úložisko kľúčov, možnosti patchov a výber</string>\n  <string name=\"advanced\">Pokročilé</string>\n  <string name=\"advanced_description\">URL API, limit pamäte, ladenie</string>\n  <string name=\"safeguards_toggled_warning\">Ochranné opatrenia boli prepnuté.</string>\n  <string name=\"about\">O aplikácii</string>\n  <string name=\"about_app_name\">O aplikácii %1$s</string>\n  <string name=\"opensource_licenses\">Licencie open source</string>\n  <string name=\"opensource_licenses_description\">Zobraziť všetky knižnice použité na vytvorenie tejto aplikácie</string>\n  <string name=\"contributors\">Prispievatelia</string>\n  <string name=\"contributors_description\">Zobraziť prispievateľov ReVanced</string>\n  <string name=\"dynamic_color\">Dynamická farba</string>\n  <string name=\"dynamic_color_description\">Prispôsobiť farby tapete</string>\n  <string name=\"pure_black_theme\">Čistá čierna téma</string>\n  <string name=\"pure_black_theme_description\">Používať čisto čierne pozadie pre tmavú tému</string>\n  <string name=\"theme\">Téma</string>\n  <string name=\"theme_description\">Vybrať medzi svetlou alebo tmavou témou</string>\n  <string name=\"language\">Jazyk</string>\n  <string name=\"language_description\">Vybrať jazyk zobrazenia aplikácie</string>\n  <string name=\"language_system_default\">Predvolené systémom</string>\n  <string name=\"search_languages\">Hľadať jazyky…</string>\n  <string name=\"safeguards\">Bezpečnostné opatrenia</string>\n  <string name=\"patch_compat_check\">Vypnúť kontrolu kompatibility verzií</string>\n  <string name=\"patch_compat_check_description\">Neobmedzovať patche na kompatibilné verzie aplikácií</string>\n  <string name=\"patch_compat_check_confirmation\">Výber nekompatibilných patchov môže viesť k poškodeniu aplikácie.\\n\\nChcete aj tak pokračovať?</string>\n  <string name=\"suggested_version_safeguard\">Vyžadovať odporúčanú verziu aplikácie</string>\n  <string name=\"suggested_version_safeguard_description\">Vynútiť výber odporúčanej verzie aplikácie</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Výber aplikácie, ktorá nie je odporúčanou verziou, môže spôsobiť neočakávané problémy.\\n\\nChcete aj tak pokračovať?</string>\n  <string name=\"patch_selection_safeguard\">Povoliť zmenu výberu a možností patchov</string>\n  <string name=\"patch_selection_safeguard_description\">Nezabrániť výberu alebo zrušeniu výberu patchov a prispôsobeniu možností</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Zmena výberu patchov môže spôsobiť neočakávané problémy.\\n\\nPovoliť aj tak?</string>\n  <string name=\"universal_patches_safeguard\">Povoliť použitie univerzálnych patchov</string>\n  <string name=\"universal_patches_safeguard_description\">Nezabrániť použitiu univerzálnych patchov</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Univerzálne patche nie sú tak dobre otestované ako tie, ktoré sú určené pre konkrétne aplikácie.\\n\\nPovoliť aj tak?</string>\n  <string name=\"keystore\">Úložisko kľúčov</string>\n  <string name=\"patches_selections\">Výber záplat</string>\n  <string name=\"import_keystore\">Importovať úložisko kľúčov</string>\n  <string name=\"import_keystore_description\">Importovať vlastné úložisko kľúčov</string>\n  <string name=\"import_keystore_dialog_title\">Zadať poverenia úložiska kľúčov</string>\n  <string name=\"import_keystore_dialog_description\">Pre import úložiska kľúčov musíte zadať jeho poverenia.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Používateľské meno (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Heslo</string>\n  <string name=\"import_keystore_dialog_button\">Importovať</string>\n  <string name=\"import_keystore_wrong_credentials\">Nesprávne poverenia úložiska kľúčov</string>\n  <string name=\"import_keystore_success\">Importované úložisko kľúčov</string>\n  <string name=\"export_keystore\">Exportovať úložisko kľúčov</string>\n  <string name=\"export_keystore_description\">Exportovať aktuálne úložisko kľúčov</string>\n  <string name=\"export_keystore_unavailable\">Žiadne úložisko kľúčov na export</string>\n  <string name=\"export_keystore_success\">Exportované úložisko kľúčov</string>\n  <string name=\"regenerate_keystore\">Regenerovať úložisko kľúčov</string>\n  <string name=\"regenerate_keystore_description\">Vygenerovať nové úložisko kľúčov</string>\n  <string name=\"regenerate_keystore_dialog_description\">Chystáte sa regenerovať úložisko kľúčov, ktoré bude manažér používať počas procesu patchovania.\\n\\nNebudete môcť aktualizovať predtým nainštalované aplikácie z tohto zdroja.</string>\n  <string name=\"regenerate_keystore_success\">Úložisko kľúčov bolo úspešne nahradené</string>\n  <string name=\"import_patch_selection\">Importovať výber patchov</string>\n  <string name=\"import_patch_selection_description\">Importovať výber patchov zo súboru JSON</string>\n  <string name=\"import_patch_selection_fail\">Nepodarilo sa importovať výber patchov: %s</string>\n  <string name=\"import_patch_selection_success\">Importovaný výber patchov</string>\n  <string name=\"select_bundle_for_import\">Vyberte balík na import</string>\n  <string name=\"export_patch_selection\">Exportovať výber patchov</string>\n  <string name=\"export_patch_selection_description\">Exportovať výber patchov do súboru JSON</string>\n  <string name=\"export_patch_selection_fail\">Nepodarilo sa exportovať výber patchov: %s</string>\n  <string name=\"export_patch_selection_success\">Exportovaný výber patchov</string>\n  <string name=\"select_bundle_for_export\">Vyberte balík na export</string>\n  <string name=\"patch_selection_packages\">Aplikácie s uloženými výbermi</string>\n  <string name=\"patch_selection_entries\">Celkový počet vybraných záplat</string>\n  <string name=\"reset_configuration\">Resetovať konfiguráciu</string>\n  <string name=\"reset_patch_selection\">Výbery záplat</string>\n  <string name=\"reset_patch_selection_description\">Resetovať uložený výber patchov</string>\n  <string name=\"reset_patch_options\">Možnosti záplatovania</string>\n  <string name=\"reset_patch_options_description\">Resetovať uložené možnosti patchov</string>\n  <string name=\"reset_patch_selection_success\">Výber patchov bol resetovaný</string>\n  <string name=\"patch_selection_reset_all\">Globálne resetovať výber patchov</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Chystáte sa resetovať všetky výbery patchov. Každý patch budete musieť znova vybrať ručne.</string>\n  <string name=\"patch_selection_reset_all_description\">Resetuje všetky výbery patchov</string>\n  <string name=\"patch_selection_reset_package\">Resetovať výber patchov pre aplikáciu</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Chystáte sa resetovať výber patchov pre aplikáciu \\\"%s\\\". Každý patch budete musieť znova vybrať ručne.</string>\n  <string name=\"patch_selection_reset_package_description\">Resetuje výber patchov pre jednu aplikáciu</string>\n  <string name=\"patch_selection_reset_patches\">Resetovať výber opráv (jednotlivo)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Chystáte sa resetovať výber opráv pre „%s“. Každú opravu budete musieť znova vybrať manuálne.</string>\n  <string name=\"patch_selection_reset_patches_description\">Resetuje výber opráv pre konkrétnu zbierku opráv</string>\n  <string name=\"patch_options_reset_package\">Resetovať možnosti opráv pre aplikáciu</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Chystáte sa resetovať možnosti opráv pre aplikáciu „%s“. Každú možnosť budete musieť znova použiť.</string>\n  <string name=\"patch_options_reset_package_description\">Resetuje možnosti opráv pre jednu aplikáciu</string>\n  <string name=\"patch_options_reset_patches\">Resetovať možnosti opráv (jednotlivo)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Chystáte sa resetovať možnosti opráv pre „%s“. Každú možnosť budete musieť znova použiť.</string>\n  <string name=\"patch_options_reset_patches_description\">Resetuje možnosti opráv pre konkrétnu zbierku opráv</string>\n  <string name=\"patch_options_reset_all\">Resetovať možnosti opráv globálne</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Chystáte sa resetovať všetky možnosti opráv. Každú možnosť budete musieť znova použiť.</string>\n  <string name=\"patch_options_reset_all_description\">Resetuje všetky možnosti opráv</string>\n  <string name=\"downloaders\">Sťahovače</string>\n  <string name=\"downloader_prereleases\">Použiť predbežné vydania</string>\n  <string name=\"downloader_prereleases_description\">Použiť predbežné verzie hlavného sťahovača</string>\n  <string name=\"downloader_state_loaded\">Načítané</string>\n  <string name=\"downloader_state_failed\">Nepodarilo sa načítať. Kliknite pre viac detailov</string>\n  <string name=\"downloader_state_missing\">Chýba</string>\n  <string name=\"downloader_delete_apps_title\">Odstrániť vybrané aplikácie</string>\n  <string name=\"downloader_delete_apps_description\">Naozaj chcete odstrániť vybrané aplikácie?</string>\n  <string name=\"downloader_delete_single_description\">Naozaj chcete odstrániť „%s“?</string>\n  <string name=\"downloader_settings_no_apps\">Nenašli sa žiadne stiahnuté aplikácie.</string>\n  <string name=\"downloader_settings_no_apps_description\">Aplikácie stiahnuté cez ReVanced Manager sa zobrazia tu.</string>\n  <string name=\"downloader_url\">URL sťahovača</string>\n  <string name=\"downloader_add\">Pridať sťahovač</string>\n  <string name=\"select_downloader_type_dialog_description\">Pridať nové sťahovače z URL alebo lokálnych súborov</string>\n  <string name=\"local_downloaders_description\">Pridať sťahovače z lokálneho úložiska.</string>\n  <string name=\"remote_downloaders_description\">Pridať sťahovače z URL. Môžu byť automaticky aktualizované.</string>\n  <string name=\"install_revanced_downloaders\">Nainštalujte sťahovače, aby ste získali aplikácie priamo v rámci ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Nainštalovať sťahovače ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Zrušiť inštaláciu sťahovačov?</string>\n  <string name=\"cancel_downloader_install_description\">Prebieha inštalácia sťahovačov. Ak teraz odídete, sťahovanie bude zrušené.</string>\n  <string name=\"downloader_sources_unavailable_title\">Tieto sťahovače chýbajú</string>\n  <string name=\"downloader_sources_unavailable_description\">Kliknite na tlačidlo aktualizovať, aby ste to opravili.</string>\n  <string name=\"downloader_update_failed\">Nepodarilo sa aktualizovať sťahovač: %s</string>\n  <string name=\"downloader_replace_fail\">Nepodarilo sa importovať sťahovač: %s</string>\n  <string name=\"search_apps\">Hľadať aplikácie…</string>\n  <string name=\"loading_body\">Načítava sa…</string>\n  <string name=\"downloading_patches\">Sťahovanie opráv…</string>\n  <string name=\"options\">Možnosti</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Áno</string>\n  <string name=\"no\">Nie</string>\n  <string name=\"edit\">Upraviť</string>\n  <string name=\"dialog_input_placeholder\">Hodnota</string>\n  <string name=\"reset\">Resetovať</string>\n  <string name=\"share\">Zdieľať</string>\n  <string name=\"patch\">Oprava</string>\n  <string name=\"select_from_storage\">Vybrať z úložiska</string>\n  <string name=\"select_from_storage_description\">Vyberte súbor APK z úložiska pomocou výberu súborov</string>\n  <string name=\"suggested_version_info\">Navrhovaná verzia: %s</string>\n  <string name=\"type_anything\">Pre pokračovanie niečo napíšte</string>\n  <string name=\"search\">Hľadať opravy…</string>\n  <string name=\"apply\">Použiť</string>\n  <string name=\"help\">Pomoc</string>\n  <string name=\"back\">Späť</string>\n  <string name=\"warning\">Upozornenie</string>\n  <string name=\"add\">Pridať</string>\n  <string name=\"enable\">Povoliť</string>\n  <string name=\"disable\">Vypnúť</string>\n  <string name=\"close\">Zavrieť</string>\n  <string name=\"clear\">Vyčistiť</string>\n  <string name=\"system\">Systém</string>\n  <string name=\"light\">Svetlé</string>\n  <string name=\"dark\">Tmavé</string>\n  <string name=\"appearance\">Vzhľad</string>\n  <string name=\"networking\">Sieť</string>\n  <string name=\"allow_metered_networks\">Povoliť tarifikované siete</string>\n  <string name=\"allow_metered_networks_description\">Povoľuje automatické aktualizácie na tarifikovaných sieťach.\\n    Aplikácia môže napriek tomu upozorňovať na tarifikované siete pri manuálnych operáciách.</string>\n  <string name=\"downloaded_apps\">Stiahnuté aplikácie</string>\n  <string name=\"process_runtime\">Spustiť Patcher v inom procese (experimentálne)</string>\n  <string name=\"process_runtime_description\">Toto je rýchlejšie a umožňuje Patcheru používať viac pamäte</string>\n  <string name=\"process_runtime_memory_limit\">Limit pamäte procesu Patchera</string>\n  <string name=\"process_runtime_memory_limit_description\">Maximálne množstvo pamäte, ktoré môže proces Patcher použiť</string>\n  <string name=\"debug_logs_export\">Exportovať protokoly ladenia</string>\n  <string name=\"debug_logs_export_read_failed\">Nepodarilo sa prečítať protokoly (kód ukončenia %d)</string>\n  <string name=\"debug_logs_export_failed\">Nepodarilo sa exportovať protokoly</string>\n  <string name=\"debug_logs_export_success\">Exportované protokoly</string>\n  <string name=\"api_url\">Adresa URL API</string>\n  <string name=\"api_url_description\">API používané na sťahovanie potrebných súborov</string>\n  <string name=\"api_url_dialog_title\">Zmeniť adresu URL API</string>\n  <string name=\"api_url_dialog_description\">Zmeňte adresu URL API ReVanced Manager. ReVanced Manager používa API na sťahovanie opráv a aktualizácií.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager sa pripája k API na sťahovanie opráv a aktualizácií. Uistite sa, že mu dôverujete.</string>\n  <string name=\"api_url_dialog_save\">Nastaviť</string>\n  <string name=\"api_url_dialog_reset\">Resetovať adresu URL API</string>\n  <string name=\"device\">Zariadenie</string>\n  <string name=\"device_android_version\">Verzia Androidu</string>\n  <string name=\"device_model\">Model</string>\n  <string name=\"device_architectures\">Architektúry CPU</string>\n  <string name=\"device_memory_limit\">Limity pamäte</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normálne) - %2$dMB (Veľké)</string>\n  <string name=\"patches_force_download\">Vynútiť stiahnutie všetkých opráv</string>\n  <string name=\"patches_reset\">Resetovať opravy</string>\n  <string name=\"reset_onboarding\">Resetovať úvodné nastavenia</string>\n  <string name=\"reset_onboarding_description\">Zobraziť úvodnú obrazovku pri ďalšom spustení aplikácie</string>\n  <string name=\"patching\">Aplikovanie opráv</string>\n  <string name=\"signing\">Podpisovanie</string>\n  <string name=\"storage\">Úložisko</string>\n  <string name=\"no_patch_found\">Nenašla sa žiadna oprava. Skontrolujte svoje opravy</string>\n  <string name=\"tab_apps\">Aplikácie</string>\n  <string name=\"tab_patches\">Opravy</string>\n  <string name=\"delete\">Odstrániť</string>\n  <string name=\"refresh\">Obnoviť</string>\n  <string name=\"continue_anyways\">Napriek tomu pokračovať</string>\n  <string name=\"download_another_version\">Stiahnuť inú verziu</string>\n  <string name=\"download_app\">Stiahnuť aplikáciu</string>\n  <string name=\"download_apk\">Stiahnuť súbor APK</string>\n  <string name=\"patches_download_fail\">Nepodarilo sa stiahnuť opravy: %s</string>\n  <string name=\"api_not_working_title\">Služba API je momentálne nedostupná</string>\n  <string name=\"api_not_working_description\">Niektoré funkcie môžu byť ovplyvnené. Skontrolujte svoje pripojenie alebo URL API v nastaveniach.</string>\n  <string name=\"patches_replace_fail\">Nepodarilo sa importovať opravy: %s</string>\n  <string name=\"no_patched_apps_found\">Nenašli sa žiadne záplatované aplikácie</string>\n  <string name=\"no_patched_apps_description\">Momentálne nemáte žiadne záplatované aplikácie, o ktorých by sme vedeli. Zmeňte to záplatovaním prvej aplikácie!</string>\n  <string name=\"patched_apps_section_title\">Opravené aplikácie</string>\n  <string name=\"patchable_apps_section_title\">Aplikácie, ktoré je možné opraviť</string>\n  <string name=\"no_patches_found\">Nenašli sa žiadne záplaty</string>\n  <string name=\"no_patches_description\">Ešte nemáte žiadne záplaty. Pridajte záplaty ťuknutím na tlačidlo nižšie!</string>\n  <string name=\"tap_on_patches\">Ťuknite na opravy pre viac informácií o nich</string>\n  <string name=\"patches_selected\">%s vybraných</string>\n  <string name=\"incompatible_patches\">Nekompatibilné opravy</string>\n  <string name=\"universal_patches\">Univerzálne opravy</string>\n  <string name=\"patch_selection_reset_toast\">Výber opráv a možnosti boli resetované na odporúčané predvolené nastavenia</string>\n  <string name=\"patch_options_reset_toast\">Možnosti opráv boli resetované</string>\n  <string name=\"non_suggested_version_warning_title\">Neodporúčaná verzia</string>\n  <string name=\"non_suggested_version_warning_description\">Verzia aplikácie, ktorú ste vybrali, sa nezhoduje s odporúčanou verziou.\\nPoužite odporúčanú verziu: %s\\n\\nAk chcete napriek tomu pokračovať, vypnite „Vyžadovať odporúčanú verziu aplikácie“ v rozšírených nastaveniach.</string>\n  <string name=\"selection_warning_title\">Prestať používať predvolené nastavenia?</string>\n  <string name=\"selection_warning_description\">Odporúča sa použiť predvolený výber opráv a možnosti. Ich zmena môže viesť k neočakávaným problémom.\\n\\nPred prepínaním opráv musíte v rozšírených nastaveniach zapnúť „Povoliť zmenu výberu opráv a možností“.</string>\n  <string name=\"universal_patch_warning_description\">Univerzálne opravy majú všeobecnejšie použitie a nefungujú tak spoľahlivo ako opravy, ktoré sú určené pre konkrétne aplikácie. Pri ich používaní sa môžete stretnúť s problémami.\\n\\nPred použitím univerzálnych opráv musíte v rozšírených nastaveniach zapnúť „Povoliť používanie univerzálnych opráv“.</string>\n  <string name=\"this_version\">Táto verzia</string>\n  <string name=\"universal\">Akákoľvek aplikácia</string>\n  <string name=\"search_patches\">Hľadať opravy</string>\n  <string name=\"app_version_not_compatible\">Táto oprava nie je kompatibilná s vybranou verziou aplikácie (%1$s)\\n\\nJe kompatibilná iba s nasledujúcou(mi) verziou(ami): %2$s</string>\n  <string name=\"continue_with_version\">Pokračovať s touto verziou?</string>\n  <string name=\"version_not_compatible\">Nie všetky opravy sú kompatibilné s touto verziou (%s). Chcete napriek tomu pokračovať?</string>\n  <string name=\"download_application\">Stiahnuť aplikáciu?</string>\n  <string name=\"app_not_installed\">Aplikácia, ktorú ste vybrali, nie je nainštalovaná. Chcete ju stiahnuť?</string>\n  <string name=\"failed_to_load_apk\">Nepodarilo sa načítať APK</string>\n  <string name=\"split_apk_not_supported\">Rozdelené APK súbory nie je možné patchovať</string>\n  <string name=\"loading\">Načítava sa…</string>\n  <string name=\"not_installed\">Nenainštalované</string>\n  <string name=\"installed\">Nainštalované</string>\n  <string name=\"app_info\">Informácie o aplikácii</string>\n  <string name=\"uninstall\">Odinštalovať</string>\n  <string name=\"unpatch\">Odstrániť opravu</string>\n  <string name=\"repatch\">Znova aplikovať opravu</string>\n  <string name=\"install_type\">Typ inštalácie</string>\n  <string name=\"package_name\">Názov balíčka</string>\n  <string name=\"original_package_name\">Pôvodný názov balíčka</string>\n  <string name=\"applied_patches\">Použité záplaty</string>\n  <string name=\"view_applied_patches\">Zobraziť použité záplaty</string>\n  <string name=\"default_install\">Predvolené</string>\n  <string name=\"mount_install\">Pripojiť</string>\n  <string name=\"mounted\">Pripojené</string>\n  <string name=\"not_mounted\">Nepripojené</string>\n  <string name=\"mount\">Pripojiť</string>\n  <string name=\"unmount\">Odpojiť</string>\n  <string name=\"failed_to_mount\">Nepodarilo sa pripojiť: %s</string>\n  <string name=\"failed_to_unmount\">Nepodarilo sa odpojiť: %s</string>\n  <string name=\"unpatch_app\">Odstrániť záplatu z aplikácie?</string>\n  <string name=\"unpatch_description\">Naozaj chcete odstrániť záplatu z tejto aplikácie?</string>\n  <string name=\"downloader_invalid_version\">Sťahovač nezískal správnu verziu</string>\n  <string name=\"downloader_app_not_found\">Sťahovač nenašiel aplikáciu</string>\n  <string name=\"downloader_error\">Chyba sťahovača: %s</string>\n  <string name=\"no_downloaders_installed\">Nie sú nainštalované žiadne sťahovače aplikácií!</string>\n  <string name=\"no_downloaders_trusted\">Žiadnym sťahovačom aplikácií sa nedôverovalo! Skontrolujte si nastavenia.</string>\n  <string name=\"already_patched\">Už záplatované</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filter</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Kompatibilita</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Balíky</string>\n  <string name=\"patch_selector_sheet_actions_title\">Akcie</string>\n  <string name=\"restore_default_selection\">Obnoviť predvolený výber</string>\n  <string name=\"deselect_all\">Zrušiť výber všetkých</string>\n  <string name=\"invert_selection\">Invertovať výber</string>\n  <string name=\"deselect_all_except\">Zrušiť výber všetkých okrem %s</string>\n  <string name=\"scope_dialog_title\">Použiť na</string>\n  <string name=\"scope_all_patches\">Všetky záplaty</string>\n  <string name=\"scope_bundle_patches\">Iba %s</string>\n  <string name=\"string_option_menu_description\">Viac možností</string>\n  <string name=\"option_preset_custom_value\">Vlastná hodnota</string>\n  <string name=\"path_selector\">Vybrať z úložiska</string>\n  <string name=\"path_selector_parent_dir\">Predchádzajúci adresár</string>\n  <string name=\"path_selector_dirs\">Adresáre</string>\n  <string name=\"path_selector_files\">Súbory</string>\n  <string name=\"show_password_field\">Zobraziť heslo</string>\n  <string name=\"hide_password_field\">Skryť heslo</string>\n  <string name=\"installer\">Inštalátor</string>\n  <string name=\"install_app\">Nainštalovať</string>\n  <string name=\"install_app_success\">Aplikácia nainštalovaná</string>\n  <string name=\"install_app_fail\">Nepodarilo sa nainštalovať aplikáciu: %s</string>\n  <string name=\"reinstall_app_fail\">Nepodarilo sa preinštalovať aplikáciu: %s</string>\n  <string name=\"uninstall_app_fail\">Nepodarilo sa odinštalovať aplikáciu: %s</string>\n  <string name=\"open_app\">Otvoriť</string>\n  <string name=\"save_apk\">Uložiť APK</string>\n  <string name=\"save_apk_success\">APK uložené</string>\n  <string name=\"sign_fail\">Nepodarilo sa podpísať APK: %s</string>\n  <string name=\"save_logs\">Uložiť denníky</string>\n  <string name=\"save_as_file\">Uložiť do súborov</string>\n  <string name=\"export_patcher_logs\">Exportovať protokoly patchera</string>\n  <string name=\"save_logs_success\">Protokoly uložené</string>\n  <string name=\"downloader_activity_dialog_body\">Pre pokračovanie s týmto sťahovačom je potrebná interakcia používateľa.</string>\n  <string name=\"select_install_type\">Vyberte typ inštalácie</string>\n  <string name=\"patcher_step_group_preparing\">Pripravuje sa</string>\n  <string name=\"patcher_step_load_patches\">Načítať záplaty</string>\n  <string name=\"patcher_step_unpack\">Pripraviť patcher</string>\n  <string name=\"patcher_step_group_patching\">Záplatovanie</string>\n  <string name=\"patcher_step_group_saving\">Ukladá sa</string>\n  <string name=\"patcher_step_write_patched\">Zapísať záplatovaný súbor APK</string>\n  <string name=\"patcher_step_sign_apk\">Podpísať záplatovaný súbor APK</string>\n  <string name=\"patcher_notification_title\">Prebieha záplatovanie…</string>\n  <string name=\"patcher_notification_text\">Klepnite pre návrat do nástroja na záplatovanie</string>\n  <string name=\"patcher_stop_confirm_title\">Zastaviť nástroj na záplatovanie</string>\n  <string name=\"patcher_stop_confirm_description\">Naozaj chcete zastaviť proces záplatovania?</string>\n  <string name=\"patcher_install_in_progress\">Inštalácia prebieha. Prosím, počkajte</string>\n  <string name=\"execute_patches\">Vykonajte záplaty</string>\n  <string name=\"executing_patch\">Vykonáva sa %s</string>\n  <string name=\"failed_to_execute_patch\">Nepodarilo sa vykonať %s</string>\n  <string name=\"step_completed\">dokončené</string>\n  <string name=\"step_failed\">zlyhalo</string>\n  <string name=\"step_running\">beží</string>\n  <string name=\"step_waiting\">čaká</string>\n  <string name=\"expand_content\">rozbaliť</string>\n  <string name=\"collapse_content\">zbaliť</string>\n  <string name=\"drag_handle\">zmeniť poradie</string>\n  <string name=\"more\">Viac</string>\n  <string name=\"less\">Menej</string>\n  <string name=\"continue_\">Pokračovať</string>\n  <string name=\"dismiss\">Zavrieť</string>\n  <string name=\"view_announcement\">Zobraziť oznámenie</string>\n  <string name=\"permanent_dismiss\">Už viac nezobrazovať</string>\n  <string name=\"donate\">Darovať</string>\n  <string name=\"website\">Webová stránka</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Kontakt</string>\n  <string name=\"license\">Licencia</string>\n  <string name=\"source\">Zdroj</string>\n  <string name=\"repository\">Úložisko</string>\n  <string name=\"bundle_information_by_author\">Od %1$s</string>\n  <string name=\"version\">Verzia</string>\n  <string name=\"version_compatibility_warning\">Vybratá verzia môže byť nekompatibilná s vybranými záplatami</string>\n  <string name=\"submit_feedback\">Odoslať problém alebo spätnú väzbu</string>\n  <string name=\"submit_feedback_description\">Pomôžte nám zlepšiť túto aplikáciu</string>\n  <string name=\"developer_options\">Možnosti pre vývojárov</string>\n  <string name=\"developer_options_description\">Možnosti na ladenie problémov</string>\n  <string name=\"patches_update_success\">Aktualizácia úspešná</string>\n  <string name=\"patches_update_unavailable\">Žiadna aktualizácia k dispozícii</string>\n  <string name=\"view_patches\">Zobraziť záplaty</string>\n  <string name=\"patches_view_any_version\">Akákoľvek verzia</string>\n  <string name=\"patches_view_any_package\">Akýkoľvek balíček</string>\n  <string name=\"patches_delete_single_dialog_description\">Naozaj chcete odstrániť „%s“?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Naozaj chcete odstrániť vybrané záplaty?</string>\n  <string name=\"announcements\">Oznámenia</string>\n  <string name=\"archive\">Archív</string>\n  <string name=\"about_revanced_manager\">O ReVanced Manageri</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager je aplikácia pre Android, ktorá používa ReVanced Patcher na záplatovanie aplikácií pre Android. Umožňuje sťahovať a záplatovať aplikácie vlastnými záplatami a spravovať proces záplatovania.</string>\n  <string name=\"developer_options_taps\">Zostáva %d klepnutí</string>\n  <string name=\"developer_options_enabled\">Možnosti pre vývojárov povolené</string>\n  <string name=\"developer_options_already_enabled\">Možnosti pre vývojárov sú už povolené</string>\n  <string name=\"update_available\">K dispozícii je aktualizácia</string>\n  <string name=\"current_version\">Aktuálna verzia: %s</string>\n  <string name=\"new_version\">Nová verzia: %s</string>\n  <string name=\"ready_to_install_update\">Pripravené na inštaláciu aktualizácie</string>\n  <string name=\"update_completed\">Aktualizácia nainštalovaná</string>\n  <string name=\"install_update_manager_failed\">Nepodarilo sa nainštalovať aktualizáciu</string>\n  <string name=\"manual_update_check\">Skontrolovať aktualizácie</string>\n  <string name=\"view_update\">Zobraziť aktualizáciu</string>\n  <string name=\"manual_update_check_description\">Manuálne skontrolovať aktualizácie</string>\n  <string name=\"update_checking_manager\">Kontrolovať aktualizácie pri spustení</string>\n  <string name=\"update_checking_manager_description\">Kontrolovať nové verzie ReVanced Manager po spustení aplikácie</string>\n  <string name=\"update_checking_downloader\">Kontrolovať aktualizácie sťahovačov ReVanced pri spustení</string>\n  <string name=\"update_checking_downloader_description\">Skontrolovať aktualizácie nainštalovaných sťahovačov ReVanced pri spustení aplikácie</string>\n  <string name=\"manager_prereleases\">Používať predbežné vydania</string>\n  <string name=\"manager_prereleases_description\">Používať predbežné verzie ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Predbežné verzie môžu byť nestabilné a obsahovať chyby. Môžete zaznamenať pády, stratu údajov alebo iné neočakávané problémy. Povoľte to iba vtedy, ak ste si vedomí týchto rizík.</string>\n  <string name=\"changelog\">Zobraziť protokol zmien</string>\n  <string name=\"changelog_loading\">Načítava sa zoznam zmien</string>\n  <string name=\"changelog_download_fail\">Nepodarilo sa stiahnuť zoznam zmien: %s</string>\n  <string name=\"changelog_description\">Pozrite si najnovšie zmeny v tejto aktualizácii</string>\n  <string name=\"battery_optimization_notification\">Optimalizácia batérie musí byť vypnutá, aby ReVanced Manager správne fungoval na pozadí. Kliknite sem pre vypnutie optimalizácií.</string>\n  <string name=\"installing_manager_update\">Inštaluje sa aktualizácia…</string>\n  <string name=\"downloading_manager_update\">Sťahuje sa aktualizácia…</string>\n  <string name=\"download_manager_failed\">Nepodarilo sa stiahnuť aktualizáciu: %s</string>\n  <string name=\"cancel\">Zrušiť</string>\n  <string name=\"save\">Uložiť</string>\n  <string name=\"save_with_count\">Uložiť (%1$s)</string>\n  <string name=\"update\">Aktualizovať</string>\n  <string name=\"empty\">Prázdne</string>\n  <string name=\"installing_message\">Klepnite na <b>Aktualizovať</b>, keď sa zobrazí výzva.\nReVanced Manager sa počas aktualizácie zatvorí.</string>\n  <string name=\"no_changelogs_found\">Nenašli sa žiadne zmeny</string>\n  <string name=\"just_now\">Práve teraz</string>\n  <string name=\"minutes_ago\">Pred %s min</string>\n  <string name=\"hours_ago\">Pred %s hod</string>\n  <string name=\"days_ago\">Pred %s dňami</string>\n  <string name=\"invalid_date\">Neplatný dátum</string>\n  <string name=\"disable_battery_optimization\">Vypnúť optimalizáciu batérie</string>\n  <string name=\"input_dialog_value_invalid\">Neplatná hodnota</string>\n  <string name=\"option_required\">Táto možnosť je povinná</string>\n  <string name=\"required_options_screen\">Požadované možnosti</string>\n  <string name=\"failed_to_check_updates\">Nepodarilo sa skontrolovať aktualizácie: %s</string>\n  <string name=\"no_update_available\">Žiadna aktualizácia k dispozícii</string>\n  <string name=\"no_announcements_found\">Nenašli sa žiadne oznámenia</string>\n  <string name=\"update_check\">Kontrolujú sa aktualizácie…</string>\n  <string name=\"dismiss_temporary\">Teraz nie</string>\n  <string name=\"update_available_dialog_description\">K dispozícii je nová verzia ReVanced Manager (%s).</string>\n  <string name=\"failed_to_download_update\">Nepodarilo sa stiahnuť aktualizáciu: %s</string>\n  <string name=\"download\">Stiahnuť</string>\n  <string name=\"download_confirmation_metered\">Momentálne ste na meranom pripojení a môžu sa účtovať poplatky za dáta od vášho poskytovateľa služieb.\n\nChcete aj tak pokračovať?</string>\n  <string name=\"download_update_confirmation\">Stiahnuť aktualizáciu?</string>\n  <string name=\"no_contributors_found\">Nenašli sa žiadni prispievatelia</string>\n  <string name=\"select\">Vybrať</string>\n  <string name=\"select_deselect_all\">Vybrať alebo zrušiť výber všetkých</string>\n  <string name=\"select_patches_type_dialog_description\">Pridať nové záplaty z URL alebo lokálnych súborov</string>\n  <string name=\"local_patches_description\">Pridať záplaty z lokálneho úložiska.</string>\n  <string name=\"remote_patches_description\">Pridať záplaty z URL. Záplaty sa môžu automaticky aktualizovať.</string>\n  <string name=\"recommended\">Odporúčané</string>\n  <string name=\"installation_failed_dialog_title\">Inštalácia zlyhala</string>\n  <string name=\"installation_cancelled_dialog_title\">Inštalácia zrušená</string>\n  <string name=\"installation_blocked_dialog_title\">Inštalácia zablokovaná</string>\n  <string name=\"installation_conflict_dialog_title\">Konflikt inštalácie</string>\n  <string name=\"installation_incompatible_dialog_title\">Inštalácia nekompatibilná</string>\n  <string name=\"installation_invalid_dialog_title\">Neplatná inštalácia</string>\n  <string name=\"installation_storage_issue_dialog_title\">Nedostatok úložiska</string>\n  <string name=\"installation_timeout_dialog_title\">Časový limit inštalácie vypršal</string>\n  <string name=\"installation_failed_description\">Inštalácia zlyhala z neznámeho dôvodu. Skúsiť znova?</string>\n  <string name=\"installation_aborted_description\">Inštalácia bola manuálne zrušená. Skúsiť znova?</string>\n  <string name=\"installation_blocked_description\">Inštalácia bola zablokovaná. Skontrolujte nastavenia zabezpečenia vášho zariadenia a skúste to znova.</string>\n  <string name=\"installation_conflict_description\">Inštalácii zabránila existujúca inštalácia aplikácie. Odinštalovať nainštalovanú aplikáciu a skúsiť to znova?</string>\n  <string name=\"installation_incompatible_description\">Aplikácia je nekompatibilná s týmto zariadením. Použite APK, ktoré je kompatibilné s týmto zariadením a skúste to znova.</string>\n  <string name=\"installation_invalid_description\">Aplikácia je neplatná. Odinštalovať aplikáciu a skúsiť to znova?</string>\n  <string name=\"installation_storage_issue_description\">Aplikáciu sa nepodarilo nainštalovať z dôvodu nedostatku úložiska. Uvoľnite miesto a skúste to znova.</string>\n  <string name=\"installation_timeout_description\">Inštalácia trvala príliš dlho. Skúsiť znova?</string>\n  <string name=\"reinstall\">Preinštalovať</string>\n  <string name=\"show\">Zobraziť</string>\n  <string name=\"debugging\">Ladí sa</string>\n  <string name=\"about_device\">O zariadení</string>\n  <string name=\"enter_url\">Zadajte URL</string>\n  <string name=\"next\">Ďalej</string>\n  <string name=\"auto_update\">Automatická aktualizácia</string>\n  <string name=\"add_patches\">Pridať záplaty</string>\n  <string name=\"auto_update_description\">Automaticky aktualizovať, keď je k dispozícii nová verzia</string>\n  <string name=\"patches_prereleases\">Používať predbežné vydania</string>\n  <string name=\"patches_prereleases_description\">Používať predbežné verzie %s</string>\n  <string name=\"patches_url\">URL záplat</string>\n  <string name=\"incompatible_patches_dialog\">Tieto záplaty nie sú kompatibilné s vybranou verziou aplikácie (%1$s).\n\nKliknite na záplaty pre zobrazenie ďalších podrobností.</string>\n  <string name=\"incompatible_patch\">Nekompatibilná záplata</string>\n  <string name=\"any_version\">Akýkoľvek</string>\n  <string name=\"never_show_again\">Už nikdy nezobrazovať</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Zobraziť správu o aktualizácii pri spustení</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Zobraziť vyskakovacie oznámenie vždy, keď je pri spustení k dispozícii nová aktualizácia</string>\n  <string name=\"failed_to_import_keystore\">Nepodarilo sa importovať úložisko kľúčov</string>\n  <string name=\"export\">Exportovať</string>\n  <string name=\"confirm\">Potvrdiť</string>\n  <string name=\"new_announcement\">Nové oznámenie:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d záplata</item>\n    <item quantity=\"few\">%d záplaty</item>\n    <item quantity=\"many\">%d záplat</item>\n    <item quantity=\"other\">%d záplat</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Vykonajte %d záplatu</item>\n    <item quantity=\"few\">Vykonajte %d záplaty</item>\n    <item quantity=\"many\">Vykonajte %d záplat</item>\n    <item quantity=\"other\">Vykonajte %d záplat</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d vybratý</item>\n    <item quantity=\"few\">%d vybraté</item>\n    <item quantity=\"many\">%d vybratých</item>\n    <item quantity=\"other\">%d vybratých</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sl-rSI/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Popravljalnik</string>\n  <string name=\"patches\">Popravki</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Upravitelj</string>\n  <string name=\"onboarding_welcome_to\">Dobrodošli v</string>\n  <string name=\"onboarding_welcome_back\">Pozdravljeni! To je novi</string>\n  <string name=\"onboarding_apps_subtitle\">Aplikacijo za popravljanje lahko izberete zdaj ali pozneje.</string>\n  <string name=\"onboarding_apps_network_error\">Popravkov ni bilo mogoče naložiti, ker je omrežje nedosegljivo ali nestabilno. Povežite se s stabilnim omrežjem in poskusite znova.</string>\n  <string name=\"onboarding_updates_subtitle\">Konfigurirajte samodejne posodobitve, da bodo ReVanced Manager in popravki posodobljeni.</string>\n  <string name=\"banner_sources_not_downloaded_description\">Popravkov in programov za prenos ni bilo mogoče prenesti med namestitvijo. Tapnite posodobi, da jih prenesete.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager se bo povezal z %s za prenos začetnih različic, če je vaša naprava povezana z internetom.</string>\n  <string name=\"retry\">Ponovi</string>\n  <string name=\"onboarding_skip\">Preskoči za zdaj</string>\n  <string name=\"onboarding_recommended_version\">Priporočena različica: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Preskoči dovoljenja?</string>\n  <string name=\"onboarding_permissions_skip_description\">Brez zahtevanih dovoljenj nekatere funkcije morda ne bodo delovale pravilno. Dovoljenja lahko podelite pozneje v nastavitvah aplikacije.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Preskoči vseeno</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager potrebuje nekaj dovoljenj za pravilno delovanje</string>\n  <string name=\"permission_install_apps\">Namesti neznane aplikacije</string>\n  <string name=\"permission_install_apps_description\">Potrebno za namestitev popravljenih aplikacij</string>\n  <string name=\"permission_notifications\">Obvestila</string>\n  <string name=\"permission_notifications_description\">Omogoča nemoteno popravljanje v ozadju</string>\n  <string name=\"permission_battery\">Optimizacija baterije</string>\n  <string name=\"permission_battery_description\">Preprečuje prekinitev popravljanja v ozadju</string>\n  <string name=\"permission_grant\">Podeli</string>\n  <string name=\"downloader_host_permission_label\">Gostitelj prenosnika ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Uporablja se za nadzor dostopa do prenosnikov ReVanced Manager. To ima samo ReVanced Manager.</string>\n  <string name=\"toast_copied_to_clipboard\">Kopirano!</string>\n  <string name=\"copy_to_clipboard\">Kopiraj v odložišče</string>\n  <string name=\"dashboard\">Nadzorna plošča</string>\n  <string name=\"settings\">Nastavitve</string>\n  <string name=\"select_app\">Izberite aplikacijo</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d izbranih</string>\n  <string name=\"fab_patch_app\">Popravi aplikacijo</string>\n  <string name=\"fab_add_patches\">Dodaj popravke</string>\n  <string name=\"new_downloader_notification\">Na voljo je nov prenosnik(-i). Kliknite tukaj za konfiguracijo.</string>\n  <string name=\"unsupported_architecture_warning\">Popravljanje na tej arhitekturi naprave ni podprto in bo najverjetneje neuspešno.</string>\n  <string name=\"import_\">Uvozi</string>\n  <string name=\"import_patches\">Uvozi popravke</string>\n  <string name=\"file_field_set\">Izbrano</string>\n  <string name=\"file_field_not_set\">Ni izbrano</string>\n  <string name=\"field_not_set\">Ni nastavljeno</string>\n  <string name=\"patches_missing\">Manjka</string>\n  <string name=\"patches_error\">Napaka</string>\n  <string name=\"patches_error_description\">Popravkov ni bilo mogoče naložiti. Kliknite za ogled napake.</string>\n  <string name=\"patches_not_downloaded\">Popravki niso bili preneseni.</string>\n  <string name=\"patches_name_default\">Popravki</string>\n  <string name=\"patches_name_fallback\">Nepoimenovano</string>\n  <string name=\"android_11_bug_dialog_title\">Napaka v Androidu 11</string>\n  <string name=\"android_11_bug_dialog_description\">Dovoljenje za namestitev aplikacije mora biti podeljeno vnaprej, da se izognete napaki v sistemu Android 11, ki bi negativno vplivala na uporabniško izkušnjo.</string>\n  <string name=\"no_network_toast\">Ni na voljo internetne povezave</string>\n  <string name=\"selected_app_meta_any_version\">Katera koli razpoložljiva različica</string>\n  <string name=\"app_source_dialog_title\">Izberi vir</string>\n  <string name=\"app_source_dialog_option_auto\">Samodejno</string>\n  <string name=\"app_source_dialog_option_auto_description\">Uporabi nameščeno aplikacijo, nato preneseni APK, nato razpoložljive prenašalnike</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Na voljo ni združljive aplikacije ali prenašalnikov</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Nameščenih aplikacij ni mogoče znova popraviti brez dostopa root</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Različica %s se ne ujema s predlagano različico</string>\n  <string name=\"patch_item_description\">Začnite popravljati aplikacijo</string>\n  <string name=\"patch_selector_item\">Izberite popravke</string>\n  <string name=\"patch_selector_item_description\">%d izbranih popravkov</string>\n  <string name=\"patch_selection_changed_warning\">Izbor popravkov je bil spremenjen</string>\n  <string name=\"no_patches_selected\">Ni izbranih popravkov</string>\n  <string name=\"network_unavailable_warning\">Vaša naprava ni povezana z internetom. Prenos bo kasneje neuspešen.</string>\n  <string name=\"network_metered_warning\">Trenutno ste na omejeni povezavi. Morda se zaračunajo stroški prenosa podatkov vašega ponudnika storitev.</string>\n  <string name=\"apk_source_selector_item\">Izberite vir APK-ja</string>\n  <string name=\"apk_source_auto\">Samodejno</string>\n  <string name=\"apk_source_auto_installed\">Samodejno · Uporaba nameščenega APK-ja</string>\n  <string name=\"apk_source_auto_downloaded\">Samodejno · Uporaba prenesenega APK-ja</string>\n  <string name=\"apk_source_auto_downloader\">Samodejno · Uporaba razpoložljivih prenosnikov</string>\n  <string name=\"apk_source_auto_storage\">Samodejno · Izberi iz shrambe</string>\n  <string name=\"apk_source_downloader\">Uporaba %s</string>\n  <string name=\"apk_source_installed\">Uporaba nameščenega APK-ja</string>\n  <string name=\"apk_source_local\">Uporaba lokalne datoteke APK</string>\n  <string name=\"apk_source_downloaded\">Že preneseno</string>\n  <string name=\"legacy_import_failed\">Neuspešen uvoz podedovanih nastavitev</string>\n  <string name=\"auto_updates_dialog_title\">Konfigurirajte posodobitve</string>\n  <string name=\"auto_updates_dialog_description\">Ali želite, da ReVanced Manager redno preverja posodobitve za naslednje komponente?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced popravki</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Prenosniki</string>\n  <string name=\"auto_updates_dialog_note\">Te nastavitve lahko pozneje spremenite.\n\n    ReVanced Manager se bo povezal z %s za prenos začetnih različic, če je vaša naprava povezana z internetom.</string>\n  <string name=\"announcements_filter_tag\">Filtriraj po oznaki</string>\n  <string name=\"announcements_show_archived\">Prikaži arhivirano</string>\n  <string name=\"general\">Splošno</string>\n  <string name=\"general_description\">Jezik, tema, dinamična barva</string>\n  <string name=\"updates\">Posodobitve</string>\n  <string name=\"updates_description\">Preveri posodobitve in si oglej dnevnik sprememb</string>\n  <string name=\"downloads\">Prenosi</string>\n  <string name=\"downloads_description\">Prenosniki in prenesene aplikacije</string>\n  <string name=\"import_export\">Uvoz &amp; izvoz</string>\n  <string name=\"import_export_description\">Pomnilnik ključev, možnosti in izbira popravkov</string>\n  <string name=\"advanced\">Napredno</string>\n  <string name=\"advanced_description\">URL API-ja, omejitev pomnilnika, odpravljanje napak</string>\n  <string name=\"safeguards_toggled_warning\">Varovalke so bile preklopljene</string>\n  <string name=\"about\">O programu</string>\n  <string name=\"about_app_name\">O %1$s</string>\n  <string name=\"opensource_licenses\">Licence odprtokodne kode</string>\n  <string name=\"opensource_licenses_description\">Oglejte si vse knjižnice, uporabljene za izdelavo te aplikacije</string>\n  <string name=\"contributors\">Sodelujoči</string>\n  <string name=\"contributors_description\">Oglejte si sodelujoče pri ReVanced</string>\n  <string name=\"dynamic_color\">Dinamična barva</string>\n  <string name=\"dynamic_color_description\">Prilagodite barve ozadju</string>\n  <string name=\"pure_black_theme\">Tema čiste črnine</string>\n  <string name=\"pure_black_theme_description\">Uporabite čisto črno ozadje za temno temo</string>\n  <string name=\"theme\">Tema</string>\n  <string name=\"theme_description\">Izberite med svetlo ali temno temo</string>\n  <string name=\"language\">Jezik</string>\n  <string name=\"language_description\">Izberite jezik prikaza aplikacije</string>\n  <string name=\"language_system_default\">Privzeto sistemsko</string>\n  <string name=\"search_languages\">Iskanje jezikov…</string>\n  <string name=\"safeguards\">Varovala</string>\n  <string name=\"patch_compat_check\">Onemogoči preverjanje združljivosti različic</string>\n  <string name=\"patch_compat_check_description\">Ne omejujte popravkov na združljive različice aplikacij</string>\n  <string name=\"patch_compat_check_confirmation\">Izbira nezdružljivih popravkov lahko povzroči nedelujočo aplikacijo.\n\nAli želite kljub temu nadaljevati?</string>\n  <string name=\"suggested_version_safeguard\">Zahtevaj predlagano različico aplikacije</string>\n  <string name=\"suggested_version_safeguard_description\">Vsili izbiro predlagane različice aplikacije</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Izbira aplikacije, ki ni predlagana različica, lahko povzroči nepričakovane težave.\n\nAli želite kljub temu nadaljevati?</string>\n  <string name=\"patch_selection_safeguard\">Dovoli spreminjanje izbire in možnosti popravkov</string>\n  <string name=\"patch_selection_safeguard_description\">Ne preprečujte izbire ali preklica izbire popravkov in prilagoditve možnosti</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Spreminjanje izbire popravkov lahko povzroči nepričakovane težave.\n\nOmogoči kljub temu?</string>\n  <string name=\"universal_patches_safeguard\">Dovoli uporabo univerzalnih popravkov</string>\n  <string name=\"universal_patches_safeguard_description\">Ne preprečujte uporabe univerzalnih popravkov</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Univerzalni popravki niso tako dobro preizkušeni kot tisti, ki so namenjeni določenim aplikacijam.\n\nOmogoči kljub temu?</string>\n  <string name=\"keystore\">Shranjevalnik ključev</string>\n  <string name=\"patches_selections\">Izbire popravkov</string>\n  <string name=\"import_keystore\">Uvozi pomnilnik ključev</string>\n  <string name=\"import_keystore_description\">Uvozi prilagojen pomnilnik ključev</string>\n  <string name=\"import_keystore_dialog_title\">Vnesite poverilnice pomnilnika ključev</string>\n  <string name=\"import_keystore_dialog_description\">Za uvoz pomnilnika ključev boste morali vnesti njegove poverilnice.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Uporabniško ime (Vzdevek)</string>\n  <string name=\"import_keystore_dialog_password_field\">Geslo</string>\n  <string name=\"import_keystore_dialog_button\">Uvozi</string>\n  <string name=\"import_keystore_wrong_credentials\">Napačne poverilnice pomnilnika ključev</string>\n  <string name=\"import_keystore_success\">Uvožen pomnilnik ključev</string>\n  <string name=\"export_keystore\">Izvozi pomnilnik ključev</string>\n  <string name=\"export_keystore_description\">Izvozi trenutni pomnilnik ključev</string>\n  <string name=\"export_keystore_unavailable\">Ni pomnilnika ključev za izvoz</string>\n  <string name=\"export_keystore_success\">Izvožen pomnilnik ključev</string>\n  <string name=\"regenerate_keystore\">Ponovno ustvari pomnilnik ključev</string>\n  <string name=\"regenerate_keystore_description\">Ustvari nov pomnilnik ključev</string>\n  <string name=\"regenerate_keystore_dialog_description\">Ponovno boste ustvarili pomnilnik ključev, ki ga bo upravitelj uporabljal med postopkom popravljanja.\n\nPrej nameščenih aplikacij s tega vira ne boste mogli posodobiti.</string>\n  <string name=\"regenerate_keystore_success\">Pomnilnik ključev je bil uspešno zamenjan</string>\n  <string name=\"import_patch_selection\">Uvozi izbiro popravkov</string>\n  <string name=\"import_patch_selection_description\">Uvozi izbiro popravkov iz datoteke JSON</string>\n  <string name=\"import_patch_selection_fail\">Izbire popravkov ni bilo mogoče uvoziti: %s</string>\n  <string name=\"import_patch_selection_success\">Uvožena izbira popravkov</string>\n  <string name=\"select_bundle_for_import\">Izberite paket za uvoz</string>\n  <string name=\"export_patch_selection\">Izvozi izbiro popravkov</string>\n  <string name=\"export_patch_selection_description\">Izvozi izbiro popravkov v datoteko JSON</string>\n  <string name=\"export_patch_selection_fail\">Izbire popravkov ni bilo mogoče izvoziti: %s</string>\n  <string name=\"export_patch_selection_success\">Izvožena izbira popravkov</string>\n  <string name=\"select_bundle_for_export\">Izberite paket za izvoz</string>\n  <string name=\"patch_selection_packages\">Aplikacije s shranjenimi izbirami</string>\n  <string name=\"patch_selection_entries\">Skupno izbranih popravkov</string>\n  <string name=\"reset_configuration\">Ponastavi konfiguracijo</string>\n  <string name=\"reset_patch_selection\">Izbire popravkov</string>\n  <string name=\"reset_patch_selection_description\">Ponastavi shranjeno izbiro popravkov</string>\n  <string name=\"reset_patch_options\">Možnosti popravkov</string>\n  <string name=\"reset_patch_options_description\">Ponastavi shranjene možnosti popravkov</string>\n  <string name=\"reset_patch_selection_success\">Izbira popravkov je bila ponastavljena</string>\n  <string name=\"patch_selection_reset_all\">Globalno ponastavi izbiro popravkov</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Ponastavili boste vse izbire popravkov. Vsak popravek boste morali znova izbrati ročno.</string>\n  <string name=\"patch_selection_reset_all_description\">Ponastavi vse izbire popravkov</string>\n  <string name=\"patch_selection_reset_package\">Ponastavi izbiro popravkov za aplikacijo</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Ponastavili boste izbiro popravkov za aplikacijo \\\"%s\\\". Vsak popravek boste morali znova izbrati ročno.</string>\n  <string name=\"patch_selection_reset_package_description\">Ponastavi izbiro popravkov za eno samo aplikacijo</string>\n  <string name=\"patch_selection_reset_patches\">Ponastavi izbiro popravkov (posamezno)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Ponastavili boste izbiro popravkov za \\\"%s\\\". Vsak popravek boste morali znova izbrati ročno.</string>\n  <string name=\"patch_selection_reset_patches_description\">Ponastavi izbiro popravkov za določeno zbirko popravkov</string>\n  <string name=\"patch_options_reset_package\">Ponastavi možnosti popravkov za aplikacijo</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Ponastavili boste možnosti popravkov za aplikacijo \\\"%s\\\". Vsako možnost boste morali znova uporabiti.</string>\n  <string name=\"patch_options_reset_package_description\">Ponastavi možnosti popravkov za eno aplikacijo</string>\n  <string name=\"patch_options_reset_patches\">Ponastavi možnosti popravkov (posamezno)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Ponastavili boste možnosti popravkov za \\\"%s\\\". Vsako možnost boste morali znova uporabiti.</string>\n  <string name=\"patch_options_reset_patches_description\">Ponastavi možnosti popravkov za določeno zbirko popravkov</string>\n  <string name=\"patch_options_reset_all\">Globalno ponastavi možnosti popravkov</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Ponastavili boste vse možnosti popravkov. Vsako možnost boste morali znova uporabiti.</string>\n  <string name=\"patch_options_reset_all_description\">Ponastavi vse možnosti popravkov</string>\n  <string name=\"downloaders\">Prenosniki</string>\n  <string name=\"downloader_prereleases\">Uporabi predizdaje</string>\n  <string name=\"downloader_prereleases_description\">Uporabi predizdajne različice glavnega prenosnika</string>\n  <string name=\"downloader_state_loaded\">Naloženo</string>\n  <string name=\"downloader_state_failed\">Nalaganje ni uspelo. Kliknite za več podrobnosti</string>\n  <string name=\"downloader_state_missing\">Manjka</string>\n  <string name=\"downloader_delete_apps_title\">Izbriši izbrane aplikacije</string>\n  <string name=\"downloader_delete_apps_description\">Ali ste prepričani, da želite izbrisati izbrane aplikacije?</string>\n  <string name=\"downloader_delete_single_description\">Ali ste prepričani, da želite izbrisati \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Ni najdenih prenesenih aplikacij.</string>\n  <string name=\"downloader_settings_no_apps_description\">Aplikacije, prenesene prek ReVanced Manager, se bodo prikazale tukaj.</string>\n  <string name=\"downloader_url\">URL prenašalnika</string>\n  <string name=\"downloader_add\">Dodaj prenašalnik</string>\n  <string name=\"select_downloader_type_dialog_description\">Dodaj nove prenašalnike iz URL-ja ali lokalnih datotek</string>\n  <string name=\"local_downloaders_description\">Dodaj prenašalnike iz lokalnega pomnilnika.</string>\n  <string name=\"remote_downloaders_description\">Dodaj prenašalnike iz URL-ja. Lahko se samodejno posodobijo.</string>\n  <string name=\"install_revanced_downloaders\">Namestite prenosnike za pridobivanje aplikacij neposredno znotraj ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Namesti prenosnike ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Prekliči namestitev prenosnikov?</string>\n  <string name=\"cancel_downloader_install_description\">Namestitev prenosnikov je v teku. Če zdaj odidete, bo prenos preklican.</string>\n  <string name=\"downloader_sources_unavailable_title\">Ti prenašalniki manjkajo</string>\n  <string name=\"downloader_sources_unavailable_description\">Za popravilo kliknite gumb za posodobitev.</string>\n  <string name=\"downloader_update_failed\">Posodobitev prenašalnika ni uspela: %s</string>\n  <string name=\"downloader_replace_fail\">Uvoz prenašalnika ni uspel: %s</string>\n  <string name=\"search_apps\">Iskanje aplikacij…</string>\n  <string name=\"loading_body\">Nalaganje…</string>\n  <string name=\"downloading_patches\">Prenos popravkov…</string>\n  <string name=\"options\">Možnosti</string>\n  <string name=\"ok\">V redu</string>\n  <string name=\"yes\">Da</string>\n  <string name=\"no\">Ne</string>\n  <string name=\"edit\">Uredi</string>\n  <string name=\"dialog_input_placeholder\">Vrednost</string>\n  <string name=\"reset\">Ponastavi</string>\n  <string name=\"share\">Deli</string>\n  <string name=\"patch\">Popravek</string>\n  <string name=\"select_from_storage\">Izberi iz shrambe</string>\n  <string name=\"select_from_storage_description\">Izberite datoteko APK iz shrambe z uporabo izbirnika datotek</string>\n  <string name=\"suggested_version_info\">Predlagana različica: %s</string>\n  <string name=\"type_anything\">Vnesite karkoli za nadaljevanje</string>\n  <string name=\"search\">Iskanje popravkov…</string>\n  <string name=\"apply\">Uveljavi</string>\n  <string name=\"help\">Pomoč</string>\n  <string name=\"back\">Nazaj</string>\n  <string name=\"warning\">Opozorilo</string>\n  <string name=\"add\">Dodaj</string>\n  <string name=\"enable\">Omogoči</string>\n  <string name=\"disable\">Onemogoči</string>\n  <string name=\"close\">Zapri</string>\n  <string name=\"clear\">Počisti</string>\n  <string name=\"system\">Sistem</string>\n  <string name=\"light\">Svetlo</string>\n  <string name=\"dark\">Temno</string>\n  <string name=\"appearance\">Videz</string>\n  <string name=\"networking\">Omrežje</string>\n  <string name=\"allow_metered_networks\">Dovoli omrežja z omejenim prenosom podatkov</string>\n  <string name=\"allow_metered_networks_description\">Omogoča samodejne posodobitve na omrežjih z omejenim prenosom podatkov.\\n    Aplikacija lahko še vedno opozarja na omrežja z omejenim prenosom podatkov za ročne operacije.</string>\n  <string name=\"downloaded_apps\">Prenesene aplikacije</string>\n  <string name=\"process_runtime\">Zaženi Patcher v drugem procesu (eksperimentalno)</string>\n  <string name=\"process_runtime_description\">To je hitreje in omogoča Patcherju uporabo več pomnilnika</string>\n  <string name=\"process_runtime_memory_limit\">Omejitev pomnilnika procesa Patcher</string>\n  <string name=\"process_runtime_memory_limit_description\">Največja količina pomnilnika, ki jo lahko uporabi proces popravljalnika</string>\n  <string name=\"debug_logs_export\">Izvozi dnevnike razhroščevanja</string>\n  <string name=\"debug_logs_export_read_failed\">Branje dnevnikov ni uspelo (izhodna koda %d)</string>\n  <string name=\"debug_logs_export_failed\">Izvoz dnevnikov ni uspel</string>\n  <string name=\"debug_logs_export_success\">Izvoženi dnevniki</string>\n  <string name=\"api_url\">URL API-ja</string>\n  <string name=\"api_url_description\">API, ki se uporablja za prenos potrebnih datotek</string>\n  <string name=\"api_url_dialog_title\">Spremeni URL API-ja</string>\n  <string name=\"api_url_dialog_description\">Spremenite URL API-ja za ReVanced Manager. ReVanced Manager uporablja API za prenos popravkov in posodobitev.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager se poveže z API-jem za prenos popravkov in posodobitev. Prepričajte se, da mu zaupate.</string>\n  <string name=\"api_url_dialog_save\">Nastavi</string>\n  <string name=\"api_url_dialog_reset\">Ponastavi URL API-ja</string>\n  <string name=\"device\">Naprava</string>\n  <string name=\"device_android_version\">Različica Androida</string>\n  <string name=\"device_model\">Model</string>\n  <string name=\"device_architectures\">CPU arhitekture</string>\n  <string name=\"device_memory_limit\">Omejitve pomnilnika</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normalno) - %2$dMB (Veliko)</string>\n  <string name=\"patches_force_download\">Prisilni prenos vseh popravkov</string>\n  <string name=\"patches_reset\">Ponastavi popravke</string>\n  <string name=\"reset_onboarding\">Ponastavi uvodni zaslon</string>\n  <string name=\"reset_onboarding_description\">Prikaži uvodni zaslon ob naslednjem zagonu aplikacije</string>\n  <string name=\"patching\">Krpanje</string>\n  <string name=\"signing\">Podpisovanje</string>\n  <string name=\"storage\">Shramba</string>\n  <string name=\"no_patch_found\">Ni najdenih popravkov. Preverite svoje popravke</string>\n  <string name=\"tab_apps\">Aplikacije</string>\n  <string name=\"tab_patches\">Popravki</string>\n  <string name=\"delete\">Izbriši</string>\n  <string name=\"refresh\">Osveži</string>\n  <string name=\"continue_anyways\">Vseeno nadaljuj</string>\n  <string name=\"download_another_version\">Prenesi drugo različico</string>\n  <string name=\"download_app\">Prenesi aplikacijo</string>\n  <string name=\"download_apk\">Prenesi datoteko APK</string>\n  <string name=\"patches_download_fail\">Prenos popravkov ni uspel: %s</string>\n  <string name=\"api_not_working_title\">Storitev API trenutno ne deluje</string>\n  <string name=\"api_not_working_description\">Nekatere funkcije so morda prizadete. Preverite svojo povezavo ali URL API-ja v nastavitvah.</string>\n  <string name=\"patches_replace_fail\">Uvoz popravkov ni uspel: %s</string>\n  <string name=\"no_patched_apps_found\">Ni najdenih popravljenih aplikacij</string>\n  <string name=\"no_patched_apps_description\">Trenutno nimate nobenih popravljenih aplikacij, za katere bi vedeli. To spremenite tako, da popravite svojo prvo aplikacijo!</string>\n  <string name=\"patched_apps_section_title\">Popravljene aplikacije</string>\n  <string name=\"patchable_apps_section_title\">Aplikacije, ki jih je mogoče popraviti</string>\n  <string name=\"no_patches_found\">Ni najdenih popravkov</string>\n  <string name=\"no_patches_description\">Še nimate nobenih popravkov. Dodajte popravke tako, da se dotaknete spodnjega gumba!</string>\n  <string name=\"tap_on_patches\">Tapnite na popravke za več informacij o njih</string>\n  <string name=\"patches_selected\">Izbrano: %s</string>\n  <string name=\"incompatible_patches\">Nezdružljivi popravki</string>\n  <string name=\"universal_patches\">Univerzalni popravki</string>\n  <string name=\"patch_selection_reset_toast\">Izbira popravkov in možnosti je bila ponastavljena na priporočene privzete nastavitve</string>\n  <string name=\"patch_options_reset_toast\">Možnosti popravkov so bile ponastavljene</string>\n  <string name=\"non_suggested_version_warning_title\">Nepredlagana različica</string>\n  <string name=\"non_suggested_version_warning_description\">Izbrana različica aplikacije se ne ujema s predlagano različico.\\nUporabite predlagano različico: %s\\n\\nZa nadaljevanje onemogočite \\\"Zahtevaj predlagano različico aplikacije\\\" v naprednih nastavitvah.</string>\n  <string name=\"selection_warning_title\">Ustavi uporabo privzetih nastavitev?</string>\n  <string name=\"selection_warning_description\">Priporočljivo je uporabiti privzeto izbiro popravkov in možnosti. Spreminjanje le-teh lahko povzroči nepričakovane težave.\\n\\nPred preklapljanjem popravkov morate v naprednih nastavitvah vklopiti \\\"Dovoli spreminjanje izbire in možnosti popravkov\\\".</string>\n  <string name=\"universal_patch_warning_description\">Univerzalni popravki imajo bolj splošno uporabo in ne delujejo tako zanesljivo kot popravki, ki so namenjeni določenim aplikacijam. Pri njihovi uporabi lahko naletite na težave.\\n\\nPred uporabo univerzalnih popravkov morate v naprednih nastavitvah vklopiti \\\"Dovoli uporabo univerzalnih popravkov\\\".</string>\n  <string name=\"this_version\">Ta različica</string>\n  <string name=\"universal\">Katerakoli aplikacija</string>\n  <string name=\"search_patches\">Iskanje popravkov</string>\n  <string name=\"app_version_not_compatible\">Ta popravek ni združljiv z izbrano različico aplikacije (%1$s)\\n\\nZdružljiv je samo z naslednjo(-imi) različico(-ami): %2$s</string>\n  <string name=\"continue_with_version\">Nadaljuj s to različico?</string>\n  <string name=\"version_not_compatible\">Vsi popravki niso združljivi s to različico (%s). Ali želite vseeno nadaljevati?</string>\n  <string name=\"download_application\">Prenesi aplikacijo?</string>\n  <string name=\"app_not_installed\">Izbrana aplikacija ni nameščena. Jo želite prenesti?</string>\n  <string name=\"failed_to_load_apk\">Nalaganje APK ni uspelo</string>\n  <string name=\"split_apk_not_supported\">Razdeljenih APK-jev ni mogoče popraviti</string>\n  <string name=\"loading\">Nalaganje…</string>\n  <string name=\"not_installed\">Ni nameščeno</string>\n  <string name=\"installed\">Nameščeno</string>\n  <string name=\"app_info\">Informacije o aplikaciji</string>\n  <string name=\"uninstall\">Odstrani</string>\n  <string name=\"unpatch\">Odstrani popravek</string>\n  <string name=\"repatch\">Ponovno popravi</string>\n  <string name=\"install_type\">Vrsta namestitve</string>\n  <string name=\"package_name\">Ime paketa</string>\n  <string name=\"original_package_name\">Izvirno ime paketa</string>\n  <string name=\"applied_patches\">Uporabljeni popravki</string>\n  <string name=\"view_applied_patches\">Ogled uporabljenih popravkov</string>\n  <string name=\"default_install\">Privzeto</string>\n  <string name=\"mount_install\">Priklopi</string>\n  <string name=\"mounted\">Priklopljeno</string>\n  <string name=\"not_mounted\">Ni priklopljeno</string>\n  <string name=\"mount\">Priklopi</string>\n  <string name=\"unmount\">Odklopi</string>\n  <string name=\"failed_to_mount\">Priklapljanje ni uspelo: %s</string>\n  <string name=\"failed_to_unmount\">Odklapljanje ni uspelo: %s</string>\n  <string name=\"unpatch_app\">Odstrani popravke aplikacije?</string>\n  <string name=\"unpatch_description\">Ali ste prepričani, da želite odstraniti popravke te aplikacije?</string>\n  <string name=\"downloader_invalid_version\">Prenosnik ni prenesel pravilne različice</string>\n  <string name=\"downloader_app_not_found\">Prenosnik ni našel aplikacije</string>\n  <string name=\"downloader_error\">Napaka prenosnika: %s</string>\n  <string name=\"no_downloaders_installed\">Ni nameščenih prenosnikov aplikacij!</string>\n  <string name=\"no_downloaders_trusted\">Noben prenosnik aplikacij ni zaupanja vreden! Prosimo, preverite svoje nastavitve.</string>\n  <string name=\"already_patched\">Že popravljeno</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filter</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Združljivost</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paketi</string>\n  <string name=\"patch_selector_sheet_actions_title\">Dejanja</string>\n  <string name=\"restore_default_selection\">Obnovi privzeto izbiro</string>\n  <string name=\"deselect_all\">Prekliči izbiro vseh</string>\n  <string name=\"invert_selection\">Obrni izbiro</string>\n  <string name=\"deselect_all_except\">Prekliči izbiro vseh, razen %s</string>\n  <string name=\"scope_dialog_title\">Uporabi za</string>\n  <string name=\"scope_all_patches\">Vsi popravki</string>\n  <string name=\"scope_bundle_patches\">Samo %s</string>\n  <string name=\"string_option_menu_description\">Več možnosti</string>\n  <string name=\"option_preset_custom_value\">Vrednost po meri</string>\n  <string name=\"path_selector\">Izberi iz shrambe</string>\n  <string name=\"path_selector_parent_dir\">Prejšnji imenik</string>\n  <string name=\"path_selector_dirs\">Imeniki</string>\n  <string name=\"path_selector_files\">Datoteke</string>\n  <string name=\"show_password_field\">Pokaži geslo</string>\n  <string name=\"hide_password_field\">Skrij geslo</string>\n  <string name=\"installer\">Namestitveni program</string>\n  <string name=\"install_app\">Namesti</string>\n  <string name=\"install_app_success\">Aplikacija nameščena</string>\n  <string name=\"install_app_fail\">Namestitev aplikacije ni uspela: %s</string>\n  <string name=\"reinstall_app_fail\">Ponovna namestitev aplikacije ni uspela: %s</string>\n  <string name=\"uninstall_app_fail\">Odstranitev aplikacije ni uspela: %s</string>\n  <string name=\"open_app\">Odpri</string>\n  <string name=\"save_apk\">Shrani APK</string>\n  <string name=\"save_apk_success\">APK shranjen</string>\n  <string name=\"sign_fail\">Podpisovanje APK ni uspelo: %s</string>\n  <string name=\"save_logs\">Shrani dnevnike</string>\n  <string name=\"save_as_file\">Shrani v datoteke</string>\n  <string name=\"export_patcher_logs\">Izvozi dnevnike popravljalnika</string>\n  <string name=\"save_logs_success\">Dnevniki shranjeni</string>\n  <string name=\"downloader_activity_dialog_body\">Za nadaljevanje s tem prenosnikom je potrebna uporabniška interakcija.</string>\n  <string name=\"select_install_type\">Izberite vrsto namestitve</string>\n  <string name=\"patcher_step_group_preparing\">Priprava</string>\n  <string name=\"patcher_step_load_patches\">Naloži popravke</string>\n  <string name=\"patcher_step_unpack\">Pripravi popravljalnik</string>\n  <string name=\"patcher_step_group_patching\">Popravljanje</string>\n  <string name=\"patcher_step_group_saving\">Shranjevanje</string>\n  <string name=\"patcher_step_write_patched\">Zapiši popravljeno datoteko APK</string>\n  <string name=\"patcher_step_sign_apk\">Podpiši popravljeno datoteko APK</string>\n  <string name=\"patcher_notification_title\">Popravljanje v teku…</string>\n  <string name=\"patcher_notification_text\">Tapnite za vrnitev v program za popravljanje</string>\n  <string name=\"patcher_stop_confirm_title\">Ustavi program za popravljanje</string>\n  <string name=\"patcher_stop_confirm_description\">Ali ste prepričani, da želite ustaviti postopek popravljanja?</string>\n  <string name=\"patcher_install_in_progress\">Namestitev je v teku. Prosimo, počakajte</string>\n  <string name=\"execute_patches\">Izvedi popravke</string>\n  <string name=\"executing_patch\">Izvajanje %s</string>\n  <string name=\"failed_to_execute_patch\">Izvajanje %s ni uspelo</string>\n  <string name=\"step_completed\">dokončano</string>\n  <string name=\"step_failed\">ni uspelo</string>\n  <string name=\"step_running\">v teku</string>\n  <string name=\"step_waiting\">čaka</string>\n  <string name=\"expand_content\">razširi</string>\n  <string name=\"collapse_content\">strni</string>\n  <string name=\"drag_handle\">preuredi</string>\n  <string name=\"more\">Več</string>\n  <string name=\"less\">Manj</string>\n  <string name=\"continue_\">Nadaljuj</string>\n  <string name=\"dismiss\">Opusti</string>\n  <string name=\"view_announcement\">Ogled objave</string>\n  <string name=\"permanent_dismiss\">Ne prikaži več</string>\n  <string name=\"donate\">Doniraj</string>\n  <string name=\"website\">Spletna stran</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Stik</string>\n  <string name=\"license\">Licenca</string>\n  <string name=\"source\">Vir</string>\n  <string name=\"repository\">Repozitorij</string>\n  <string name=\"bundle_information_by_author\">Avtor: %1$s</string>\n  <string name=\"version\">Različica</string>\n  <string name=\"version_compatibility_warning\">Izbrana različica morda ni združljiva z izbranimi popravki</string>\n  <string name=\"submit_feedback\">Pošlji težavo ali povratne informacije</string>\n  <string name=\"submit_feedback_description\">Pomagajte nam izboljšati to aplikacijo</string>\n  <string name=\"developer_options\">Možnosti za razvijalce</string>\n  <string name=\"developer_options_description\">Možnosti za odpravljanje napak</string>\n  <string name=\"patches_update_success\">Posodobitev uspešna</string>\n  <string name=\"patches_update_unavailable\">Posodobitev ni na voljo</string>\n  <string name=\"view_patches\">Ogled popravkov</string>\n  <string name=\"patches_view_any_version\">Katera koli različica</string>\n  <string name=\"patches_view_any_package\">Kateri koli paket</string>\n  <string name=\"patches_delete_single_dialog_description\">Ali ste prepričani, da želite izbrisati \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Ali ste prepričani, da želite izbrisati izbrane popravke?</string>\n  <string name=\"announcements\">Objave</string>\n  <string name=\"archive\">Arhiv</string>\n  <string name=\"about_revanced_manager\">O ReVanced Managerju</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager je aplikacija za Android, ki uporablja ReVanced Patcher za popravljanje aplikacij za Android. Omogoča prenos in popravljanje aplikacij z lastnimi popravki ter upravljanje postopka popravljanja.</string>\n  <string name=\"developer_options_taps\">%d preostalih dotikov</string>\n  <string name=\"developer_options_enabled\">Možnosti za razvijalce omogočene</string>\n  <string name=\"developer_options_already_enabled\">Možnosti za razvijalce so že omogočene</string>\n  <string name=\"update_available\">Posodobitev je na voljo</string>\n  <string name=\"current_version\">Trenutna različica: %s</string>\n  <string name=\"new_version\">Nova različica: %s</string>\n  <string name=\"ready_to_install_update\">Pripravljeno za namestitev posodobitve</string>\n  <string name=\"update_completed\">Posodobitev nameščena</string>\n  <string name=\"install_update_manager_failed\">Namestitev posodobitve ni uspela</string>\n  <string name=\"manual_update_check\">Preveri posodobitve</string>\n  <string name=\"view_update\">Ogled posodobitve</string>\n  <string name=\"manual_update_check_description\">Ročno preveri posodobitve</string>\n  <string name=\"update_checking_manager\">Ob zagonu preveri posodobitve</string>\n  <string name=\"update_checking_manager_description\">Ob zagonu aplikacije preveri nove različice ReVanced Managerja</string>\n  <string name=\"update_checking_downloader\">Preveri posodobitve prenosnikov ReVanced ob zagonu</string>\n  <string name=\"update_checking_downloader_description\">Preveri posodobitve nameščenih prenosnikov ReVanced ob zagonu aplikacije</string>\n  <string name=\"manager_prereleases\">Uporabi predizdaje</string>\n  <string name=\"manager_prereleases_description\">Uporabi predizdajne različice ReVanced Managerja</string>\n  <string name=\"prereleases_warning\">Predizdajne različice so lahko nestabilne in vsebujejo napake. Lahko pride do zrušitev, izgube podatkov ali drugih nepričakovanih težav. Omogočite to samo, če ste pripravljeni sprejeti ta tveganja.</string>\n  <string name=\"changelog\">Ogled dnevnika sprememb</string>\n  <string name=\"changelog_loading\">Nalaganje zgodovine sprememb</string>\n  <string name=\"changelog_download_fail\">Prenos zgodovine sprememb ni uspel: %s</string>\n  <string name=\"changelog_description\">Preverite najnovejše spremembe v tej posodobitvi</string>\n  <string name=\"battery_optimization_notification\">Optimizacije baterije morajo biti izklopljene, da ReVanced Manager pravilno deluje v ozadju. Kliknite tukaj za izklop optimizacij.</string>\n  <string name=\"installing_manager_update\">Nameščanje posodobitve…</string>\n  <string name=\"downloading_manager_update\">Prenašanje posodobitve…</string>\n  <string name=\"download_manager_failed\">Prenos posodobitve ni uspel: %s</string>\n  <string name=\"cancel\">Prekliči</string>\n  <string name=\"save\">Shrani</string>\n  <string name=\"save_with_count\">Shrani (%1$s)</string>\n  <string name=\"update\">Posodobi</string>\n  <string name=\"empty\">Prazno</string>\n  <string name=\"installing_message\">Tapnite na <b>Posodobi</b>, ko boste pozvani.\nReVanced Manager se bo med posodabljanjem zaprl.</string>\n  <string name=\"no_changelogs_found\">Zgodovina sprememb ni najdena</string>\n  <string name=\"just_now\">Pravkar</string>\n  <string name=\"minutes_ago\">pred %sm</string>\n  <string name=\"hours_ago\">pred %sh</string>\n  <string name=\"days_ago\">pred %sd</string>\n  <string name=\"invalid_date\">Neveljaven datum</string>\n  <string name=\"disable_battery_optimization\">Onemogoči optimizacijo baterije</string>\n  <string name=\"input_dialog_value_invalid\">Neveljavna vrednost</string>\n  <string name=\"option_required\">Ta možnost je obvezna</string>\n  <string name=\"required_options_screen\">Obvezne možnosti</string>\n  <string name=\"failed_to_check_updates\">Preverjanje posodobitev ni uspelo: %s</string>\n  <string name=\"no_update_available\">Posodobitev ni na voljo</string>\n  <string name=\"no_announcements_found\">Ni najdenih obvestil</string>\n  <string name=\"update_check\">Preverjam posodobitve…</string>\n  <string name=\"dismiss_temporary\">Ne zdaj</string>\n  <string name=\"update_available_dialog_description\">Na voljo je nova različica ReVanced Managerja (%s).</string>\n  <string name=\"failed_to_download_update\">Prenos posodobitve ni uspel: %s</string>\n  <string name=\"download\">Prenesi</string>\n  <string name=\"download_confirmation_metered\">Trenutno ste povezani prek omejene povezave, in vaš ponudnik storitev vam lahko zaračuna prenos podatkov.\n\nAli želite kljub temu nadaljevati?</string>\n  <string name=\"download_update_confirmation\">Prenesi posodobitev?</string>\n  <string name=\"no_contributors_found\">Ni najdenih sodelavcev</string>\n  <string name=\"select\">Izberi</string>\n  <string name=\"select_deselect_all\">Izberi ali prekliči izbiro vseh</string>\n  <string name=\"select_patches_type_dialog_description\">Dodaj nove popravke iz URL-ja ali lokalnih datotek</string>\n  <string name=\"local_patches_description\">Dodaj popravke iz lokalne shrambe.</string>\n  <string name=\"remote_patches_description\">Dodaj popravke iz URL-ja. Popravki se lahko samodejno posodobijo.</string>\n  <string name=\"recommended\">Priporočeno</string>\n  <string name=\"installation_failed_dialog_title\">Namestitev ni uspela</string>\n  <string name=\"installation_cancelled_dialog_title\">Namestitev preklicana</string>\n  <string name=\"installation_blocked_dialog_title\">Namestitev blokirana</string>\n  <string name=\"installation_conflict_dialog_title\">Konflikt pri namestitvi</string>\n  <string name=\"installation_incompatible_dialog_title\">Namestitev nezdružljiva</string>\n  <string name=\"installation_invalid_dialog_title\">Namestitev neveljavna</string>\n  <string name=\"installation_storage_issue_dialog_title\">Premalo prostora za shranjevanje</string>\n  <string name=\"installation_timeout_dialog_title\">Časovna omejitev namestitve potekla</string>\n  <string name=\"installation_failed_description\">Namestitev ni uspela zaradi neznanega razloga. Poskusite znova?</string>\n  <string name=\"installation_aborted_description\">Namestitev je bila ročno preklicana. Poskusite znova?</string>\n  <string name=\"installation_blocked_description\">Namestitev je bila blokirana. Preglejte varnostne nastavitve naprave in poskusite znova.</string>\n  <string name=\"installation_conflict_description\">Namestitev je preprečila obstoječa namestitev aplikacije. Odstranite nameščeno aplikacijo in poskusite znova?</string>\n  <string name=\"installation_incompatible_description\">Aplikacija ni združljiva s to napravo. Uporabite APK, ki je združljiv s to napravo, in poskusite znova.</string>\n  <string name=\"installation_invalid_description\">Aplikacija je neveljavna. Odstranite aplikacijo in poskusite znova?</string>\n  <string name=\"installation_storage_issue_description\">Aplikacije ni bilo mogoče namestiti zaradi nezadostnega prostora za shranjevanje. Sprostite nekaj prostora in poskusite znova.</string>\n  <string name=\"installation_timeout_description\">Namestitev je trajala predolgo. Poskusite znova?</string>\n  <string name=\"reinstall\">Ponovno namesti</string>\n  <string name=\"show\">Pokaži</string>\n  <string name=\"debugging\">Odpravljanje napak</string>\n  <string name=\"about_device\">O napravi</string>\n  <string name=\"enter_url\">Vnesite URL</string>\n  <string name=\"next\">Naprej</string>\n  <string name=\"auto_update\">Samodejna posodobitev</string>\n  <string name=\"add_patches\">Dodaj popravke</string>\n  <string name=\"auto_update_description\">Samodejno posodobi, ko je na voljo nova različica</string>\n  <string name=\"patches_prereleases\">Uporabi predizdaje</string>\n  <string name=\"patches_prereleases_description\">Uporabi predizdajne različice %s</string>\n  <string name=\"patches_url\">URL popravkov</string>\n  <string name=\"incompatible_patches_dialog\">Ti popravki niso združljivi z izbrano različico aplikacije (%1$s).\n\nKliknite na popravke za več podrobnosti.</string>\n  <string name=\"incompatible_patch\">Nezdružljiv popravek</string>\n  <string name=\"any_version\">Katero koli</string>\n  <string name=\"never_show_again\">Nikoli več ne pokaži</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Prikaži sporočilo o posodobitvi ob zagonu</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Prikaži pojavno obvestilo, kadar koli je ob zagonu na voljo nova posodobitev</string>\n  <string name=\"failed_to_import_keystore\">Uvoz shrambe ključev ni uspel</string>\n  <string name=\"export\">Izvozi</string>\n  <string name=\"confirm\">Potrdi</string>\n  <string name=\"new_announcement\">Novo obvestilo:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d popravek</item>\n    <item quantity=\"two\">%d popravka</item>\n    <item quantity=\"few\">%d popravki</item>\n    <item quantity=\"other\">%d popravkov</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Izvedi %d popravek</item>\n    <item quantity=\"two\">Izvedi %d popravka</item>\n    <item quantity=\"few\">Izvedi %d popravke</item>\n    <item quantity=\"other\">Izvedi %d popravkov</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d izbran</item>\n    <item quantity=\"two\">%d izbrana</item>\n    <item quantity=\"few\">%d izbrani</item>\n    <item quantity=\"other\">%d izbranih</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sq-rAL/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Arnimues</string>\n  <string name=\"patches\">Arna</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Menaxher</string>\n  <string name=\"onboarding_welcome_to\">Mirë se vini në</string>\n  <string name=\"onboarding_welcome_back\">Përshëndetje! Është i riu</string>\n  <string name=\"onboarding_apps_subtitle\">Ju mund të zgjidhni një aplikacion për ta modifikuar tani ose ta bëni më vonë</string>\n  <string name=\"onboarding_updates_subtitle\">Konfiguroni përditësimet automatike për të mbajtur ReVanced Manager dhe arkat e përditësuara</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager do të lidhet me %s për të shkarkuar versionet fillestare nëse pajisja juaj është e lidhur me internetin.</string>\n  <string name=\"retry\">Riprovo</string>\n  <string name=\"onboarding_skip\">Kalo për momentin</string>\n  <string name=\"onboarding_recommended_version\">Versioni i rekomanduar: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">T\\'i kaloni lejet?</string>\n  <string name=\"onboarding_permissions_skip_description\">Pa lejet e kërkuara, disa funksionalitete mund të mos punojnë siç duhet. Mund t\\'i jepni ato më vonë në cilësimet e aplikacionit.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Kalo gjithsesi</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager ka nevojë për disa leje për të funksionuar siç duhet</string>\n  <string name=\"permission_install_apps\">Instalo aplikacione të panjohura</string>\n  <string name=\"permission_install_apps_description\">Kërkohet për të instaluar aplikacione të patch-uara</string>\n  <string name=\"permission_notifications\">Njoftimet</string>\n  <string name=\"permission_battery\">Optimizimi i baterisë</string>\n  <string name=\"permission_battery_description\">Parandalon ndërprerjen e patch-imit në sfond</string>\n  <string name=\"permission_grant\">Jep</string>\n  <string name=\"downloader_host_permission_label\">Pritësi i shkarkuesit të ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Përdoret për të kontrolluar qasjen në shkarkuesit e ReVanced Manager. Vetëm ReVanced Manager e ka këtë.</string>\n  <string name=\"toast_copied_to_clipboard\">Kopjuar!</string>\n  <string name=\"copy_to_clipboard\">Kopjo në të papastër</string>\n  <string name=\"dashboard\">Paneli</string>\n  <string name=\"settings\">Cilësimet</string>\n  <string name=\"select_app\">Zgjidh një aplikacion</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d të zgjedhur</string>\n  <string name=\"fab_patch_app\">Patch-o një aplikacion</string>\n  <string name=\"fab_add_patches\">Shto patch-e</string>\n  <string name=\"new_downloader_notification\">Shkarkues(a) i ri i disponueshëm. Klikoni këtu për t\\'i konfiguruar.</string>\n  <string name=\"unsupported_architecture_warning\">Patch-imi në këtë arkitekturë pajisjeje nuk mbështetet dhe ka shumë mundësi të dështojë.</string>\n  <string name=\"import_\">Importo</string>\n  <string name=\"import_patches\">Importo patch-e</string>\n  <string name=\"file_field_set\">Zgjedhur</string>\n  <string name=\"file_field_not_set\">Pa zgjedhur</string>\n  <string name=\"field_not_set\">Pa caktuar</string>\n  <string name=\"patches_missing\">Mungon</string>\n  <string name=\"patches_error\">Gabim</string>\n  <string name=\"patches_error_description\">Patch-et nuk mund të ngarkoheshin. Kliko për të parë gabimin.</string>\n  <string name=\"patches_not_downloaded\">Arnat nuk janë shkarkuar.</string>\n  <string name=\"patches_name_default\">Patch-et</string>\n  <string name=\"patches_name_fallback\">Pa emër</string>\n  <string name=\"android_11_bug_dialog_title\">Gabim në Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">Leja për instalimin e aplikacionit duhet të jepet paraprakisht për të shmangur një gabim në sistemin Android 11 që do të ndikojë negativisht në përvojën e përdoruesit.</string>\n  <string name=\"no_network_toast\">Nuk ka lidhje interneti në dispozicion</string>\n  <string name=\"selected_app_meta_any_version\">Çdo version i disponueshëm</string>\n  <string name=\"app_source_dialog_title\">Zgjidh burimin</string>\n  <string name=\"app_source_dialog_option_auto\">Automatike</string>\n  <string name=\"app_source_dialog_option_auto_description\">Përdor aplikacionin e instaluar, pastaj APK-në e shkarkuar, pastaj shkarkuesit e disponueshëm</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Nuk u gjet asnjë aplikacion i përputhshëm ose shkarkues të disponueshëm</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Aplikacionet e montuara nuk mund të riparohen përsëri pa qasje root</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Versioni %s nuk përputhet me versionin e sugjeruar</string>\n  <string name=\"patch_item_description\">Fillo patch-imin e aplikacionit</string>\n  <string name=\"patch_selector_item\">Zgjidh patch-et</string>\n  <string name=\"patch_selector_item_description\">%d patch-e të zgjedhura</string>\n  <string name=\"patch_selection_changed_warning\">Përzgjedhja e arnave është ndryshuar</string>\n  <string name=\"no_patches_selected\">Asnjë patch i zgjedhur</string>\n  <string name=\"network_unavailable_warning\">Pajisja juaj nuk është e lidhur me internetin. Shkarkimi do të dështojë më vonë.</string>\n  <string name=\"network_metered_warning\">Jeni aktualisht në një lidhje të kufizuar. Mund të aplikohen tarifa të të dhënave nga ofruesi juaj i shërbimit.</string>\n  <string name=\"apk_source_selector_item\">Zgjidh burimin APK</string>\n  <string name=\"apk_source_auto\">Automatik</string>\n  <string name=\"apk_source_auto_installed\">Automatik · Përdorimi i APK-së së instaluar</string>\n  <string name=\"apk_source_auto_downloaded\">Automatik · Përdorimi i APK-së së shkarkuar</string>\n  <string name=\"apk_source_auto_downloader\">Automatike · Duke përdorur shkarkuesit e disponueshëm</string>\n  <string name=\"apk_source_auto_storage\">Automatike · Zgjidh nga hapësira ruajtëse</string>\n  <string name=\"apk_source_downloader\">Duke përdorur %s</string>\n  <string name=\"apk_source_installed\">Duke përdorur APK-në e instaluar</string>\n  <string name=\"apk_source_local\">Duke përdorur një skedar lokal APK</string>\n  <string name=\"apk_source_downloaded\">Tashmë i shkarkuar</string>\n  <string name=\"legacy_import_failed\">Nuk mund të importoheshin cilësimet e vjetra</string>\n  <string name=\"auto_updates_dialog_title\">Konfiguro përditësimet</string>\n  <string name=\"auto_updates_dialog_description\">Dëshironi që ReVanced Manager të kontrollojë periodikisht për përditësime për komponentët e mëposhtëm?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Patch-et e ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Shkarkuesit</string>\n  <string name=\"auto_updates_dialog_note\">Këto cilësime mund të ndryshohen më vonë.\n\n    ReVanced Manager do të lidhet me %s për të shkarkuar versionet fillestare nëse pajisja juaj është e lidhur me internetin.</string>\n  <string name=\"announcements_filter_tag\">Filtro sipas etiketës</string>\n  <string name=\"announcements_show_archived\">Shfaq të arkivuarat</string>\n  <string name=\"general\">Të përgjithshme</string>\n  <string name=\"general_description\">Gjuha, tema, ngjyra dinamike</string>\n  <string name=\"updates\">Përditësimet</string>\n  <string name=\"updates_description\">Kontrollo për përditësime dhe shiko historikun e ndryshimeve</string>\n  <string name=\"downloads\">Shkarkimet</string>\n  <string name=\"downloads_description\">Shkarkuesit dhe aplikacionet e shkarkuara</string>\n  <string name=\"import_export\">Importo &amp; eksporto</string>\n  <string name=\"import_export_description\">Keystore, opsionet e patch-it dhe përzgjedhja</string>\n  <string name=\"advanced\">Avancuar</string>\n  <string name=\"advanced_description\">URL e API-së, kufiri i memories, debugimi</string>\n  <string name=\"safeguards_toggled_warning\">Masat mbrojtëse janë ndryshuar</string>\n  <string name=\"about\">Rreth</string>\n  <string name=\"about_app_name\">Rreth %1$s</string>\n  <string name=\"opensource_licenses\">Licencat me burim të hapur</string>\n  <string name=\"opensource_licenses_description\">Shiko të gjitha bibliotekat e përdorura për të bërë këtë aplikacion</string>\n  <string name=\"contributors\">Kontribuesit</string>\n  <string name=\"contributors_description\">Shiko kontribuesit e ReVanced</string>\n  <string name=\"dynamic_color\">Ngjyra dinamike</string>\n  <string name=\"dynamic_color_description\">Përshtat ngjyrat me sfondin</string>\n  <string name=\"pure_black_theme\">Temë e zezë e pastër</string>\n  <string name=\"pure_black_theme_description\">Përdor sfondet e zeza të pastra për temën e errët</string>\n  <string name=\"theme\">Tema</string>\n  <string name=\"theme_description\">Zgjidh midis temës së ndritshme ose të errët</string>\n  <string name=\"language\">Gjuha</string>\n  <string name=\"language_description\">Zgjidh gjuhën e shfaqjes së aplikacionit</string>\n  <string name=\"language_system_default\">Parazgjedhja e sistemit</string>\n  <string name=\"search_languages\">Kërko gjuhë…</string>\n  <string name=\"safeguards\">Masa mbrojtëse</string>\n  <string name=\"patch_compat_check\">Çaktivizo kontrollin e pajtueshmërisë së versionit</string>\n  <string name=\"patch_compat_check_description\">Mos i kufizo patch-et vetëm në versionet e pajtueshme të aplikacionit</string>\n  <string name=\"patch_compat_check_confirmation\">Zgjedhja e patch-eve të papajtueshme mund të rezultojë në një aplikacion të dëmtuar.\\n\\nDëshironi të vazhdoni gjithsesi?</string>\n  <string name=\"suggested_version_safeguard\">Kërko versionin e sugjeruar të aplikacionit</string>\n  <string name=\"suggested_version_safeguard_description\">Forco zgjedhjen e versionit të sugjeruar të aplikacionit</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Zgjedhja e një aplikacioni që nuk është versioni i sugjeruar mund të shkaktojë probleme të papritura.\\n\\nDëshironi të vazhdoni gjithsesi?</string>\n  <string name=\"patch_selection_safeguard\">Lejo ndryshimin e zgjedhjes dhe opsioneve të patch-it</string>\n  <string name=\"patch_selection_safeguard_description\">Mos parandalo zgjedhjen ose ç\\'zgjedhjen e patch-eve dhe personalizimin e opsioneve</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Ndryshimi i zgjedhjes së patch-eve mund të shkaktojë probleme të papritura.\\n\\nAktivizo gjithsesi?</string>\n  <string name=\"universal_patches_safeguard\">Lejo përdorimin e patch-eve universale</string>\n  <string name=\"universal_patches_safeguard_description\">Mos parandalo përdorimin e patch-eve universale</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Patch-et universale nuk janë testuar aq mirë sa ato që synojnë aplikacione specifike.\\n\\nAktivizo gjithsesi?</string>\n  <string name=\"keystore\">Keystore</string>\n  <string name=\"patches_selections\">Zgjedhjet e patch-eve</string>\n  <string name=\"import_keystore\">Importo keystore</string>\n  <string name=\"import_keystore_description\">Importo një keystore të personalizuar</string>\n  <string name=\"import_keystore_dialog_title\">Fut kredencialet e keystore-it</string>\n  <string name=\"import_keystore_dialog_description\">Do t\\'ju duhet të futni kredencialet e keystore-it për ta importuar atë.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Emri i përdoruesit (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Fjalëkalimi</string>\n  <string name=\"import_keystore_dialog_button\">Importo</string>\n  <string name=\"import_keystore_wrong_credentials\">Kredenciale të gabuara të keystore-it</string>\n  <string name=\"import_keystore_success\">Keystore i importuar</string>\n  <string name=\"export_keystore\">Eksporto keystore</string>\n  <string name=\"export_keystore_description\">Eksporto keystore-in aktual</string>\n  <string name=\"export_keystore_unavailable\">Asnjë keystore për të eksportuar</string>\n  <string name=\"export_keystore_success\">Keystore i eksportuar</string>\n  <string name=\"regenerate_keystore\">Rigjenero keystore</string>\n  <string name=\"regenerate_keystore_description\">Gjenero një keystore të ri</string>\n  <string name=\"regenerate_keystore_dialog_description\">Jeni gati të rigjeneroni keystore-in tuaj që menaxheri do të përdorë gjatë procesit të patch-imit.\\n\\nNuk do të jeni në gjendje të përditësoni aplikacionet e instaluara më parë nga ky burim.</string>\n  <string name=\"regenerate_keystore_success\">Keystore-i është zëvendësuar me sukses</string>\n  <string name=\"import_patch_selection\">Importo përzgjedhjen e patch-it</string>\n  <string name=\"import_patch_selection_description\">Importo përzgjedhjen e patch-it nga një skedar JSON</string>\n  <string name=\"import_patch_selection_fail\">Nuk mund të importohej përzgjedhja e patch-it: %s</string>\n  <string name=\"import_patch_selection_success\">Përzgjedhja e patch-it e importuar</string>\n  <string name=\"select_bundle_for_import\">Zgjidh paketën për të importuar</string>\n  <string name=\"export_patch_selection\">Eksporto përzgjedhjen e patch-it</string>\n  <string name=\"export_patch_selection_description\">Eksporto përzgjedhjen e patch-it në një skedar JSON</string>\n  <string name=\"export_patch_selection_fail\">Nuk mund të eksportohej përzgjedhja e patch-it: %s</string>\n  <string name=\"export_patch_selection_success\">Përzgjedhja e patch-it e eksportuar</string>\n  <string name=\"select_bundle_for_export\">Zgjidh paketën për të eksportuar nga</string>\n  <string name=\"patch_selection_packages\">Aplikacione me zgjedhje të ruajtura</string>\n  <string name=\"patch_selection_entries\">Gjithsej patch-e të zgjedhura</string>\n  <string name=\"reset_configuration\">Rivendos konfigurimin</string>\n  <string name=\"reset_patch_selection\">Zgjedhjet e patch-eve</string>\n  <string name=\"reset_patch_selection_description\">Rivendos përzgjedhjen e ruajtur të patch-it</string>\n  <string name=\"reset_patch_options\">Opsionet e patch-eve</string>\n  <string name=\"reset_patch_options_description\">Rivendos opsionet e ruajtura të patch-it</string>\n  <string name=\"reset_patch_selection_success\">Përzgjedhja e patch-it është rivendosur</string>\n  <string name=\"patch_selection_reset_all\">Rivendos përzgjedhjen e patch-it globalisht</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Jeni gati të rivendosni të gjitha përzgjedhjet e patch-eve. Do t\\'ju duhet të zgjidhni çdo patch përsëri manualisht.</string>\n  <string name=\"patch_selection_reset_all_description\">Rivendos të gjitha përzgjedhjet e patch-eve</string>\n  <string name=\"patch_selection_reset_package\">Rivendos përzgjedhjen e patch-it për aplikacionin</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Jeni gati të rivendosni përzgjedhjen e patch-it për aplikacionin \\\"%s\\\". Do t\\'ju duhet të zgjidhni çdo patch përsëri manualisht.</string>\n  <string name=\"patch_selection_reset_package_description\">Rivendos zgjedhjen e arnave për një aplikacion të vetëm</string>\n  <string name=\"patch_selection_reset_patches\">Rivendos zgjedhjen e arnave (i vetëm)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Jeni gati të rivendosni zgjedhjen e arnave për \\\"%s\\\". Do të duhet të zgjidhni manualisht çdo arnë përsëri.</string>\n  <string name=\"patch_selection_reset_patches_description\">Rivendos zgjedhjen e arnave për një koleksion specifik arnash</string>\n  <string name=\"patch_options_reset_package\">Rivendos opsionet e arnave për aplikacionin</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Jeni gati të rivendosni opsionet e arnave për aplikacionin \\\"%s\\\". Do të duhet të riaplikoni çdo opsion përsëri.</string>\n  <string name=\"patch_options_reset_package_description\">Rivendos opsionet e arnave për një aplikacion të vetëm</string>\n  <string name=\"patch_options_reset_patches\">Rivendos opsionet e arnave (i vetëm)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Jeni gati të rivendosni opsionet e arnave për \\\"%s\\\". Do të duhet të riaplikoni çdo opsion përsëri.</string>\n  <string name=\"patch_options_reset_patches_description\">Rivendos opsionet e arnave për një koleksion specifik arnash</string>\n  <string name=\"patch_options_reset_all\">Rivendos opsionet e arnave globalisht</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Jeni gati të rivendosni të gjitha opsionet e arnave. Do të duhet të riaplikoni çdo opsion përsëri.</string>\n  <string name=\"patch_options_reset_all_description\">Rivendos të gjitha opsionet e arnave</string>\n  <string name=\"downloaders\">Shkarkuesit</string>\n  <string name=\"downloader_prereleases\">Përdor parapublikimet</string>\n  <string name=\"downloader_prereleases_description\">Përdor versionet parapublikuese të shkarkuesit kryesor</string>\n  <string name=\"downloader_state_loaded\">Ngarkuar</string>\n  <string name=\"downloader_state_failed\">Dështoi të ngarkohej. Kliko për më shumë detaje</string>\n  <string name=\"downloader_state_missing\">Mungon</string>\n  <string name=\"downloader_delete_apps_title\">Fshini aplikacionet e zgjedhura</string>\n  <string name=\"downloader_delete_apps_description\">Jeni i sigurt që dëshironi të fshini aplikacionet e zgjedhura?</string>\n  <string name=\"downloader_delete_single_description\">Jeni i sigurt që dëshironi të fshini \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Nuk u gjetën aplikacione të shkarkuara.</string>\n  <string name=\"downloader_settings_no_apps_description\">Aplikacionet e shkarkuara përmes ReVanced Manager do të shfaqen këtu.</string>\n  <string name=\"downloader_url\">URL e shkarkuesit</string>\n  <string name=\"downloader_add\">Shto shkarkues</string>\n  <string name=\"select_downloader_type_dialog_description\">Shto shkarkues të rinj nga URL ose nga skedarë lokalë</string>\n  <string name=\"local_downloaders_description\">Shto shkarkues nga ruajtja lokale.</string>\n  <string name=\"remote_downloaders_description\">Shto shkarkues nga URL. Mund të përditësohen automatikisht.</string>\n  <string name=\"install_revanced_downloaders\">Instaloni shkarkues për të marrë aplikacione drejtpërdrejt brenda ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Instalo Shkarkuesit e ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Të anulohet instalimi i shkarkuesve?</string>\n  <string name=\"cancel_downloader_install_description\">Një instalim shkarkuesish është në progres. Nëse largoheni tani, shkarkimi do të anulohet.</string>\n  <string name=\"downloader_sources_unavailable_title\">Këta shkarkues mungojnë</string>\n  <string name=\"downloader_sources_unavailable_description\">Kliko në butonin e përditësimit për ta rregulluar.</string>\n  <string name=\"downloader_update_failed\">Dështoi përditësimi i shkarkuesit: %s</string>\n  <string name=\"downloader_replace_fail\">Dështoi importimi i shkarkuesit: %s</string>\n  <string name=\"search_apps\">Kërkoni aplikacione…</string>\n  <string name=\"loading_body\">Po ngarkohet…</string>\n  <string name=\"downloading_patches\">Po shkarkohen arnat…</string>\n  <string name=\"options\">Opsionet</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Po</string>\n  <string name=\"no\">Jo</string>\n  <string name=\"edit\">Redakto</string>\n  <string name=\"dialog_input_placeholder\">Vlera</string>\n  <string name=\"reset\">Rivendos</string>\n  <string name=\"share\">Ndaj</string>\n  <string name=\"patch\">Arnë</string>\n  <string name=\"select_from_storage\">Zgjidh nga ruajtja</string>\n  <string name=\"select_from_storage_description\">Zgjidhni një skedar APK nga ruajtja duke përdorur zgjedhësin e skedarëve</string>\n  <string name=\"suggested_version_info\">Versioni i sugjeruar: %s</string>\n  <string name=\"type_anything\">Shtypni çdo gjë për të vazhduar</string>\n  <string name=\"search\">Kërkoni arna…</string>\n  <string name=\"apply\">Apliko</string>\n  <string name=\"help\">Ndihmë</string>\n  <string name=\"back\">Kthehu</string>\n  <string name=\"warning\">Paralajmërim</string>\n  <string name=\"add\">Shto</string>\n  <string name=\"enable\">Aktivizo</string>\n  <string name=\"disable\">Çaktivizo</string>\n  <string name=\"close\">Mbyll</string>\n  <string name=\"clear\">Fshi</string>\n  <string name=\"system\">Sistem</string>\n  <string name=\"light\">Dritë</string>\n  <string name=\"dark\">Errët</string>\n  <string name=\"appearance\">Pamja</string>\n  <string name=\"networking\">Rrjetëzimi</string>\n  <string name=\"allow_metered_networks\">Lejo rrjetet me tarifë</string>\n  <string name=\"allow_metered_networks_description\">Lejon përditësime automatike në rrjetet me tarifë.\n    Aplikacioni mund të paralajmërojë ende për rrjetet me tarifë për operacione manuale.</string>\n  <string name=\"downloaded_apps\">Aplikacionet e shkarkuara</string>\n  <string name=\"process_runtime\">Ekzekutoni Patch-in në një proces tjetër (eksperimentale)</string>\n  <string name=\"process_runtime_description\">Kjo është më e shpejtë dhe i lejon Patch-it të përdorë më shumë memorie</string>\n  <string name=\"process_runtime_memory_limit\">Kufiri i memories së procesit të Patch-it</string>\n  <string name=\"process_runtime_memory_limit_description\">Sasia maksimale e memories që mund të përdorë procesi i Patch-erit</string>\n  <string name=\"debug_logs_export\">Eksportoni regjistrat e debug-ut</string>\n  <string name=\"debug_logs_export_read_failed\">Dështoi të lexonte regjistrat (kod daljeje %d)</string>\n  <string name=\"debug_logs_export_failed\">Dështoi të eksportonte regjistrat</string>\n  <string name=\"debug_logs_export_success\">Regjistrat e eksportuar</string>\n  <string name=\"api_url\">URL e API-t</string>\n  <string name=\"api_url_description\">API i përdorur për të shkarkuar skedarët e nevojshëm</string>\n  <string name=\"api_url_dialog_title\">Ndrysho URL-në e API-t</string>\n  <string name=\"api_url_dialog_description\">Ndryshoni URL-në e API-t të ReVanced Manager. ReVanced Manager përdor API-n për të shkarkuar arna dhe përditësime.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager lidhet me API-n për të shkarkuar arna dhe përditësime. Sigurohuni që i besoni.</string>\n  <string name=\"api_url_dialog_save\">Vendos</string>\n  <string name=\"api_url_dialog_reset\">Rivendos URL-në e API-t</string>\n  <string name=\"device\">Pajisje</string>\n  <string name=\"device_android_version\">Versioni i Android-it</string>\n  <string name=\"device_model\">Modeli</string>\n  <string name=\"device_architectures\">Arkitekturat e CPU-së</string>\n  <string name=\"device_memory_limit\">Kufizimet e memories</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normale) - %2$dMB (E madhe)</string>\n  <string name=\"patches_force_download\">Detyro shkarkimin e të gjitha arnave</string>\n  <string name=\"patches_reset\">Rivendos arnat</string>\n  <string name=\"reset_onboarding\">Rivendos mirëseardhjen</string>\n  <string name=\"reset_onboarding_description\">Shfaq ekranin e mirëseardhjes në hapjen tjetër të aplikacionit</string>\n  <string name=\"patching\">Aplikimi i arnave</string>\n  <string name=\"signing\">Nënshkrimi</string>\n  <string name=\"storage\">Ruajtja</string>\n  <string name=\"no_patch_found\">Nuk u gjet asnjë arnë. Kontrolloni arnat tuaja</string>\n  <string name=\"tab_apps\">Aplikacione</string>\n  <string name=\"tab_patches\">Arna</string>\n  <string name=\"delete\">Fshi</string>\n  <string name=\"refresh\">Rifresko</string>\n  <string name=\"continue_anyways\">Vazhdo gjithsesi</string>\n  <string name=\"download_another_version\">Shkarkoni një version tjetër</string>\n  <string name=\"download_app\">Shkarko aplikacionin</string>\n  <string name=\"download_apk\">Shkarko skedarin APK</string>\n  <string name=\"patches_download_fail\">Dështoi të shkarkonte arnat: %s</string>\n  <string name=\"api_not_working_title\">Shërbimi API nuk funksionon aktualisht</string>\n  <string name=\"api_not_working_description\">Disa funksione mund të ndikohen. Kontrolloni lidhjen tuaj ose URL-në e API-t në cilësime.</string>\n  <string name=\"patches_replace_fail\">Dështoi të importonte arnat: %s</string>\n  <string name=\"no_patched_apps_found\">Nuk u gjetën aplikacione të patch-uara</string>\n  <string name=\"no_patched_apps_description\">Aktualisht nuk keni asnjë aplikacion të patch-uar që ne të dimë. Ndryshojeni këtë duke patch-uar aplikacionin tuaj të parë!</string>\n  <string name=\"patched_apps_section_title\">Aplikacione të modifikuara</string>\n  <string name=\"patchable_apps_section_title\">Aplikacione që mund të modifikohen</string>\n  <string name=\"no_patches_found\">Nuk u gjetën patch-e</string>\n  <string name=\"no_patches_description\">Nuk keni ende asnjë patch. Shtoni patch-e duke prekur butonin më poshtë!</string>\n  <string name=\"tap_on_patches\">Prekni arnat për të marrë më shumë informacion rreth tyre</string>\n  <string name=\"patches_selected\">%s të zgjedhura</string>\n  <string name=\"incompatible_patches\">Arna të papajtueshme</string>\n  <string name=\"universal_patches\">Arna universale</string>\n  <string name=\"patch_selection_reset_toast\">Zgjedhja dhe opsionet e arnave janë rivendosur në cilësimet e rekomanduara paraprake</string>\n  <string name=\"patch_options_reset_toast\">Opsionet e arnave janë rivendosur</string>\n  <string name=\"non_suggested_version_warning_title\">Version jo i sugjeruar</string>\n  <string name=\"non_suggested_version_warning_description\">Versioni i aplikacionit që keni zgjedhur nuk përputhet me versionin e sugjeruar.\\nJu lutemi përdorni versionin e sugjeruar: %s\\n\\nPër të vazhduar gjithsesi, çaktivizoni \\\"Kërko versionin e sugjeruar të aplikacionit\\\" në cilësimet e avancuara.</string>\n  <string name=\"selection_warning_title\">Të ndaloni përdorimin e parazgjedhurve?</string>\n  <string name=\"selection_warning_description\">Rekomandohet të përdorni zgjedhjen dhe opsionet e parazgjedhura të arnave. Ndryshimi i tyre mund të rezultojë në probleme të papritura.\\n\\nDuhet të aktivizoni \\\"Lejo ndryshimin e zgjedhjes dhe opsioneve të arnave\\\" në cilësimet e avancuara përpara se të ndryshoni arnat.</string>\n  <string name=\"universal_patch_warning_description\">Arnat universale kanë një përdorim më të përgjithësuar dhe nuk funksionojnë aq me besueshmëri sa arnat që synojnë aplikacione specifike. Mund të hasni probleme gjatë përdorimit të tyre.\\n\\nDuhet të aktivizoni \\\"Lejo përdorimin e arnave universale\\\" në cilësimet e avancuara përpara se të përdorni arna universale.</string>\n  <string name=\"this_version\">Ky version</string>\n  <string name=\"universal\">Çdo aplikacion</string>\n  <string name=\"search_patches\">Kërko arna</string>\n  <string name=\"app_version_not_compatible\">Kjo arnë nuk është e pajtueshme me versionin e zgjedhur të aplikacionit (%1$s)\\n\\nËshtë e pajtueshme vetëm me versionin(et) e mëposhtëm(e): %2$s</string>\n  <string name=\"continue_with_version\">Të vazhdoni me këtë version?</string>\n  <string name=\"version_not_compatible\">Jo të gjitha arnat janë të pajtueshme me këtë version (%s). Dëshironi të vazhdoni gjithsesi?</string>\n  <string name=\"download_application\">Të shkarkohet aplikacioni?</string>\n  <string name=\"app_not_installed\">Aplikacioni që zgjodhët nuk është i instaluar. Dëshironi ta shkarkoni?</string>\n  <string name=\"failed_to_load_apk\">Dështoi të ngarkonte APK</string>\n  <string name=\"split_apk_not_supported\">APK-të e ndara nuk mund të arnohen</string>\n  <string name=\"loading\">Po ngarkohet…</string>\n  <string name=\"not_installed\">Nuk është instaluar</string>\n  <string name=\"installed\">Instaluar</string>\n  <string name=\"app_info\">Informacion mbi aplikacionin</string>\n  <string name=\"uninstall\">Çinstalo</string>\n  <string name=\"unpatch\">Çarno</string>\n  <string name=\"repatch\">Riarno</string>\n  <string name=\"install_type\">Lloji i instalimit</string>\n  <string name=\"package_name\">Emri i paketës</string>\n  <string name=\"original_package_name\">Emri origjinal i paketës</string>\n  <string name=\"applied_patches\">Arnimet e aplikuara</string>\n  <string name=\"view_applied_patches\">Shikoni arnimin e aplikuar</string>\n  <string name=\"default_install\">Parazgjedhur</string>\n  <string name=\"mount_install\">Monto</string>\n  <string name=\"mounted\">Montuar</string>\n  <string name=\"not_mounted\">Jo i montuar</string>\n  <string name=\"mount\">Monto</string>\n  <string name=\"unmount\">Çmonto</string>\n  <string name=\"failed_to_mount\">Dështoi të montohej: %s</string>\n  <string name=\"failed_to_unmount\">Dështoi të çmontohej: %s</string>\n  <string name=\"unpatch_app\">Ç\\'arnimo aplikacionin?</string>\n  <string name=\"unpatch_description\">Jeni i sigurt që dëshironi të ç\\'arnimoni këtë aplikacion?</string>\n  <string name=\"downloader_invalid_version\">Shkarkuesi nuk mori versionin e saktë</string>\n  <string name=\"downloader_app_not_found\">Shkarkuesi nuk e gjeti aplikacionin</string>\n  <string name=\"downloader_error\">Gabim shkarkuesi: %s</string>\n  <string name=\"no_downloaders_installed\">Asnjë shkarkues aplikacionesh nuk është instaluar!</string>\n  <string name=\"no_downloaders_trusted\">Asnjë shkarkues aplikacionesh nuk është besuar! Ju lutemi kontrolloni cilësimet tuaja.</string>\n  <string name=\"already_patched\">Tashmë i arnimuar</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filtro</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Përputhshmëria</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paketa</string>\n  <string name=\"patch_selector_sheet_actions_title\">Veprime</string>\n  <string name=\"restore_default_selection\">Rivendos përzgjedhjen e paracaktuar</string>\n  <string name=\"deselect_all\">Çzgjidh të gjitha</string>\n  <string name=\"invert_selection\">Përzgjedhje e kundërt</string>\n  <string name=\"deselect_all_except\">Ç\\\"zgjidhni të gjitha përveç %s</string>\n  <string name=\"scope_dialog_title\">Apliko te</string>\n  <string name=\"scope_all_patches\">Të gjitha arnat</string>\n  <string name=\"scope_bundle_patches\">Vetëm %s</string>\n  <string name=\"string_option_menu_description\">Më shumë opsione</string>\n  <string name=\"option_preset_custom_value\">Vlerë e personalizuar</string>\n  <string name=\"path_selector\">Zgjidh nga hapësira ruajtëse</string>\n  <string name=\"path_selector_parent_dir\">Direktoria e mëparshme</string>\n  <string name=\"path_selector_dirs\">Direktori</string>\n  <string name=\"path_selector_files\">Skedarë</string>\n  <string name=\"show_password_field\">Shfaq fjalëkalimin</string>\n  <string name=\"hide_password_field\">Fshih fjalëkalimin</string>\n  <string name=\"installer\">Instaluesi</string>\n  <string name=\"install_app\">Instalo</string>\n  <string name=\"install_app_success\">Aplikacioni u instalua</string>\n  <string name=\"install_app_fail\">Dështoi instalimi i aplikacionit: %s</string>\n  <string name=\"reinstall_app_fail\">Dështoi riinstalimi i aplikacionit: %s</string>\n  <string name=\"uninstall_app_fail\">Dështoi çinstalimi i aplikacionit: %s</string>\n  <string name=\"open_app\">Hap</string>\n  <string name=\"save_apk\">Ruaj APK</string>\n  <string name=\"save_apk_success\">APK u ruajt</string>\n  <string name=\"sign_fail\">Dështoi nënshkrimi i APK-së: %s</string>\n  <string name=\"save_logs\">Ruaj regjistrat</string>\n  <string name=\"save_as_file\">Ruaj në skedarë</string>\n  <string name=\"export_patcher_logs\">Eksporto regjistrat e patch-erit</string>\n  <string name=\"save_logs_success\">Regjistrat u ruajtën</string>\n  <string name=\"downloader_activity_dialog_body\">Ndërveprimi i përdoruesit kërkohet për të vazhduar me këtë shkarkues.</string>\n  <string name=\"select_install_type\">Zgjidh llojin e instalimit</string>\n  <string name=\"patcher_step_group_preparing\">Po përgatitet</string>\n  <string name=\"patcher_step_load_patches\">Ngarko arnimimet</string>\n  <string name=\"patcher_step_unpack\">Përgatit patcher-in</string>\n  <string name=\"patcher_step_group_patching\">Po arnimon</string>\n  <string name=\"patcher_step_group_saving\">Po ruhet</string>\n  <string name=\"patcher_step_write_patched\">Shkruaj skedarin APK të arnimuar</string>\n  <string name=\"patcher_step_sign_apk\">Nënshkruaj skedarin APK të arnimuar</string>\n  <string name=\"patcher_notification_title\">Po arnimon…</string>\n  <string name=\"patcher_notification_text\">Prek për t\\'u kthyer te arnimuesi</string>\n  <string name=\"patcher_stop_confirm_title\">Ndalo arnimuesin</string>\n  <string name=\"patcher_stop_confirm_description\">Jeni i sigurt që dëshironi të ndaloni procesin e arnimimit?</string>\n  <string name=\"patcher_install_in_progress\">Instalimi është në progres. Ju lutemi prisni</string>\n  <string name=\"execute_patches\">Ekzekuto arnimimet</string>\n  <string name=\"executing_patch\">Ekzekuto %s</string>\n  <string name=\"failed_to_execute_patch\">Dështoi ekzekutimi i %s</string>\n  <string name=\"step_completed\">i përfunduar</string>\n  <string name=\"step_failed\">dështoi</string>\n  <string name=\"step_running\">në punë</string>\n  <string name=\"step_waiting\">në pritje</string>\n  <string name=\"expand_content\">zgjero</string>\n  <string name=\"collapse_content\">palos</string>\n  <string name=\"drag_handle\">rirendit</string>\n  <string name=\"more\">Më shumë</string>\n  <string name=\"less\">Më pak</string>\n  <string name=\"continue_\">Vazhdo</string>\n  <string name=\"dismiss\">Lësho</string>\n  <string name=\"view_announcement\">Shiko njoftimin</string>\n  <string name=\"permanent_dismiss\">Mos e shfaq më këtë</string>\n  <string name=\"donate\">Dhuro</string>\n  <string name=\"website\">Uebfaqe</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Kontakt</string>\n  <string name=\"license\">Licenca</string>\n  <string name=\"source\">Burim</string>\n  <string name=\"repository\">Depo</string>\n  <string name=\"bundle_information_by_author\">Nga %1$s</string>\n  <string name=\"version\">Versioni</string>\n  <string name=\"version_compatibility_warning\">Versioni i zgjedhur mund të jetë i papajtueshëm me arnimet e zgjedhura</string>\n  <string name=\"submit_feedback\">Dërgo problem ose feedback</string>\n  <string name=\"submit_feedback_description\">Na ndihmoni të përmirësojmë këtë aplikacion</string>\n  <string name=\"developer_options\">Opsione zhvilluesi</string>\n  <string name=\"developer_options_description\">Opsione për ndreqjen e problemeve</string>\n  <string name=\"patches_update_success\">Përditësimi u krye me sukses</string>\n  <string name=\"patches_update_unavailable\">Asnjë përditësim nuk është i disponueshëm</string>\n  <string name=\"view_patches\">Shikoni arnimimet</string>\n  <string name=\"patches_view_any_version\">Çdo version</string>\n  <string name=\"patches_view_any_package\">Çdo paketë</string>\n  <string name=\"patches_delete_single_dialog_description\">Jeni i sigurt që dëshironi të fshini \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Jeni i sigurt që dëshironi të fshini arnimimet e zgjedhura?</string>\n  <string name=\"announcements\">Njoftime</string>\n  <string name=\"archive\">Arkivo</string>\n  <string name=\"about_revanced_manager\">Rreth ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager është një aplikacion Android që përdor ReVanced Patcher për të arnimuar aplikacionet Android. Ai ju lejon të shkarkoni dhe arnimoni aplikacione me arnimime të personalizuara, dhe të menaxhoni procesin e arnimimit.</string>\n  <string name=\"developer_options_taps\">%d prekje të mbetura</string>\n  <string name=\"developer_options_enabled\">Opsionet e zhvilluesit u aktivizuan</string>\n  <string name=\"developer_options_already_enabled\">Opsionet e zhvilluesit janë tashmë të aktivizuara</string>\n  <string name=\"update_available\">Një përditësim është i disponueshëm</string>\n  <string name=\"current_version\">Versioni aktual: %s</string>\n  <string name=\"new_version\">Versioni i ri: %s</string>\n  <string name=\"ready_to_install_update\">Gati për të instaluar përditësimin</string>\n  <string name=\"update_completed\">Përditësimi u instalua</string>\n  <string name=\"install_update_manager_failed\">Dështoi instalimi i përditësimit</string>\n  <string name=\"manual_update_check\">Kontrollo për përditësime</string>\n  <string name=\"view_update\">Shiko përditësimin</string>\n  <string name=\"manual_update_check_description\">Kontrollo manualisht për përditësime</string>\n  <string name=\"update_checking_manager\">Kontrollo për përditësime në nisje</string>\n  <string name=\"update_checking_manager_description\">Kontrollo për versione të reja të ReVanced Manager kur aplikacioni fillon</string>\n  <string name=\"update_checking_downloader\">Kontrollo për përditësime të Shkarkuesve të ReVanced në hapje</string>\n  <string name=\"update_checking_downloader_description\">Kontrollo për përditësime të Shkarkuesve të ReVanced të instaluar kur aplikacioni fillon</string>\n  <string name=\"manager_prereleases\">Përdor versione para-lëshimi</string>\n  <string name=\"manager_prereleases_description\">Përdor versione para-lëshimi të ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Versionet para-lëshimit mund të jenë të paqëndrueshme dhe të përmbajnë gabime. Mund të përjetoni dështime, humbje të dhënash ose probleme të tjera të papritura. Aktivizojeni këtë vetëm nëse jeni të qetë me këto rreziqe.</string>\n  <string name=\"changelog\">Shiko historikun e ndryshimeve</string>\n  <string name=\"changelog_loading\">Po ngarkohen ndryshimet</string>\n  <string name=\"changelog_download_fail\">Dështoi shkarkimi i ndryshimeve: %s</string>\n  <string name=\"changelog_description\">Shikoni ndryshimet e fundit në këtë përditësim</string>\n  <string name=\"battery_optimization_notification\">Optimizimet e baterisë duhet të çaktivizohen në mënyrë që ReVanced Manager të funksionojë siç duhet në sfond. Klikoni këtu për të çaktivizuar optimizimet.</string>\n  <string name=\"installing_manager_update\">Po instalohet përditësimi…</string>\n  <string name=\"downloading_manager_update\">Po shkarkohet përditësimi…</string>\n  <string name=\"download_manager_failed\">Dështoi shkarkimi i përditësimit: %s</string>\n  <string name=\"cancel\">Anulo</string>\n  <string name=\"save\">Ruaj</string>\n  <string name=\"save_with_count\">Ruaj (%1$s)</string>\n  <string name=\"update\">Përditëso</string>\n  <string name=\"empty\">Bosh</string>\n  <string name=\"installing_message\">Prekni <b>Përditëso</b> kur të kërkohet.\\nReVanced Manager do të mbyllet gjatë përditësimit.</string>\n  <string name=\"no_changelogs_found\">Asnjë ndryshim nuk u gjet</string>\n  <string name=\"just_now\">Tani</string>\n  <string name=\"minutes_ago\">%s min më parë</string>\n  <string name=\"hours_ago\">%s orë më parë</string>\n  <string name=\"days_ago\">%s ditë më parë</string>\n  <string name=\"invalid_date\">Datë e pavlefshme</string>\n  <string name=\"disable_battery_optimization\">Çaktivizo optimizimin e baterisë</string>\n  <string name=\"input_dialog_value_invalid\">Vlerë e pavlefshme</string>\n  <string name=\"option_required\">Ky opsion është i detyrueshëm</string>\n  <string name=\"required_options_screen\">Opsione të detyrueshme</string>\n  <string name=\"failed_to_check_updates\">Dështoi kontrolli për përditësime: %s</string>\n  <string name=\"no_update_available\">Asnjë përditësim nuk është i disponueshëm</string>\n  <string name=\"no_announcements_found\">Nuk u gjetën njoftime</string>\n  <string name=\"update_check\">Po kontrollohet për përditësime…</string>\n  <string name=\"dismiss_temporary\">Jo tani</string>\n  <string name=\"update_available_dialog_description\">Një version i ri i ReVanced Manager (%s) është i disponueshëm.</string>\n  <string name=\"failed_to_download_update\">Dështoi shkarkimi i përditësimit: %s</string>\n  <string name=\"download\">Shkarko</string>\n  <string name=\"download_confirmation_metered\">Jeni aktualisht në një lidhje të kufizuar, dhe mund të aplikohen tarifa të të dhënave nga ofruesi juaj i shërbimit.\\n\\nDëshironi të vazhdoni?</string>\n  <string name=\"download_update_confirmation\">Shkarko përditësimin?</string>\n  <string name=\"no_contributors_found\">Asnjë kontribues nuk u gjet</string>\n  <string name=\"select\">Zgjidh</string>\n  <string name=\"select_deselect_all\">Zgjidh ose çzgjidh të gjitha</string>\n  <string name=\"select_patches_type_dialog_description\">Shto arnimime të reja nga URL ose skedarë lokalë</string>\n  <string name=\"local_patches_description\">Shto arnimime nga hapësira ruajtëse lokale.</string>\n  <string name=\"remote_patches_description\">Shto arnimime nga URL. Arnimet mund të përditësohen automatikisht.</string>\n  <string name=\"recommended\">Rekomanduar</string>\n  <string name=\"installation_failed_dialog_title\">Instalimi dështoi</string>\n  <string name=\"installation_cancelled_dialog_title\">Instalimi u anulua</string>\n  <string name=\"installation_blocked_dialog_title\">Instalimi u bllokua</string>\n  <string name=\"installation_conflict_dialog_title\">Konflikt instalimi</string>\n  <string name=\"installation_incompatible_dialog_title\">Instalimi i papërputhshëm</string>\n  <string name=\"installation_invalid_dialog_title\">Instalimi i pavlefshëm</string>\n  <string name=\"installation_storage_issue_dialog_title\">Nuk ka hapësirë të mjaftueshme</string>\n  <string name=\"installation_timeout_dialog_title\">Instalimi skadoi</string>\n  <string name=\"installation_failed_description\">Instalimi dështoi për një arsye të panjohur. Të provohet përsëri?</string>\n  <string name=\"installation_aborted_description\">Instalimi u anulua manualisht. Të provohet përsëri?</string>\n  <string name=\"installation_blocked_description\">Instalimi u bllokua. Rishikoni cilësimet e sigurisë së pajisjes tuaj dhe provoni përsëri.</string>\n  <string name=\"installation_conflict_description\">Instalimi u pengua nga një instalim ekzistues i aplikacionit. Çinstaloni aplikacionin e instaluar dhe provoni përsëri?</string>\n  <string name=\"installation_incompatible_description\">Aplikacioni është i papërputhshëm me këtë pajisje. Përdorni një APK që është i pajtueshëm me këtë pajisje dhe provoni përsëri.</string>\n  <string name=\"installation_invalid_description\">Aplikacioni është i pavlefshëm. Çinstaloni aplikacionin dhe provoni përsëri?</string>\n  <string name=\"installation_storage_issue_description\">Aplikacioni nuk mund të instalohej për shkak të hapësirës së pamjaftueshme. Lironi pak hapësirë dhe provoni përsëri.</string>\n  <string name=\"installation_timeout_description\">Instalimi zgjati shumë. Të provohet përsëri?</string>\n  <string name=\"reinstall\">Riinstalo</string>\n  <string name=\"show\">Shfaq</string>\n  <string name=\"debugging\">Debugging</string>\n  <string name=\"about_device\">Rreth pajisjes</string>\n  <string name=\"enter_url\">Fut URL</string>\n  <string name=\"next\">Tjetra</string>\n  <string name=\"auto_update\">Përditësim automatik</string>\n  <string name=\"add_patches\">Shto arnimime</string>\n  <string name=\"auto_update_description\">Përditëso automatikisht kur një version i ri është i disponueshëm</string>\n  <string name=\"patches_prereleases\">Përdor versione para-lëshimi</string>\n  <string name=\"patches_prereleases_description\">Përdor versione para-lëshimi të %s</string>\n  <string name=\"patches_url\">URL e arnimimeve</string>\n  <string name=\"incompatible_patches_dialog\">Këto arnimime nuk janë të pajtueshme me versionin e zgjedhur të aplikacionit (%1$s).\\n\\nKlikoni mbi arnimimet për të parë më shumë detaje.</string>\n  <string name=\"incompatible_patch\">Arnim i papërputhshëm</string>\n  <string name=\"any_version\">Çdo</string>\n  <string name=\"never_show_again\">Mos e shfaq kurrë më</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Shfaq mesazhin e përditësimit në nisje</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Shfaq një njoftim popup sa herë që një përditësim i ri është i disponueshëm në nisje</string>\n  <string name=\"failed_to_import_keystore\">Dështoi importimi i dyqanit të çelësave</string>\n  <string name=\"export\">Eksporto</string>\n  <string name=\"confirm\">Konfirmo</string>\n  <string name=\"new_announcement\">Njoftim i ri:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d arnim</item>\n    <item quantity=\"other\">%d aranime</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Ekzekuto %d arnim</item>\n    <item quantity=\"other\">Ekzekuto %d aranime</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d i zgjedhur</item>\n    <item quantity=\"other\">%d të zgjedhur</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sr-rCS/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Zakrpljivač</string>\n  <string name=\"patches\">Zakrpe</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Menadžer</string>\n  <string name=\"onboarding_welcome_to\">Dobrodošli u</string>\n  <string name=\"onboarding_welcome_back\">Zdravo! Ovo je novi</string>\n  <string name=\"onboarding_apps_subtitle\">Možete izabrati aplikaciju za patchovanje sada ili to uraditi kasnije</string>\n  <string name=\"onboarding_updates_subtitle\">Konfigurišite automatska ažuriranja kako biste ReVanced Manager i patcheve održavali ažurnim</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager će se povezati na %s kako bi preuzeo početne verzije ako je vaš uređaj povezan na internet.</string>\n  <string name=\"retry\">Ponovni pokušaj</string>\n  <string name=\"onboarding_skip\">Preskoči za sada</string>\n  <string name=\"onboarding_recommended_version\">Preporučena verzija: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Preskočiti dozvole?</string>\n  <string name=\"onboarding_permissions_skip_description\">Bez potrebnih dozvola, neke funkcije možda neće raditi ispravno. Možete ih dodeliti kasnije u podešavanjima aplikacije.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Ipak preskoči</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager-u je potrebno nekoliko dozvola za pravilan rad</string>\n  <string name=\"permission_install_apps\">Instaliraj nepoznate aplikacije</string>\n  <string name=\"permission_install_apps_description\">Potrebno za instalaciju patchovanih aplikacija</string>\n  <string name=\"permission_notifications\">Obaveštenja</string>\n  <string name=\"permission_battery\">Optimizacija baterije</string>\n  <string name=\"permission_battery_description\">Sprečava prekid patchovanja u pozadini</string>\n  <string name=\"permission_grant\">Dozvoli</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager host preuzimača</string>\n  <string name=\"downloader_host_permission_description\">Koristi se za kontrolu pristupa ReVanced Manager programima za preuzimanje. Samo ReVanced Manager ovo ima.</string>\n  <string name=\"toast_copied_to_clipboard\">Kopirano!</string>\n  <string name=\"copy_to_clipboard\">Kopiraj u privremenu memoriju</string>\n  <string name=\"dashboard\">Kontrolna tabla</string>\n  <string name=\"settings\">Podešavanja</string>\n  <string name=\"select_app\">Izaberite aplikaciju</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d izabrano</string>\n  <string name=\"fab_patch_app\">Patchuj aplikaciju</string>\n  <string name=\"fab_add_patches\">Dodaj patcheve</string>\n  <string name=\"new_downloader_notification\">Dostupan/ni novi preuzimač(i). Kliknite ovde da ih konfigurišete.</string>\n  <string name=\"unsupported_architecture_warning\">Zakrpljivanje na ovoj arhitekturi uređaja nije podržano i najverovatnije će propasti.</string>\n  <string name=\"import_\">Uvezi</string>\n  <string name=\"import_patches\">Uvezi zakrpe</string>\n  <string name=\"file_field_set\">Izabrano</string>\n  <string name=\"file_field_not_set\">Nije izabrano</string>\n  <string name=\"field_not_set\">Nije podešeno</string>\n  <string name=\"patches_missing\">Nedostaje</string>\n  <string name=\"patches_error\">Greška</string>\n  <string name=\"patches_error_description\">Zakrpe se nisu mogle učitati. Kliknite da vidite grešku</string>\n  <string name=\"patches_not_downloaded\">Zakrpe nisu preuzete.</string>\n  <string name=\"patches_name_default\">Zakrpe</string>\n  <string name=\"patches_name_fallback\">Neimenovano</string>\n  <string name=\"android_11_bug_dialog_title\">Greška Androida 11</string>\n  <string name=\"android_11_bug_dialog_description\">Dozvola za instalaciju aplikacije mora biti data unapred kako bi se izbegla greška u sistemu Android 11 koja će negativno uticati na korisničko iskustvo.</string>\n  <string name=\"no_network_toast\">Nema dostupne internet veze</string>\n  <string name=\"selected_app_meta_any_version\">Bilo koja dostupna verzija</string>\n  <string name=\"app_source_dialog_title\">Izaberite izvor</string>\n  <string name=\"app_source_dialog_option_auto\">Automatski</string>\n  <string name=\"app_source_dialog_option_auto_description\">Koristi instaliranu aplikaciju, zatim preuzeti APK, zatim dostupne preuzimače</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Nema dostupnih kompatibilnih aplikacija ili programa za preuzimanje</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Montirane aplikacije se ne mogu ponovo zakrpiti bez root pristupa</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Verzija %s se ne poklapa sa predloženom verzijom</string>\n  <string name=\"patch_item_description\">Započnite zakrpljivanje aplikacije</string>\n  <string name=\"patch_selector_item\">Odaberite patcheve</string>\n  <string name=\"patch_selector_item_description\">%d patcheva odabrano</string>\n  <string name=\"patch_selection_changed_warning\">Izbor zakrpa je promenjen</string>\n  <string name=\"no_patches_selected\">Nema izabranih zakrpa</string>\n  <string name=\"network_unavailable_warning\">Vaš uređaj nije povezan na internet. Preuzimanje će kasnije propasti.</string>\n  <string name=\"network_metered_warning\">Trenutno ste na merenoj vezi. Mogu se primeniti troškovi prenosa podataka vašeg provajdera usluga.</string>\n  <string name=\"apk_source_selector_item\">Odaberite APK izvor</string>\n  <string name=\"apk_source_auto\">Automatski</string>\n  <string name=\"apk_source_auto_installed\">Automatski · Korišćenje instaliranog APK-a</string>\n  <string name=\"apk_source_auto_downloaded\">Automatski · Korišćenje preuzetog APK-a</string>\n  <string name=\"apk_source_auto_downloader\">Automatski · Korišćenje dostupnih preuzimača</string>\n  <string name=\"apk_source_auto_storage\">Automatski · Izbor iz skladišta</string>\n  <string name=\"apk_source_downloader\">Koristi %s</string>\n  <string name=\"apk_source_installed\">Koristi instalirani APK</string>\n  <string name=\"apk_source_local\">Koristi lokalnu APK datoteku</string>\n  <string name=\"apk_source_downloaded\">Već preuzeto</string>\n  <string name=\"legacy_import_failed\">Nije moguće uvesti nasleđena podešavanja</string>\n  <string name=\"auto_updates_dialog_title\">Konfiguriši ažuriranja</string>\n  <string name=\"auto_updates_dialog_description\">Želite li da ReVanced Manager povremeno proverava ažuriranja za sledeće komponente?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Patchevi</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Preuzimači</string>\n  <string name=\"auto_updates_dialog_note\">Ova podešavanja se mogu kasnije promeniti.\n\n    ReVanced Manager će se povezati na %s kako bi preuzeo početne verzije ako je vaš uređaj povezan na internet.</string>\n  <string name=\"announcements_filter_tag\">Filtriraj po oznaci</string>\n  <string name=\"announcements_show_archived\">Prikaži arhivirano</string>\n  <string name=\"general\">Opšte</string>\n  <string name=\"general_description\">Jezik, tema, dinamična boja</string>\n  <string name=\"updates\">Ažuriranja</string>\n  <string name=\"updates_description\">Proveri ažuriranja i pogledaj dnevnik promena</string>\n  <string name=\"downloads\">Preuzimanja</string>\n  <string name=\"downloads_description\">Programi za preuzimanje i preuzete aplikacije</string>\n  <string name=\"import_export\">Uvoz &amp; izvoz</string>\n  <string name=\"import_export_description\">Keystore, opcije zakrpa i izbor</string>\n  <string name=\"advanced\">Napredno</string>\n  <string name=\"advanced_description\">API URL, ograničenje memorije, otklanjanje grešaka</string>\n  <string name=\"safeguards_toggled_warning\">Zaštite su prebačene</string>\n  <string name=\"about\">O programu</string>\n  <string name=\"about_app_name\">O %1$s</string>\n  <string name=\"opensource_licenses\">Licence otvorenog koda</string>\n  <string name=\"opensource_licenses_description\">Pogledajte sve biblioteke korišćene za izradu ove aplikacije</string>\n  <string name=\"contributors\">Saradnici</string>\n  <string name=\"contributors_description\">Pogledajte saradnike ReVanced-a</string>\n  <string name=\"dynamic_color\">Dinamična boja</string>\n  <string name=\"dynamic_color_description\">Prilagodite boje pozadini</string>\n  <string name=\"pure_black_theme\">Čista crna tema</string>\n  <string name=\"pure_black_theme_description\">Koristite čisto crne pozadine za tamnu temu</string>\n  <string name=\"theme\">Tema</string>\n  <string name=\"theme_description\">Izaberite između svetle ili tamne teme</string>\n  <string name=\"language\">Jezik</string>\n  <string name=\"language_description\">Izaberite jezik prikaza aplikacije</string>\n  <string name=\"language_system_default\">Podrazumevano sistemsko</string>\n  <string name=\"search_languages\">Pretraži jezike…</string>\n  <string name=\"safeguards\">Zaštite</string>\n  <string name=\"patch_compat_check\">Onemogućite proveru kompatibilnosti verzije</string>\n  <string name=\"patch_compat_check_description\">Ne ograničavajte zakrpe na kompatibilne verzije aplikacija</string>\n  <string name=\"patch_compat_check_confirmation\">Izbor nekompatibilnih zakrpa može rezultirati neispravnom aplikacijom.\\n\\nDa li ipak želite da nastavite?</string>\n  <string name=\"suggested_version_safeguard\">Zahtevaj predloženu verziju aplikacije</string>\n  <string name=\"suggested_version_safeguard_description\">Primeni izbor predložene verzije aplikacije</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Odabir aplikacije koja nije predložena verzija može izazvati neočekivane probleme.\\n\\nDa li ipak želite da nastavite?</string>\n  <string name=\"patch_selection_safeguard\">Dozvoli promenu izbora i opcija zakrpa</string>\n  <string name=\"patch_selection_safeguard_description\">Ne sprečavajte odabir ili poništavanje odabira zakrpa i prilagođavanje opcija</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Promena izbora zakrpa može izazvati neočekivane probleme.\\n\\nIpak omogućiti?</string>\n  <string name=\"universal_patches_safeguard\">Dozvoli korišćenje univerzalnih zakrpa</string>\n  <string name=\"universal_patches_safeguard_description\">Ne sprečavajte korišćenje univerzalnih zakrpa</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Univerzalne zakrpe nisu tako dobro testirane kao one koje ciljaju specifične aplikacije.\\n\\nIpak omogućiti?</string>\n  <string name=\"keystore\">Keystore</string>\n  <string name=\"patches_selections\">Odabir patcheva</string>\n  <string name=\"import_keystore\">Uvezi keystore</string>\n  <string name=\"import_keystore_description\">Uvezi prilagođeni keystore</string>\n  <string name=\"import_keystore_dialog_title\">Unesite akreditive keystore-a</string>\n  <string name=\"import_keystore_dialog_description\">Moraćete da unesete akreditive keystore-a da biste ga uvezli.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Korisničko ime (Alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Lozinka</string>\n  <string name=\"import_keystore_dialog_button\">Uvezi</string>\n  <string name=\"import_keystore_wrong_credentials\">Pogrešni akreditivi keystore-a</string>\n  <string name=\"import_keystore_success\">Uvezen keystore</string>\n  <string name=\"export_keystore\">Izvezi keystore</string>\n  <string name=\"export_keystore_description\">Izvezi trenutni keystore</string>\n  <string name=\"export_keystore_unavailable\">Nema keystore-a za izvoz</string>\n  <string name=\"export_keystore_success\">Izvezen keystore</string>\n  <string name=\"regenerate_keystore\">Regeneriši keystore</string>\n  <string name=\"regenerate_keystore_description\">Generiši novi keystore</string>\n  <string name=\"regenerate_keystore_dialog_description\">Spremate se da regenerišete svoj keystore koji će menadžer koristiti tokom procesa zakrpljivanja.\\n\\nNećete moći da ažurirate prethodno instalirane aplikacije iz ovog izvora.</string>\n  <string name=\"regenerate_keystore_success\">Keystore je uspešno zamenjen</string>\n  <string name=\"import_patch_selection\">Uvezi izbor zakrpa</string>\n  <string name=\"import_patch_selection_description\">Uvezi izbor zakrpa iz JSON datoteke</string>\n  <string name=\"import_patch_selection_fail\">Nije moguće uvesti izbor zakrpa: %s</string>\n  <string name=\"import_patch_selection_success\">Uvezen izbor zakrpa</string>\n  <string name=\"select_bundle_for_import\">Odaberite bundle za uvoz</string>\n  <string name=\"export_patch_selection\">Izvezi izbor zakrpa</string>\n  <string name=\"export_patch_selection_description\">Izvezi izbor zakrpa u JSON datoteku</string>\n  <string name=\"export_patch_selection_fail\">Nije moguće izvesti izbor zakrpa: %s</string>\n  <string name=\"export_patch_selection_success\">Izvezen izbor zakrpa</string>\n  <string name=\"select_bundle_for_export\">Odaberite bundle za izvoz</string>\n  <string name=\"patch_selection_packages\">Aplikacije sa sačuvanim odabirima</string>\n  <string name=\"patch_selection_entries\">Ukupno odabranih patcheva</string>\n  <string name=\"reset_configuration\">Resetuj konfiguraciju</string>\n  <string name=\"reset_patch_selection\">Odabiri patcheva</string>\n  <string name=\"reset_patch_selection_description\">Resetuj sačuvani izbor zakrpa</string>\n  <string name=\"reset_patch_options\">Opcije patcheva</string>\n  <string name=\"reset_patch_options_description\">Resetuj sačuvane opcije zakrpa</string>\n  <string name=\"reset_patch_selection_success\">Izbor zakrpa je resetovan</string>\n  <string name=\"patch_selection_reset_all\">Globalno resetuj izbor zakrpa</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Spremate se da resetujete sve izbore zakrpa. Moraćete ponovo ručno da izaberete svaku zakrpu.</string>\n  <string name=\"patch_selection_reset_all_description\">Resetuje sve izbore zakrpa</string>\n  <string name=\"patch_selection_reset_package\">Resetuj izbor zakrpa za aplikaciju</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Spremate se da resetujete izbor zakrpa za aplikaciju \\\"%s\\\". Moraćete ponovo ručno da izaberete svaku zakrpu.</string>\n  <string name=\"patch_selection_reset_package_description\">Resetuje izbor zakrpa za jednu aplikaciju</string>\n  <string name=\"patch_selection_reset_patches\">Resetuj izbor zakrpa (jednostruko)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Spremate se da resetujete izbor zakrpa za \\\"%s\\\". Moraćete ručno ponovo da izaberete svaku zakrpu.</string>\n  <string name=\"patch_selection_reset_patches_description\">Resetuje izbor zakrpa za određenu kolekciju zakrpa</string>\n  <string name=\"patch_options_reset_package\">Resetuj opcije zakrpa za aplikaciju</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Spremate se da resetujete opcije zakrpa za aplikaciju \\\"%s\\\". Moraćete ponovo da primenite svaku opciju.</string>\n  <string name=\"patch_options_reset_package_description\">Resetuje opcije zakrpa za jednu aplikaciju</string>\n  <string name=\"patch_options_reset_patches\">Resetuj opcije zakrpa (jednostruko)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Spremate se da resetujete opcije zakrpa za \\\"%s\\\". Moraćete ponovo da primenite svaku opciju.</string>\n  <string name=\"patch_options_reset_patches_description\">Resetuje opcije zakrpa za određenu kolekciju zakrpa</string>\n  <string name=\"patch_options_reset_all\">Resetuj opcije zakrpa globalno</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Spremate se da resetujete sve opcije zakrpa. Moraćete ponovo da primenite svaku opciju.</string>\n  <string name=\"patch_options_reset_all_description\">Resetuje sve opcije zakrpa</string>\n  <string name=\"downloaders\">Programi za preuzimanje</string>\n  <string name=\"downloader_prereleases\">Koristi pre-izdanja</string>\n  <string name=\"downloader_prereleases_description\">Koristi pre-izdane verzije glavnog preuzimača</string>\n  <string name=\"downloader_state_loaded\">Učitano</string>\n  <string name=\"downloader_state_failed\">Učitavanje nije uspelo. Kliknite za više detalja</string>\n  <string name=\"downloader_state_missing\">Nedostaje</string>\n  <string name=\"downloader_delete_apps_title\">Izbrišite izabrane aplikacije</string>\n  <string name=\"downloader_delete_apps_description\">Želite li zaista da izbrišete izabrane aplikacije?</string>\n  <string name=\"downloader_delete_single_description\">Da li ste sigurni da želite da obrišete \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Nisu pronađene preuzete aplikacije.</string>\n  <string name=\"downloader_settings_no_apps_description\">Aplikacije preuzete preko ReVanced Manager-a će se pojaviti ovde.</string>\n  <string name=\"downloader_url\">URL preuzimača</string>\n  <string name=\"downloader_add\">Dodaj preuzimač</string>\n  <string name=\"select_downloader_type_dialog_description\">Dodajte nove preuzimače sa URL-a ili lokalnih datoteka</string>\n  <string name=\"local_downloaders_description\">Dodajte preuzimače iz lokalnog skladišta.</string>\n  <string name=\"remote_downloaders_description\">Dodajte preuzimače sa URL-a. Mogu se automatski ažurirati.</string>\n  <string name=\"install_revanced_downloaders\">Instalirajte preuzimače da biste dobili aplikacije direktno unutar ReVanced Manager-a.</string>\n  <string name=\"install_revanced_downloader\">Instalirajte ReVanced Preuzimače</string>\n  <string name=\"cancel_downloader_install_title\">Otkazati instalaciju preuzimača?</string>\n  <string name=\"cancel_downloader_install_description\">Instalacija preuzimača je u toku. Ako sada napustite, preuzimanje će biti otkazano.</string>\n  <string name=\"downloader_sources_unavailable_title\">Ovi preuzimači nedostaju</string>\n  <string name=\"downloader_sources_unavailable_description\">Kliknite na dugme za ažuriranje da biste to popravili.</string>\n  <string name=\"downloader_update_failed\">Neuspelo ažuriranje preuzimača: %s</string>\n  <string name=\"downloader_replace_fail\">Neuspelo uvoženje preuzimača: %s</string>\n  <string name=\"search_apps\">Pretraži aplikacije…</string>\n  <string name=\"loading_body\">Učitavanje…</string>\n  <string name=\"downloading_patches\">Preuzimanje zakrpa…</string>\n  <string name=\"options\">Opcije</string>\n  <string name=\"ok\">U redu</string>\n  <string name=\"yes\">Da</string>\n  <string name=\"no\">Ne</string>\n  <string name=\"edit\">Uredi</string>\n  <string name=\"dialog_input_placeholder\">Vrednost</string>\n  <string name=\"reset\">Resetuj</string>\n  <string name=\"share\">Podeli</string>\n  <string name=\"patch\">Zakrpa</string>\n  <string name=\"select_from_storage\">Izaberite iz skladišta</string>\n  <string name=\"select_from_storage_description\">Odaberite APK datoteku iz skladišta pomoću birača datoteka</string>\n  <string name=\"suggested_version_info\">Predložena verzija: %s</string>\n  <string name=\"type_anything\">Upišite bilo šta za nastavak</string>\n  <string name=\"search\">Pretraži zakrpe…</string>\n  <string name=\"apply\">Primeni</string>\n  <string name=\"help\">Pomoć</string>\n  <string name=\"back\">Nazad</string>\n  <string name=\"warning\">Upozorenje</string>\n  <string name=\"add\">Dodaj</string>\n  <string name=\"enable\">Omogući</string>\n  <string name=\"disable\">Onemogući</string>\n  <string name=\"close\">Zatvori</string>\n  <string name=\"clear\">Obriši</string>\n  <string name=\"system\">Sistem</string>\n  <string name=\"light\">Svetlo</string>\n  <string name=\"dark\">Tamno</string>\n  <string name=\"appearance\">Izgled</string>\n  <string name=\"networking\">Umrežavanje</string>\n  <string name=\"allow_metered_networks\">Dozvoli merene mreže</string>\n  <string name=\"allow_metered_networks_description\">Dozvoljava automatska ažuriranja na merenim mrežama.\\n    Aplikacija i dalje može da upozorava na merene mreže za ručne operacije.</string>\n  <string name=\"downloaded_apps\">Preuzete aplikacije</string>\n  <string name=\"process_runtime\">Pokreni Patcher u drugom procesu (eksperimentalno)</string>\n  <string name=\"process_runtime_description\">Ovo je brže i omogućava Patcheru da koristi više memorije</string>\n  <string name=\"process_runtime_memory_limit\">Ograničenje memorije Patcher procesa</string>\n  <string name=\"process_runtime_memory_limit_description\">Maksimalna količina memorije koju proces Patcher može koristiti</string>\n  <string name=\"debug_logs_export\">Izvezi evidencije za otklanjanje grešaka</string>\n  <string name=\"debug_logs_export_read_failed\">Nije uspelo čitanje evidencija (izlazni kod %d)</string>\n  <string name=\"debug_logs_export_failed\">Neuspešan izvoz evidencija</string>\n  <string name=\"debug_logs_export_success\">Izvezene evidencije</string>\n  <string name=\"api_url\">API URL</string>\n  <string name=\"api_url_description\">API se koristi za preuzimanje potrebnih fajlova</string>\n  <string name=\"api_url_dialog_title\">Promeni API URL</string>\n  <string name=\"api_url_dialog_description\">Promenite API URL za ReVanced Manager. ReVanced Manager koristi API za preuzimanje zakrpa i ažuriranja.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager se povezuje sa API-jem za preuzimanje zakrpa i ažuriranja. Uverite se da mu verujete.</string>\n  <string name=\"api_url_dialog_save\">Postavi</string>\n  <string name=\"api_url_dialog_reset\">Resetuj API URL</string>\n  <string name=\"device\">Uređaj</string>\n  <string name=\"device_android_version\">Android verzija</string>\n  <string name=\"device_model\">Model</string>\n  <string name=\"device_architectures\">CPU arhitekture</string>\n  <string name=\"device_memory_limit\">Ograničenja memorije</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normalno) - %2$dMB (Veliko)</string>\n  <string name=\"patches_force_download\">Forsiraj preuzimanje svih zakrpa</string>\n  <string name=\"patches_reset\">Resetuj zakrpe</string>\n  <string name=\"reset_onboarding\">Resetuj uvod</string>\n  <string name=\"reset_onboarding_description\">Prikaži uvodni ekran pri sledećem pokretanju aplikacije</string>\n  <string name=\"patching\">Zakrpljivanje</string>\n  <string name=\"signing\">Potpisivanje</string>\n  <string name=\"storage\">Skladište</string>\n  <string name=\"no_patch_found\">Nijedna zakrpa nije pronađena. Proverite vaše zakrpe</string>\n  <string name=\"tab_apps\">Aplikacije</string>\n  <string name=\"tab_patches\">Zakrpe</string>\n  <string name=\"delete\">Obriši</string>\n  <string name=\"refresh\">Osveži</string>\n  <string name=\"continue_anyways\">Nastavi svakako</string>\n  <string name=\"download_another_version\">Preuzmi drugu verziju</string>\n  <string name=\"download_app\">Preuzmi aplikaciju</string>\n  <string name=\"download_apk\">Preuzmi APK fajl</string>\n  <string name=\"patches_download_fail\">Nije uspelo preuzimanje zakrpa: %s</string>\n  <string name=\"api_not_working_title\">API servis je trenutno nedostupan</string>\n  <string name=\"api_not_working_description\">Neke funkcije mogu biti pogođene. Proverite svoju vezu ili API URL u podešavanjima.</string>\n  <string name=\"patches_replace_fail\">Nije uspelo uvoženje zakrpa: %s</string>\n  <string name=\"no_patched_apps_found\">Nema pronađenih patchovanih aplikacija</string>\n  <string name=\"no_patched_apps_description\">Trenutno nemate patchovanih aplikacija za koje znamo. Promenite to patchovanjem vaše prve aplikacije!</string>\n  <string name=\"patched_apps_section_title\">Zakrpljene aplikacije</string>\n  <string name=\"patchable_apps_section_title\">Aplikacije koje se mogu zakrpiti</string>\n  <string name=\"no_patches_found\">Nema pronađenih patcheva</string>\n  <string name=\"no_patches_description\">Još uvek nemate patcheve. Dodajte patcheve dodirom na dugme ispod!</string>\n  <string name=\"tap_on_patches\">Dodirnite zakrpe da biste dobili više informacija o njima</string>\n  <string name=\"patches_selected\">%s izabrano</string>\n  <string name=\"incompatible_patches\">Nekompatibilne zakrpe</string>\n  <string name=\"universal_patches\">Univerzalne zakrpe</string>\n  <string name=\"patch_selection_reset_toast\">Izbor zakrpa i opcija je resetovan na preporučene podrazumevane vrednosti</string>\n  <string name=\"patch_options_reset_toast\">Opcije zakrpa su resetovane</string>\n  <string name=\"non_suggested_version_warning_title\">Nije predložena verzija</string>\n  <string name=\"non_suggested_version_warning_description\">Verzija aplikacije koju ste izabrali ne odgovara predloženoj verziji.\\nMolimo koristite predloženu verziju: %s\\n\\nDa biste nastavili svakako, onemogućite \\\"Zahtevaj predloženu verziju aplikacije\\\" u naprednim podešavanjima.</string>\n  <string name=\"selection_warning_title\">Prekinuti korišćenje podrazumevanih vrednosti?</string>\n  <string name=\"selection_warning_description\">Preporučuje se korišćenje podrazumevanog izbora zakrpa i opcija. Njihova promena može dovesti do neočekivanih problema.\\n\\nMorate uključiti \\\"Dozvoli promenu izbora zakrpa i opcija\\\" u naprednim podešavanjima pre prebacivanja zakrpa.</string>\n  <string name=\"universal_patch_warning_description\">Univerzalne zakrpe imaju opštiju primenu i ne rade pouzdano kao zakrpe koje ciljaju određene aplikacije. Možete naići na probleme prilikom njihovog korišćenja.\\n\\nMorate uključiti \\\"Dozvoli korišćenje univerzalnih zakrpa\\\" u naprednim podešavanjima pre korišćenja univerzalnih zakrpa.</string>\n  <string name=\"this_version\">Ova verzija</string>\n  <string name=\"universal\">Bilo koja aplikacija</string>\n  <string name=\"search_patches\">Pretraži zakrpe</string>\n  <string name=\"app_version_not_compatible\">Ova zakrpa nije kompatibilna sa odabranom verzijom aplikacije (%1$s)\\n\\nKompatibilna je samo sa sledećim verzijama: %2$s</string>\n  <string name=\"continue_with_version\">Nastaviti sa ovom verzijom?</string>\n  <string name=\"version_not_compatible\">Nisu sve zakrpe kompatibilne sa ovom verzijom (%s). Želite li ipak da nastavite?</string>\n  <string name=\"download_application\">Preuzeti aplikaciju?</string>\n  <string name=\"app_not_installed\">Aplikacija koju ste izabrali nije instalirana. Želite li da je preuzmete?</string>\n  <string name=\"failed_to_load_apk\">Nije uspelo učitavanje APK-a</string>\n  <string name=\"split_apk_not_supported\">Podeljeni APK-ovi ne mogu biti zakrpljeni</string>\n  <string name=\"loading\">Učitavanje…</string>\n  <string name=\"not_installed\">Nije instalirano</string>\n  <string name=\"installed\">Instalirano</string>\n  <string name=\"app_info\">Informacije o aplikaciji</string>\n  <string name=\"uninstall\">Deinstaliraj</string>\n  <string name=\"unpatch\">Ukloni zakrpu</string>\n  <string name=\"repatch\">Ponovo zakrpi</string>\n  <string name=\"install_type\">Tip instalacije</string>\n  <string name=\"package_name\">Ime paketa</string>\n  <string name=\"original_package_name\">Originalno ime paketa</string>\n  <string name=\"applied_patches\">Primenjene zakrpe</string>\n  <string name=\"view_applied_patches\">Prikaži primenjene zakrpe</string>\n  <string name=\"default_install\">Podrazumevani</string>\n  <string name=\"mount_install\">Montiraj</string>\n  <string name=\"mounted\">Montirano</string>\n  <string name=\"not_mounted\">Nije montirano</string>\n  <string name=\"mount\">Montiraj</string>\n  <string name=\"unmount\">Demontiraj</string>\n  <string name=\"failed_to_mount\">Neuspešno montiranje: %s</string>\n  <string name=\"failed_to_unmount\">Neuspešno demontiranje: %s</string>\n  <string name=\"unpatch_app\">Ukloniti zakrpu sa aplikacije?</string>\n  <string name=\"unpatch_description\">Da li ste sigurni da želite da uklonite zakrpu sa ove aplikacije?</string>\n  <string name=\"downloader_invalid_version\">Preuzimač nije preuzeo ispravnu verziju</string>\n  <string name=\"downloader_app_not_found\">Preuzimač nije pronašao aplikaciju</string>\n  <string name=\"downloader_error\">Greška preuzimača: %s</string>\n  <string name=\"no_downloaders_installed\">Nema instaliranih preuzimača aplikacija!</string>\n  <string name=\"no_downloaders_trusted\">Nijedan preuzimač aplikacija nije pouzdan! Molimo proverite svoja podešavanja.</string>\n  <string name=\"already_patched\">Već zakrpljeno</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filter</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Kompatibilnost</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paketi</string>\n  <string name=\"patch_selector_sheet_actions_title\">Akcije</string>\n  <string name=\"restore_default_selection\">Vrati podrazumevani izbor</string>\n  <string name=\"deselect_all\">Poništi sav izbor</string>\n  <string name=\"invert_selection\">Invertuj izbor</string>\n  <string name=\"deselect_all_except\">Poništi izbor svih osim %s</string>\n  <string name=\"scope_dialog_title\">Primeni na</string>\n  <string name=\"scope_all_patches\">Sve zakrpe</string>\n  <string name=\"scope_bundle_patches\">Samo %s</string>\n  <string name=\"string_option_menu_description\">Više opcija</string>\n  <string name=\"option_preset_custom_value\">Prilagođena vrednost</string>\n  <string name=\"path_selector\">Izaberi iz skladišta</string>\n  <string name=\"path_selector_parent_dir\">Prethodni direktorijum</string>\n  <string name=\"path_selector_dirs\">Direktorijumi</string>\n  <string name=\"path_selector_files\">Datoteke</string>\n  <string name=\"show_password_field\">Prikaži lozinku</string>\n  <string name=\"hide_password_field\">Sakrij lozinku</string>\n  <string name=\"installer\">Instalater</string>\n  <string name=\"install_app\">Instaliraj</string>\n  <string name=\"install_app_success\">Aplikacija instalirana</string>\n  <string name=\"install_app_fail\">Neuspešna instalacija aplikacije: %s</string>\n  <string name=\"reinstall_app_fail\">Neuspešna ponovna instalacija aplikacije: %s</string>\n  <string name=\"uninstall_app_fail\">Neuspešno deinstaliranje aplikacije: %s</string>\n  <string name=\"open_app\">Otvori</string>\n  <string name=\"save_apk\">Sačuvaj APK</string>\n  <string name=\"save_apk_success\">APK sačuvan</string>\n  <string name=\"sign_fail\">Neuspešno potpisivanje APK-a: %s</string>\n  <string name=\"save_logs\">Sačuvaj evidencije</string>\n  <string name=\"save_as_file\">Sačuvaj u datoteke</string>\n  <string name=\"export_patcher_logs\">Izvezi evidencije patcher-a</string>\n  <string name=\"save_logs_success\">Evidencije sačuvane</string>\n  <string name=\"downloader_activity_dialog_body\">Potrebna je interakcija korisnika da bi se nastavilo sa ovim programom za preuzimanje.</string>\n  <string name=\"select_install_type\">Izaberite tip instalacije</string>\n  <string name=\"patcher_step_group_preparing\">Priprema</string>\n  <string name=\"patcher_step_load_patches\">Učitavanje zakrpa</string>\n  <string name=\"patcher_step_unpack\">Pripremi zakrpu</string>\n  <string name=\"patcher_step_group_patching\">Zakrpljivanje</string>\n  <string name=\"patcher_step_group_saving\">Čuvanje</string>\n  <string name=\"patcher_step_write_patched\">Zapisivanje zakrpljene APK datoteke</string>\n  <string name=\"patcher_step_sign_apk\">Potpisivanje zakrpljene APK datoteke</string>\n  <string name=\"patcher_notification_title\">Zakrpljivanje u toku…</string>\n  <string name=\"patcher_notification_text\">Dodirnite za povratak na program za zakrpljivanje</string>\n  <string name=\"patcher_stop_confirm_title\">Zaustavi program za zakrpljivanje</string>\n  <string name=\"patcher_stop_confirm_description\">Da li ste sigurni da želite da zaustavite proces zakrpljivanja?</string>\n  <string name=\"patcher_install_in_progress\">Instalacija je u toku. Sačekajte</string>\n  <string name=\"execute_patches\">Izvrši zakrpe</string>\n  <string name=\"executing_patch\">Izvršavanje %s</string>\n  <string name=\"failed_to_execute_patch\">Neuspešno izvršavanje %s</string>\n  <string name=\"step_completed\">završeno</string>\n  <string name=\"step_failed\">neuspešno</string>\n  <string name=\"step_running\">pokrenuto</string>\n  <string name=\"step_waiting\">čeka se</string>\n  <string name=\"expand_content\">proširi</string>\n  <string name=\"collapse_content\">skupi</string>\n  <string name=\"drag_handle\">preuredi</string>\n  <string name=\"more\">Više</string>\n  <string name=\"less\">Manje</string>\n  <string name=\"continue_\">Nastavi</string>\n  <string name=\"dismiss\">Odbaci</string>\n  <string name=\"view_announcement\">Prikaži obaveštenje</string>\n  <string name=\"permanent_dismiss\">Ne prikazuj ovo ponovo</string>\n  <string name=\"donate\">Doniraj</string>\n  <string name=\"website\">Veb-sajt</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Kontakt</string>\n  <string name=\"license\">Licenca</string>\n  <string name=\"source\">Izvor</string>\n  <string name=\"repository\">Repozitorijum</string>\n  <string name=\"bundle_information_by_author\">Autor: %1$s</string>\n  <string name=\"version\">Verzija</string>\n  <string name=\"version_compatibility_warning\">Izabrana verzija možda nije kompatibilna sa izabranim zakrpama</string>\n  <string name=\"submit_feedback\">Pošaljite problem ili povratnu informaciju</string>\n  <string name=\"submit_feedback_description\">Pomozite nam da poboljšamo ovu aplikaciju</string>\n  <string name=\"developer_options\">Opcije za programere</string>\n  <string name=\"developer_options_description\">Opcije za otklanjanje grešaka</string>\n  <string name=\"patches_update_success\">Ažuriranje uspešno</string>\n  <string name=\"patches_update_unavailable\">Nema dostupnog ažuriranja</string>\n  <string name=\"view_patches\">Prikaži zakrpe</string>\n  <string name=\"patches_view_any_version\">Bilo koja verzija</string>\n  <string name=\"patches_view_any_package\">Bilo koji paket</string>\n  <string name=\"patches_delete_single_dialog_description\">Da li ste sigurni da želite da obrišete „%s“?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Da li ste sigurni da želite da obrišete izabrane zakrpe?</string>\n  <string name=\"announcements\">Obaveštenja</string>\n  <string name=\"archive\">Arhiva</string>\n  <string name=\"about_revanced_manager\">O ReVanced Manager-u</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager je Android aplikacija koja koristi ReVanced Patcher za zakrpljivanje Android aplikacija. Omogućava vam da preuzimate i zakrpljujete aplikacije prilagođenim zakrpama i upravljate procesom zakrpljivanja.</string>\n  <string name=\"developer_options_taps\">Preostalo %d dodira</string>\n  <string name=\"developer_options_enabled\">Opcije za programere omogućene</string>\n  <string name=\"developer_options_already_enabled\">Opcije za programere su već omogućene</string>\n  <string name=\"update_available\">Dostupno je ažuriranje</string>\n  <string name=\"current_version\">Trenutna verzija: %s</string>\n  <string name=\"new_version\">Nova verzija: %s</string>\n  <string name=\"ready_to_install_update\">Spremno za instalaciju ažuriranja</string>\n  <string name=\"update_completed\">Ažuriranje instalirano</string>\n  <string name=\"install_update_manager_failed\">Neuspešna instalacija ažuriranja</string>\n  <string name=\"manual_update_check\">Proveri ažuriranja</string>\n  <string name=\"view_update\">Pregledaj ažuriranje</string>\n  <string name=\"manual_update_check_description\">Ručno proveri ažuriranja</string>\n  <string name=\"update_checking_manager\">Proveri ažuriranja pri pokretanju</string>\n  <string name=\"update_checking_manager_description\">Proveri nove verzije ReVanced Manager-a kada se aplikacija pokrene</string>\n  <string name=\"update_checking_downloader\">Proveri ažuriranja ReVanced Preuzimača pri pokretanju</string>\n  <string name=\"update_checking_downloader_description\">Proveri ažuriranja za instalirane ReVanced Preuzimače kada se aplikacija pokrene</string>\n  <string name=\"manager_prereleases\">Koristi predizdanja</string>\n  <string name=\"manager_prereleases_description\">Koristi verzije predizdanja ReVanced Manager-a</string>\n  <string name=\"prereleases_warning\">Pre-izdanja mogu biti nestabilna i sadržati greške. Možete doživeti padove sistema, gubitak podataka ili druge neočekivane probleme. Omogućite ovo samo ako ste saglasni sa ovim rizicima.</string>\n  <string name=\"changelog\">Pregledaj dnevnik promena</string>\n  <string name=\"changelog_loading\">Učitavanje istorije izmena</string>\n  <string name=\"changelog_download_fail\">Neuspešno preuzimanje istorije izmena: %s</string>\n  <string name=\"changelog_description\">Pogledajte najnovije izmene u ovom ažuriranju</string>\n  <string name=\"battery_optimization_notification\">Optimizacije baterije moraju biti isključene da bi ReVanced Manager ispravno radio u pozadini. Kliknite ovde da biste isključili optimizacije.</string>\n  <string name=\"installing_manager_update\">Instaliranje ažuriranja…</string>\n  <string name=\"downloading_manager_update\">Preuzimanje ažuriranja…</string>\n  <string name=\"download_manager_failed\">Neuspešno preuzimanje ažuriranja: %s</string>\n  <string name=\"cancel\">Otkaži</string>\n  <string name=\"save\">Sačuvaj</string>\n  <string name=\"save_with_count\">Sačuvaj (%1$s)</string>\n  <string name=\"update\">Ažuriraj</string>\n  <string name=\"empty\">Prazno</string>\n  <string name=\"installing_message\">Dodirnite <b>Ažuriraj</b> kada se to od vas zatraži.\nReVanced Manager će se zatvoriti tokom ažuriranja.</string>\n  <string name=\"no_changelogs_found\">Nije pronađena istorija izmena</string>\n  <string name=\"just_now\">Upravo sada</string>\n  <string name=\"minutes_ago\">pre %sm</string>\n  <string name=\"hours_ago\">pre %sh</string>\n  <string name=\"days_ago\">pre %sd</string>\n  <string name=\"invalid_date\">Nevažeći datum</string>\n  <string name=\"disable_battery_optimization\">Onemogući optimizaciju baterije</string>\n  <string name=\"input_dialog_value_invalid\">Nevažeća vrednost</string>\n  <string name=\"option_required\">Ova opcija je obavezna</string>\n  <string name=\"required_options_screen\">Obavezne opcije</string>\n  <string name=\"failed_to_check_updates\">Neuspešna provera ažuriranja: %s</string>\n  <string name=\"no_update_available\">Nema dostupnog ažuriranja</string>\n  <string name=\"no_announcements_found\">Nema pronađenih obaveštenja</string>\n  <string name=\"update_check\">Proverava ažuriranja…</string>\n  <string name=\"dismiss_temporary\">Ne sada</string>\n  <string name=\"update_available_dialog_description\">Dostupna je nova verzija ReVanced Manager-a (%s).</string>\n  <string name=\"failed_to_download_update\">Neuspešno preuzimanje ažuriranja: %s</string>\n  <string name=\"download\">Preuzmi</string>\n  <string name=\"download_confirmation_metered\">Trenutno ste na vezi sa ograničenim prenosom podataka, a troškovi prenosa podataka od vašeg pružaoca usluga se mogu primeniti.\n\nDa li i dalje želite da nastavite?</string>\n  <string name=\"download_update_confirmation\">Preuzmi ažuriranje?</string>\n  <string name=\"no_contributors_found\">Nije pronađen nijedan saradnik</string>\n  <string name=\"select\">Izaberi</string>\n  <string name=\"select_deselect_all\">Izaberi ili poništi izbor svih</string>\n  <string name=\"select_patches_type_dialog_description\">Dodajte nove zakrpe sa URL adrese ili lokalnih datoteka</string>\n  <string name=\"local_patches_description\">Dodajte zakrpe iz lokalnog skladišta.</string>\n  <string name=\"remote_patches_description\">Dodajte zakrpe sa URL adrese. Zakrpe se mogu automatski ažurirati.</string>\n  <string name=\"recommended\">Preporučeno</string>\n  <string name=\"installation_failed_dialog_title\">Instalacija neuspešna</string>\n  <string name=\"installation_cancelled_dialog_title\">Instalacija otkazana</string>\n  <string name=\"installation_blocked_dialog_title\">Instalacija blokirana</string>\n  <string name=\"installation_conflict_dialog_title\">Konflikt instalacije</string>\n  <string name=\"installation_incompatible_dialog_title\">Instalacija nekompatibilna</string>\n  <string name=\"installation_invalid_dialog_title\">Instalacija nevažeća</string>\n  <string name=\"installation_storage_issue_dialog_title\">Nema dovoljno skladišta</string>\n  <string name=\"installation_timeout_dialog_title\">Instalacija je istekla</string>\n  <string name=\"installation_failed_description\">Instalacija nije uspela zbog nepoznatog razloga. Pokušati ponovo?</string>\n  <string name=\"installation_aborted_description\">Instalacija je ručno otkazana. Pokušati ponovo?</string>\n  <string name=\"installation_blocked_description\">Instalacija je blokirana. Pregledajte bezbednosna podešavanja uređaja i pokušajte ponovo.</string>\n  <string name=\"installation_conflict_description\">Instalacija je sprečena postojećom instalacijom aplikacije. Deinstalirajte instaliranu aplikaciju i pokušajte ponovo?</string>\n  <string name=\"installation_incompatible_description\">Aplikacija je nekompatibilna sa ovim uređajem. Koristite APK koji je kompatibilan sa ovim uređajem i pokušajte ponovo.</string>\n  <string name=\"installation_invalid_description\">Aplikacija je nevažeća. Deinstalirajte aplikaciju i pokušajte ponovo?</string>\n  <string name=\"installation_storage_issue_description\">Aplikacija se ne može instalirati zbog nedovoljnog prostora za skladištenje. Oslobodite prostor i pokušajte ponovo.</string>\n  <string name=\"installation_timeout_description\">Instalacija je predugo trajala. Pokušati ponovo?</string>\n  <string name=\"reinstall\">Ponovo instaliraj</string>\n  <string name=\"show\">Prikaži</string>\n  <string name=\"debugging\">Otklanjanje grešaka</string>\n  <string name=\"about_device\">O uređaju</string>\n  <string name=\"enter_url\">Unesite URL</string>\n  <string name=\"next\">Dalje</string>\n  <string name=\"auto_update\">Automatsko ažuriranje</string>\n  <string name=\"add_patches\">Dodaj zakrpe</string>\n  <string name=\"auto_update_description\">Automatski ažuriraj kada je nova verzija dostupna</string>\n  <string name=\"patches_prereleases\">Koristi predizdanja</string>\n  <string name=\"patches_prereleases_description\">Koristi verzije predizdanja %s</string>\n  <string name=\"patches_url\">URL adresa zakrpa</string>\n  <string name=\"incompatible_patches_dialog\">Ove zakrpe nisu kompatibilne sa izabranom verzijom aplikacije (%1$s).\n\nKliknite na zakrpe za više detalja.</string>\n  <string name=\"incompatible_patch\">Nekompatibilna zakrpa</string>\n  <string name=\"any_version\">Bilo koji</string>\n  <string name=\"never_show_again\">Nikada više ne prikazuj</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Prikaži poruku o ažuriranju pri pokretanju</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Prikaži iskačuće obaveštenje kada je novo ažuriranje dostupno pri pokretanju</string>\n  <string name=\"failed_to_import_keystore\">Neuspešan uvoz skladišta ključeva</string>\n  <string name=\"export\">Izvezi</string>\n  <string name=\"confirm\">Potvrdi</string>\n  <string name=\"new_announcement\">Novo obaveštenje:%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d zakrpa</item>\n    <item quantity=\"few\">%d zakrpe</item>\n    <item quantity=\"other\">%d zakrpa</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Izvrši %d zakrpu</item>\n    <item quantity=\"few\">Izvrši %d zakrpe</item>\n    <item quantity=\"other\">Izvrši %d zakrpa</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d izabran</item>\n    <item quantity=\"few\">%d izabrana</item>\n    <item quantity=\"other\">%d izabranih</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sr-rSP/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Закрпљивач</string>\n  <string name=\"patches\">Закрпе</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Менаџер</string>\n  <string name=\"onboarding_welcome_to\">Добро дошли у</string>\n  <string name=\"onboarding_welcome_back\">Здраво! То је нови</string>\n  <string name=\"onboarding_apps_subtitle\">Можете да изаберете апликацију за закрпу сада или касније</string>\n  <string name=\"onboarding_apps_network_error\">Није могуће учитати закрпе јер мрежа није доступна или је нестабилна. Повежите се на стабилну мрежу и покушајте поново.</string>\n  <string name=\"onboarding_updates_subtitle\">Конфигуришите аутоматска ажурирања да бисте ReVanced Manager и закрпе одржавали ажурним</string>\n  <string name=\"banner_sources_not_downloaded_description\">Закрпе и програми за преузимање нису могли бити преузети током подешавања. Додирните ажурирање да бисте их преузели.</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager ће се повезати са %s како би преузео почетне верзије ако је ваш уређај повезан на интернет.</string>\n  <string name=\"retry\">Понови покушај</string>\n  <string name=\"onboarding_skip\">Прескочи за сада</string>\n  <string name=\"onboarding_recommended_version\">Препоручена верзија: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Прескочити дозволе?</string>\n  <string name=\"onboarding_permissions_skip_description\">Без потребних дозвола, неке функције можда неће радити исправно. Можете их доделити касније у подешавањима апликације.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Ипак прескочи</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager захтева неколико дозвола да би исправно радио</string>\n  <string name=\"permission_install_apps\">Инсталирај непознате апликације</string>\n  <string name=\"permission_install_apps_description\">Потребно за инсталацију закрпљених апликација</string>\n  <string name=\"permission_notifications\">Обавештења</string>\n  <string name=\"permission_notifications_description\">Омогућава непрекидно закрпљивање у позадини</string>\n  <string name=\"permission_battery\">Оптимизација батерије</string>\n  <string name=\"permission_battery_description\">Спречава прекид закрпљивања у позадини</string>\n  <string name=\"permission_grant\">Додели</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager хост преузимача</string>\n  <string name=\"downloader_host_permission_description\">Користи се за контролу приступа ReVanced Manager преузимачима. Само ReVanced Manager има ово.</string>\n  <string name=\"toast_copied_to_clipboard\">Копирано!</string>\n  <string name=\"copy_to_clipboard\">Копирај у привремену меморију</string>\n  <string name=\"dashboard\">Контролна табла</string>\n  <string name=\"settings\">Подешавања</string>\n  <string name=\"select_app\">Изаберите апликацију</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d изабрано</string>\n  <string name=\"fab_patch_app\">Закрпи апликацију</string>\n  <string name=\"fab_add_patches\">Додај закрпе</string>\n  <string name=\"new_downloader_notification\">Доступан је(су) нови преузимач(и). Кликните овде да их конфигуришете.</string>\n  <string name=\"unsupported_architecture_warning\">Закрпа на овој архитектури уређаја није подржана и највероватније ће пропасти.</string>\n  <string name=\"import_\">Увези</string>\n  <string name=\"import_patches\">Увези закрпе</string>\n  <string name=\"file_field_set\">Изабрано</string>\n  <string name=\"file_field_not_set\">Није изабрано</string>\n  <string name=\"field_not_set\">Није подешено</string>\n  <string name=\"patches_missing\">Недостаје</string>\n  <string name=\"patches_error\">Грешка</string>\n  <string name=\"patches_error_description\">Закрпе нису могле да буду учитане. Кликните да бисте видели грешку.</string>\n  <string name=\"patches_not_downloaded\">Закрпе нису преузете.</string>\n  <string name=\"patches_name_default\">Закрпе</string>\n  <string name=\"patches_name_fallback\">Неименовано</string>\n  <string name=\"android_11_bug_dialog_title\">Грешка Android-а 11</string>\n  <string name=\"android_11_bug_dialog_description\">Дозвола за инсталацију апликације мора бити додељена унапред да би се избегла грешка у систему Android 11 која ће негативно утицати на корисничко искуство.</string>\n  <string name=\"no_network_toast\">Нема доступне интернет везе</string>\n  <string name=\"selected_app_meta_any_version\">Било која доступна верзија</string>\n  <string name=\"app_source_dialog_title\">Изаберите извор</string>\n  <string name=\"app_source_dialog_option_auto\">Аутоматски</string>\n  <string name=\"app_source_dialog_option_auto_description\">Користи инсталирану апликацију, затим преузет APK, затим доступне преузимаче</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Није пронађена компатибилна апликација или доступни програми за преузимање</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Инсталиране апликације не могу поново да се закрпе без роот приступа</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Верзија %s се не поклапа са предложеном верзијом</string>\n  <string name=\"patch_item_description\">Започните закрпавање апликације</string>\n  <string name=\"patch_selector_item\">Изаберите закрпе</string>\n  <string name=\"patch_selector_item_description\">%d изабраних закрпа</string>\n  <string name=\"patch_selection_changed_warning\">Избор закрпа је промењен.</string>\n  <string name=\"no_patches_selected\">Нису изабране закрпе</string>\n  <string name=\"network_unavailable_warning\">Ваш уређај није повезан на интернет. Преузимање ће касније пропасти.</string>\n  <string name=\"network_metered_warning\">Тренутно сте на тарифној вези. Могу се применити накнаде за пренос података од вашег провајдера услуга.</string>\n  <string name=\"apk_source_selector_item\">Изаберите APK извор</string>\n  <string name=\"apk_source_auto\">Аутоматски</string>\n  <string name=\"apk_source_auto_installed\">Аутоматски · Коришћење инсталираног APK-а</string>\n  <string name=\"apk_source_auto_downloaded\">Аутоматски · Коришћење преузетог APK-а</string>\n  <string name=\"apk_source_auto_downloader\">Аутоматски · Коришћење доступних преузимача</string>\n  <string name=\"apk_source_auto_storage\">Аутоматски · Избор из меморије</string>\n  <string name=\"apk_source_downloader\">Коришћење %s</string>\n  <string name=\"apk_source_installed\">Коришћење инсталираног APK-а</string>\n  <string name=\"apk_source_local\">Коришћење локалне APK датотеке</string>\n  <string name=\"apk_source_downloaded\">Већ преузето</string>\n  <string name=\"legacy_import_failed\">Није могуће увести старе поставке</string>\n  <string name=\"auto_updates_dialog_title\">Конфигуришите ажурирања</string>\n  <string name=\"auto_updates_dialog_description\">Желите ли да ReVanced Manager периодично проверава ажурирања за следеће компоненте?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced закрпе</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Преузимачи</string>\n  <string name=\"auto_updates_dialog_note\">Ова подешавања се могу касније променити.\n\n    ReVanced Manager ће се повезати са %s како би преузео почетне верзије ако је ваш уређај повезан на интернет.</string>\n  <string name=\"announcements_filter_tag\">Филтрирај по ознаци</string>\n  <string name=\"announcements_show_archived\">Прикажи архивирано</string>\n  <string name=\"general\">Опште</string>\n  <string name=\"general_description\">Језик, тема, динамична боја</string>\n  <string name=\"updates\">Ажурирања</string>\n  <string name=\"updates_description\">Провери ажурирања и погледај дневник измена</string>\n  <string name=\"downloads\">Преузимања</string>\n  <string name=\"downloads_description\">Преузимачи и преузете апликације</string>\n  <string name=\"import_export\">Увоз &amp; извоз</string>\n  <string name=\"import_export_description\">Продавница кључева, опције и избор закрпе</string>\n  <string name=\"advanced\">Напредно</string>\n  <string name=\"advanced_description\">API URL, ограничење меморије, отклањање грешака</string>\n  <string name=\"safeguards_toggled_warning\">Заштитне мере су промењене.</string>\n  <string name=\"about\">О програму</string>\n  <string name=\"about_app_name\">О програму %1$s</string>\n  <string name=\"opensource_licenses\">Лиценце отвореног кода</string>\n  <string name=\"opensource_licenses_description\">Погледајте све библиотеке које су коришћене за израду ове апликације</string>\n  <string name=\"contributors\">Сарадници</string>\n  <string name=\"contributors_description\">Погледајте сараднике ReVanced-а</string>\n  <string name=\"dynamic_color\">Динамична боја</string>\n  <string name=\"dynamic_color_description\">Прилагодите боје позадини</string>\n  <string name=\"pure_black_theme\">Потпуно црна тема</string>\n  <string name=\"pure_black_theme_description\">Користите потпуно црне позадине за тамну тему</string>\n  <string name=\"theme\">Тема</string>\n  <string name=\"theme_description\">Изаберите између светле или тамне теме</string>\n  <string name=\"language\">Језик</string>\n  <string name=\"language_description\">Изаберите језик приказа апликације</string>\n  <string name=\"language_system_default\">Подразумевано за систем</string>\n  <string name=\"search_languages\">Претражи језике…</string>\n  <string name=\"safeguards\">Заштитне мере</string>\n  <string name=\"patch_compat_check\">Онемогућите проверу компатибилности верзија</string>\n  <string name=\"patch_compat_check_description\">Не ограничавајте закрпе на компатибилне верзије апликација</string>\n  <string name=\"patch_compat_check_confirmation\">Избор некомпатибилних закрпа може довести до нефункционалне апликације.\\n\\nДа ли ипак желите да наставите?</string>\n  <string name=\"suggested_version_safeguard\">Захтевајте предложену верзију апликације</string>\n  <string name=\"suggested_version_safeguard_description\">Примените избор предложене верзије апликације</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Избор апликације која није предложена верзија може изазвати неочекиване проблеме.\\n\\nДа ли ипак желите да наставите?</string>\n  <string name=\"patch_selection_safeguard\">Дозволите промену избора закрпа и опција</string>\n  <string name=\"patch_selection_safeguard_description\">Не спречавајте избор или поништавање избора закрпа и прилагођавање опција</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Промена избора закрпа може изазвати неочекиване проблеме.\\n\\nИпак омогућити?</string>\n  <string name=\"universal_patches_safeguard\">Дозволи коришћење универзалних закрпа</string>\n  <string name=\"universal_patches_safeguard_description\">Не спречавајте коришћење универзалних закрпа</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Универзалне закрпе нису тако добро тестиране као оне које циљају одређене апликације.\\n\\nИпак омогућити?</string>\n  <string name=\"keystore\">Складиште кључева</string>\n  <string name=\"patches_selections\">Избори закрпа</string>\n  <string name=\"import_keystore\">Увези продавницу кључева</string>\n  <string name=\"import_keystore_description\">Увези прилагођену продавницу кључева</string>\n  <string name=\"import_keystore_dialog_title\">Унесите акредитиве продавнице кључева</string>\n  <string name=\"import_keystore_dialog_description\">Мораћете да унесете акредитиве продавнице кључева да бисте је увезли.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Корисничко име (Алијас)</string>\n  <string name=\"import_keystore_dialog_password_field\">Лозинка</string>\n  <string name=\"import_keystore_dialog_button\">Увези</string>\n  <string name=\"import_keystore_wrong_credentials\">Погрешни акредитиви продавнице кључева</string>\n  <string name=\"import_keystore_success\">Увезена продавница кључева</string>\n  <string name=\"export_keystore\">Извези продавницу кључева</string>\n  <string name=\"export_keystore_description\">Извези тренутну продавницу кључева</string>\n  <string name=\"export_keystore_unavailable\">Нема продавнице кључева за извоз</string>\n  <string name=\"export_keystore_success\">Извезена продавница кључева</string>\n  <string name=\"regenerate_keystore\">Поново генериши продавницу кључева</string>\n  <string name=\"regenerate_keystore_description\">Генериши нову продавницу кључева</string>\n  <string name=\"regenerate_keystore_dialog_description\">Спремате се да поново генеришете продавницу кључева коју ће менаџер користити током процеса закрпавања.\\n\\nНећете моћи да ажурирате претходно инсталиране апликације из овог извора.</string>\n  <string name=\"regenerate_keystore_success\">Продавница кључева је успешно замењена</string>\n  <string name=\"import_patch_selection\">Увези избор закрпе</string>\n  <string name=\"import_patch_selection_description\">Увези избор закрпе из JSON датотеке</string>\n  <string name=\"import_patch_selection_fail\">Није могуће увести избор закрпе: %s</string>\n  <string name=\"import_patch_selection_success\">Увезен избор закрпе</string>\n  <string name=\"select_bundle_for_import\">Изаберите пакет за увоз у</string>\n  <string name=\"export_patch_selection\">Извези избор закрпе</string>\n  <string name=\"export_patch_selection_description\">Извези избор закрпе у JSON датотеку</string>\n  <string name=\"export_patch_selection_fail\">Није могуће извести избор закрпе: %s</string>\n  <string name=\"export_patch_selection_success\">Извезен избор закрпе</string>\n  <string name=\"select_bundle_for_export\">Изаберите пакет за извоз из</string>\n  <string name=\"patch_selection_packages\">Апликације са сачуваним изборима</string>\n  <string name=\"patch_selection_entries\">Укупно изабраних закрпа</string>\n  <string name=\"reset_configuration\">Ресетуј конфигурацију</string>\n  <string name=\"reset_patch_selection\">Избори закрпа</string>\n  <string name=\"reset_patch_selection_description\">Ресетуј сачуван избор закрпе</string>\n  <string name=\"reset_patch_options\">Опције закрпа</string>\n  <string name=\"reset_patch_options_description\">Ресетуј сачуване опције закрпе</string>\n  <string name=\"reset_patch_selection_success\">Избор закрпе је ресетован</string>\n  <string name=\"patch_selection_reset_all\">Ресетуј избор закрпе глобално</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Спремате се да ресетујете све изборе закрпа. Мораћете ручно поново да изаберете сваку закрпу.</string>\n  <string name=\"patch_selection_reset_all_description\">Ресетује све изборе закрпа</string>\n  <string name=\"patch_selection_reset_package\">Ресетуј избор закрпе за апликацију</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Спремате се да ресетујете избор закрпа за апликацију „%s“. Мораћете ручно поново да изаберете сваку закрпу.</string>\n  <string name=\"patch_selection_reset_package_description\">Ресетује избор закрпа за једну апликацију</string>\n  <string name=\"patch_selection_reset_patches\">Ресетуј избор закрпа (појединачно)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Спремни сте да ресетујете избор закрпа за „%s“. Мораћете поново ручно да изаберете сваку закрпу.</string>\n  <string name=\"patch_selection_reset_patches_description\">Ресетује избор закрпа за одређену колекцију закрпа</string>\n  <string name=\"patch_options_reset_package\">Ресетуј опције закрпа за апликацију</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Спремни сте да ресетујете опције закрпа за апликацију „%s“. Мораћете поново да примените сваку опцију.</string>\n  <string name=\"patch_options_reset_package_description\">Ресетује опције закрпа за једну апликацију</string>\n  <string name=\"patch_options_reset_patches\">Ресетуј опције закрпа (појединачно)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Спремни сте да ресетујете опције закрпа за „%s“. Мораћете поново да примените сваку опцију.</string>\n  <string name=\"patch_options_reset_patches_description\">Ресетује опције закрпа за одређену колекцију закрпа</string>\n  <string name=\"patch_options_reset_all\">Ресетуј опције закрпа глобално</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Спремни сте да ресетујете све опције закрпа. Мораћете поново да примените сваку опцију.</string>\n  <string name=\"patch_options_reset_all_description\">Ресетује све опције закрпа</string>\n  <string name=\"downloaders\">Преузимачи</string>\n  <string name=\"downloader_prereleases\">Користи предиздања</string>\n  <string name=\"downloader_prereleases_description\">Користи предиздања главног преузимача</string>\n  <string name=\"downloader_state_loaded\">Учитано</string>\n  <string name=\"downloader_state_failed\">Није успело учитавање. Кликните за више детаља</string>\n  <string name=\"downloader_state_missing\">Недостаје</string>\n  <string name=\"downloader_delete_apps_title\">Избриши изабране апликације</string>\n  <string name=\"downloader_delete_apps_description\">Да ли сте сигурни да желите да избришете изабране апликације?</string>\n  <string name=\"downloader_delete_single_description\">Желите ли заиста да обришете „%s“?</string>\n  <string name=\"downloader_settings_no_apps\">Нису пронађене преузете апликације.</string>\n  <string name=\"downloader_settings_no_apps_description\">Апликације преузете преко ReVanced Manager-а ће се појавити овде.</string>\n  <string name=\"downloader_url\">URL преузимача</string>\n  <string name=\"downloader_add\">Додај преузимач</string>\n  <string name=\"select_downloader_type_dialog_description\">Додај нове преузимаче са URL адресе или локалних датотека</string>\n  <string name=\"local_downloaders_description\">Додај преузимаче из локалне меморије.</string>\n  <string name=\"remote_downloaders_description\">Додај преузимаче са URL адресе. Могу се аутоматски ажурирати.</string>\n  <string name=\"install_revanced_downloaders\">Инсталирајте преузимаче да бисте добили апликације директно у оквиру ReVanced Manager-a.</string>\n  <string name=\"install_revanced_downloader\">Инсталирајте ReVanced преузимаче</string>\n  <string name=\"cancel_downloader_install_title\">Откажи инсталацију преузимача?</string>\n  <string name=\"cancel_downloader_install_description\">Инсталација преузимача је у току. Ако сада напустите, преузимање ће бити отказано.</string>\n  <string name=\"downloader_sources_unavailable_title\">Ови преузимачи недостају</string>\n  <string name=\"downloader_sources_unavailable_description\">Кликните на дугме за ажурирање да бисте то поправили.</string>\n  <string name=\"downloader_update_failed\">Ажурирање преузимача није успело: %s</string>\n  <string name=\"downloader_replace_fail\">Увоз преузимача није успео: %s</string>\n  <string name=\"search_apps\">Претражи апликације…</string>\n  <string name=\"loading_body\">Учитавање…</string>\n  <string name=\"downloading_patches\">Преузимање закрпа…</string>\n  <string name=\"options\">Опције</string>\n  <string name=\"ok\">У реду</string>\n  <string name=\"yes\">Да</string>\n  <string name=\"no\">Не</string>\n  <string name=\"edit\">Измени</string>\n  <string name=\"dialog_input_placeholder\">Вредност</string>\n  <string name=\"reset\">Ресетуј</string>\n  <string name=\"share\">Дели</string>\n  <string name=\"patch\">Закрпа</string>\n  <string name=\"select_from_storage\">Изабери из складишта</string>\n  <string name=\"select_from_storage_description\">Изаберите APK датотеку из складишта помоћу бирача датотека</string>\n  <string name=\"suggested_version_info\">Предложена верзија: %s</string>\n  <string name=\"type_anything\">Куцајте било шта да бисте наставили</string>\n  <string name=\"search\">Претражи закрпе…</string>\n  <string name=\"apply\">Примени</string>\n  <string name=\"help\">Помоћ</string>\n  <string name=\"back\">Назад</string>\n  <string name=\"warning\">Упозорење</string>\n  <string name=\"add\">Додај</string>\n  <string name=\"enable\">Омогући</string>\n  <string name=\"disable\">Онемогући</string>\n  <string name=\"close\">Затвори</string>\n  <string name=\"clear\">Обриши</string>\n  <string name=\"system\">Систем</string>\n  <string name=\"light\">Светло</string>\n  <string name=\"dark\">Тамно</string>\n  <string name=\"appearance\">Изглед</string>\n  <string name=\"networking\">Мрежа</string>\n  <string name=\"allow_metered_networks\">Дозволи мерене мреже</string>\n  <string name=\"allow_metered_networks_description\">Омогућава аутоматска ажурирања на мереним мрежама.\\n    Апликација и даље може упозоравати на мерене мреже за ручне операције.</string>\n  <string name=\"downloaded_apps\">Преузете апликације</string>\n  <string name=\"process_runtime\">Покрени закрпивач у другом процесу (експериментално)</string>\n  <string name=\"process_runtime_description\">Ово је брже и омогућава закрпивачу да користи више меморије</string>\n  <string name=\"process_runtime_memory_limit\">Лимит меморије процеса закрпивача</string>\n  <string name=\"process_runtime_memory_limit_description\">Максимална количина меморије коју процес закрпљивања може користити</string>\n  <string name=\"debug_logs_export\">Извези евиденције отклањања грешака</string>\n  <string name=\"debug_logs_export_read_failed\">Неуспешно читање евиденција (излазни код %d)</string>\n  <string name=\"debug_logs_export_failed\">Неуспешан извоз евиденција</string>\n  <string name=\"debug_logs_export_success\">Извезено евиденција</string>\n  <string name=\"api_url\">API URL</string>\n  <string name=\"api_url_description\">API који се користи за преузимање потребних датотека</string>\n  <string name=\"api_url_dialog_title\">Промени API URL</string>\n  <string name=\"api_url_dialog_description\">Промените API URL ReVanced Manager-а. ReVanced Manager користи API за преузимање закрпа и ажурирања.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager се повезује на API за преузимање закрпа и ажурирања. Уверите се да му верујете.</string>\n  <string name=\"api_url_dialog_save\">Постави</string>\n  <string name=\"api_url_dialog_reset\">Ресетуј API URL</string>\n  <string name=\"device\">Уређај</string>\n  <string name=\"device_android_version\">Андроид верзија</string>\n  <string name=\"device_model\">Модел</string>\n  <string name=\"device_architectures\">CPU архитектуре</string>\n  <string name=\"device_memory_limit\">Ограничења меморије</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Нормално) - %2$dMB (Велико)</string>\n  <string name=\"patches_force_download\">Присилно преузми све закрпе</string>\n  <string name=\"patches_reset\">Ресетуј закрпе</string>\n  <string name=\"reset_onboarding\">Ресетуј почетни приказ</string>\n  <string name=\"reset_onboarding_description\">Прикажи почетни екран при следећем покретању апликације</string>\n  <string name=\"patching\">Закрпљивање</string>\n  <string name=\"signing\">Потписивање</string>\n  <string name=\"storage\">Складиште</string>\n  <string name=\"no_patch_found\">Ниједна закрпа није пронађена. Проверите своје закрпе</string>\n  <string name=\"tab_apps\">Апликације</string>\n  <string name=\"tab_patches\">Закрпе</string>\n  <string name=\"delete\">Избриши</string>\n  <string name=\"refresh\">Освежи</string>\n  <string name=\"continue_anyways\">Настави ипак</string>\n  <string name=\"download_another_version\">Преузми другу верзију</string>\n  <string name=\"download_app\">Преузми апликацију</string>\n  <string name=\"download_apk\">Преузми APK датотеку</string>\n  <string name=\"patches_download_fail\">Неуспешно преузимање закрпа: %s</string>\n  <string name=\"api_not_working_title\">АПИ сервис је тренутно недоступан</string>\n  <string name=\"api_not_working_description\">Неке функције могу бити погођене. Проверите везу или АПИ УРЛ адресу у подешавањима.</string>\n  <string name=\"patches_replace_fail\">Неуспешно увожење закрпа: %s</string>\n  <string name=\"no_patched_apps_found\">Нису пронађене закрпљене апликације</string>\n  <string name=\"no_patched_apps_description\">Тренутно немате ниједну закрпљену апликацију за коју знамо. Промените то закрпљивањем ваше прве апликације!</string>\n  <string name=\"patched_apps_section_title\">Закрпљене апликације</string>\n  <string name=\"patchable_apps_section_title\">Апликације које се могу закрпити</string>\n  <string name=\"no_patches_found\">Нису пронађене закрпе</string>\n  <string name=\"no_patches_description\">Још увек немате закрпе. Додајте закрпе додиром на дугме испод!</string>\n  <string name=\"tap_on_patches\">Додирните закрпе да бисте добили више информација о њима</string>\n  <string name=\"patches_selected\">%s изабрано</string>\n  <string name=\"incompatible_patches\">Некомпатибилне закрпе</string>\n  <string name=\"universal_patches\">Универзалне закрпе</string>\n  <string name=\"patch_selection_reset_toast\">Избор закрпа и опције су ресетовани на препоручене подразумеване вредности</string>\n  <string name=\"patch_options_reset_toast\">Опције закрпа су ресетоване</string>\n  <string name=\"non_suggested_version_warning_title\">Непрепоручена верзија</string>\n  <string name=\"non_suggested_version_warning_description\">Верзија апликације коју сте изабрали не одговара предложеној верзији.\\nМолимо користите предложену верзију: %s\\n\\nДа бисте наставили, онемогућите „Захтевај предложену верзију апликације“ у напредним подешавањима.</string>\n  <string name=\"selection_warning_title\">Престати са коришћењем подразумеваних вредности?</string>\n  <string name=\"selection_warning_description\">Препоручује се коришћење подразумеваног избора закрпа и опција. Промена истих може довести до неочекиваних проблема.\\n\\nМорате укључити „Дозволи промену избора закрпа и опција“ у напредним подешавањима пре пребацивања закрпа.</string>\n  <string name=\"universal_patch_warning_description\">Универзалне закрпе имају општију примену и не раде поуздано као закрпе које циљају одређене апликације. Можете наићи на проблеме при њиховом коришћењу.\\n\\nМорате укључити „Дозволи коришћење универзалних закрпа“ у напредним подешавањима пре коришћења универзалних закрпа.</string>\n  <string name=\"this_version\">Ова верзија</string>\n  <string name=\"universal\">Било која апликација</string>\n  <string name=\"search_patches\">Претражи закрпе</string>\n  <string name=\"app_version_not_compatible\">Ова закрпа није компатибилна са изабраном верзијом апликације (%1$s)\\n\\nКомпатибилна је само са следећим верзијама: %2$s</string>\n  <string name=\"continue_with_version\">Наставити са овом верзијом?</string>\n  <string name=\"version_not_compatible\">Нису све закрпе компатибилне са овом верзијом (%s). Да ли желите да наставите ипак?</string>\n  <string name=\"download_application\">Преузети апликацију?</string>\n  <string name=\"app_not_installed\">Апликација коју сте изабрали није инсталирана. Желите ли да је преузмете?</string>\n  <string name=\"failed_to_load_apk\">Неуспешно учитавање APK</string>\n  <string name=\"split_apk_not_supported\">Подељени APK-ови не могу бити закрпљени</string>\n  <string name=\"loading\">Учитавање…</string>\n  <string name=\"not_installed\">Није инсталирано</string>\n  <string name=\"installed\">Инсталирано</string>\n  <string name=\"app_info\">Информације о апликацији</string>\n  <string name=\"uninstall\">Деинсталирај</string>\n  <string name=\"unpatch\">Уклони закрпу</string>\n  <string name=\"repatch\">Поново закрпи</string>\n  <string name=\"install_type\">Тип инсталације</string>\n  <string name=\"package_name\">Име пакета</string>\n  <string name=\"original_package_name\">Оригинално име пакета</string>\n  <string name=\"applied_patches\">Примењени печеви</string>\n  <string name=\"view_applied_patches\">Погледајте примењене печеве</string>\n  <string name=\"default_install\">Подразумевани</string>\n  <string name=\"mount_install\">Монтирај</string>\n  <string name=\"mounted\">Монтирано</string>\n  <string name=\"not_mounted\">Није монтирано</string>\n  <string name=\"mount\">Монтирај</string>\n  <string name=\"unmount\">Демонтирај</string>\n  <string name=\"failed_to_mount\">Није успело монтирање: %s</string>\n  <string name=\"failed_to_unmount\">Није успело демонтирање: %s</string>\n  <string name=\"unpatch_app\">Уклонити печеве из апликације?</string>\n  <string name=\"unpatch_description\">Да ли сте сигурни да желите да уклоните печеве из ове апликације?</string>\n  <string name=\"downloader_invalid_version\">Преузимач није преузео исправну верзију</string>\n  <string name=\"downloader_app_not_found\">Преузимач није пронашао апликацију</string>\n  <string name=\"downloader_error\">Грешка преузимача: %s</string>\n  <string name=\"no_downloaders_installed\">Нису инсталирани преузимачи апликација!</string>\n  <string name=\"no_downloaders_trusted\">Ниједан преузимач апликација није поуздан! Проверите своја подешавања.</string>\n  <string name=\"already_patched\">Већ закрпљено</string>\n  <string name=\"patch_selector_sheet_filter_title\">Филтер</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Компатибилност</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Пакети</string>\n  <string name=\"patch_selector_sheet_actions_title\">Акције</string>\n  <string name=\"restore_default_selection\">Врати подразумевани избор</string>\n  <string name=\"deselect_all\">Поништи избор свега</string>\n  <string name=\"invert_selection\">Инвертуј избор</string>\n  <string name=\"deselect_all_except\">Поништи избор свега осим %s</string>\n  <string name=\"scope_dialog_title\">Примени на</string>\n  <string name=\"scope_all_patches\">Све закрпе</string>\n  <string name=\"scope_bundle_patches\">Само %s</string>\n  <string name=\"string_option_menu_description\">Више опција</string>\n  <string name=\"option_preset_custom_value\">Прилагођена вредност</string>\n  <string name=\"path_selector\">Изаберите из складишта</string>\n  <string name=\"path_selector_parent_dir\">Претходни директоријум</string>\n  <string name=\"path_selector_dirs\">Директоријуми</string>\n  <string name=\"path_selector_files\">Датотеке</string>\n  <string name=\"show_password_field\">Прикажи лозинку</string>\n  <string name=\"hide_password_field\">Сакриј лозинку</string>\n  <string name=\"installer\">Инсталер</string>\n  <string name=\"install_app\">Инсталирај</string>\n  <string name=\"install_app_success\">Апликација инсталирана</string>\n  <string name=\"install_app_fail\">Није успела инсталација апликације: %s</string>\n  <string name=\"reinstall_app_fail\">Није успела поновна инсталација апликације: %s</string>\n  <string name=\"uninstall_app_fail\">Није успела деинсталација апликације: %s</string>\n  <string name=\"open_app\">Отвори</string>\n  <string name=\"save_apk\">Сачувај АПК</string>\n  <string name=\"save_apk_success\">АПК сачуван</string>\n  <string name=\"sign_fail\">Није успело потписивање АПК-а: %s</string>\n  <string name=\"save_logs\">Сачувај евиденције</string>\n  <string name=\"save_as_file\">Сачувај у датотеке</string>\n  <string name=\"export_patcher_logs\">Извези евиденције закрпљивача</string>\n  <string name=\"save_logs_success\">Евиденције сачуване</string>\n  <string name=\"downloader_activity_dialog_body\">Потребна је интеракција корисника да бисте наставили са овим преузимачем.</string>\n  <string name=\"select_install_type\">Изаберите тип инсталације</string>\n  <string name=\"patcher_step_group_preparing\">Припрема</string>\n  <string name=\"patcher_step_load_patches\">Учитај печеве</string>\n  <string name=\"patcher_step_unpack\">Припреми закрпу</string>\n  <string name=\"patcher_step_group_patching\">Закрпавање</string>\n  <string name=\"patcher_step_group_saving\">Чување</string>\n  <string name=\"patcher_step_write_patched\">Запишите закрпљену АПК датотеку</string>\n  <string name=\"patcher_step_sign_apk\">Потпишите закрпљену АПК датотеку</string>\n  <string name=\"patcher_notification_title\">Закрпавање у току…</string>\n  <string name=\"patcher_notification_text\">Додирните за повратак на закрпавач</string>\n  <string name=\"patcher_stop_confirm_title\">Заустави закрпавач</string>\n  <string name=\"patcher_stop_confirm_description\">Да ли сте сигурни да желите да зауставите процес закрпавања?</string>\n  <string name=\"patcher_install_in_progress\">Инсталација је у току. Молимо сачекајте</string>\n  <string name=\"execute_patches\">Извршите печеве</string>\n  <string name=\"executing_patch\">Изврши %s</string>\n  <string name=\"failed_to_execute_patch\">Није успело извршавање %s</string>\n  <string name=\"step_completed\">завршено</string>\n  <string name=\"step_failed\">неуспешно</string>\n  <string name=\"step_running\">покренуто</string>\n  <string name=\"step_waiting\">чека се</string>\n  <string name=\"expand_content\">прошири</string>\n  <string name=\"collapse_content\">скупи</string>\n  <string name=\"drag_handle\">преуреди</string>\n  <string name=\"more\">Више</string>\n  <string name=\"less\">Мање</string>\n  <string name=\"continue_\">Настави</string>\n  <string name=\"dismiss\">Одбаци</string>\n  <string name=\"view_announcement\">Погледај објаву</string>\n  <string name=\"permanent_dismiss\">Не приказуј ово поново</string>\n  <string name=\"donate\">Донација</string>\n  <string name=\"website\">Веб-сајт</string>\n  <string name=\"github\">ГитХаб</string>\n  <string name=\"contact\">Контакт</string>\n  <string name=\"license\">Лиценца</string>\n  <string name=\"source\">Извор</string>\n  <string name=\"repository\">Спремиште</string>\n  <string name=\"bundle_information_by_author\">Од стране %1$s</string>\n  <string name=\"version\">Верзија</string>\n  <string name=\"version_compatibility_warning\">Изабрана верзија можда није компатибилна са изабраним закрпама</string>\n  <string name=\"submit_feedback\">Пријавите проблем или повратну информацију</string>\n  <string name=\"submit_feedback_description\">Помозите нам да побољшамо ову апликацију</string>\n  <string name=\"developer_options\">Опције за програмере</string>\n  <string name=\"developer_options_description\">Опције за отклањање грешака</string>\n  <string name=\"patches_update_success\">Ажурирање успешно</string>\n  <string name=\"patches_update_unavailable\">Нема доступног ажурирања</string>\n  <string name=\"view_patches\">Погледајте печеве</string>\n  <string name=\"patches_view_any_version\">Било која верзија</string>\n  <string name=\"patches_view_any_package\">Било који пакет</string>\n  <string name=\"patches_delete_single_dialog_description\">Да ли сте сигурни да желите да избришете „%s“?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Да ли сте сигурни да желите да избришете одабране печеве?</string>\n  <string name=\"announcements\">Објаве</string>\n  <string name=\"archive\">Архива</string>\n  <string name=\"about_revanced_manager\">О ReVanced Manager-у</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager је Андроид апликација која користи ReVanced Patcher за закрпавање Андроид апликација. Омогућава вам да преузимате и закрпавате апликације прилагођеним печевима, и да управљате процесом закрпавања.</string>\n  <string name=\"developer_options_taps\">преостало %d додира</string>\n  <string name=\"developer_options_enabled\">Опције за програмере омогућене</string>\n  <string name=\"developer_options_already_enabled\">Опције за програмере су већ омогућене</string>\n  <string name=\"update_available\">Доступно је ажурирање</string>\n  <string name=\"current_version\">Тренутна верзија: %s</string>\n  <string name=\"new_version\">Нова верзија: %s</string>\n  <string name=\"ready_to_install_update\">Спремно за инсталацију ажурирања</string>\n  <string name=\"update_completed\">Ажурирање инсталирано</string>\n  <string name=\"install_update_manager_failed\">Није успела инсталација ажурирања</string>\n  <string name=\"manual_update_check\">Проверите ажурирања</string>\n  <string name=\"view_update\">Погледај ажурирање</string>\n  <string name=\"manual_update_check_description\">Ручно проверите ажурирања</string>\n  <string name=\"update_checking_manager\">Проверите ажурирања при покретању</string>\n  <string name=\"update_checking_manager_description\">Проверите нове верзије ReVanced Manager-а када се апликација покрене</string>\n  <string name=\"update_checking_downloader\">Провери ажурирања ReVanced преузимача при покретању</string>\n  <string name=\"update_checking_downloader_description\">Провери ажурирања инсталираних ReVanced преузимача када се апликација покрене</string>\n  <string name=\"manager_prereleases\">Користи предиздања</string>\n  <string name=\"manager_prereleases_description\">Користите верзије предиздања ReVanced Manager-а</string>\n  <string name=\"prereleases_warning\">Пре-издања могу бити нестабилна и садржати грешке. Можете доживети рушења, губитак података или друге неочекиване проблеме. Омогућите ово само ако вам одговарају ови ризици.</string>\n  <string name=\"changelog\">Погледај дневник измена</string>\n  <string name=\"changelog_loading\">Учитавање листе измена</string>\n  <string name=\"changelog_download_fail\">Није успело преузимање листе измена: %s</string>\n  <string name=\"changelog_description\">Погледајте најновије измене у овом ажурирању</string>\n  <string name=\"battery_optimization_notification\">Оптимизације батерије морају бити искључене како би ReVanced Manager исправно радио у позадини. Кликните овде да искључите оптимизације.</string>\n  <string name=\"installing_manager_update\">Инсталирање ажурирања…</string>\n  <string name=\"downloading_manager_update\">Преузимање ажурирања…</string>\n  <string name=\"download_manager_failed\">Није успело преузимање ажурирања: %s</string>\n  <string name=\"cancel\">Откажи</string>\n  <string name=\"save\">Сачувај</string>\n  <string name=\"save_with_count\">Сачувај (%1$s)</string>\n  <string name=\"update\">Ажурирај</string>\n  <string name=\"empty\">Празна</string>\n  <string name=\"installing_message\">Додирните на <b>Ажурирај</b> када будете упитани.\nReVanced Manager ће се затворити током ажурирања.</string>\n  <string name=\"no_changelogs_found\">Нису пронађене листе измена</string>\n  <string name=\"just_now\">Управо сада</string>\n  <string name=\"minutes_ago\">пре %sm</string>\n  <string name=\"hours_ago\">пре %sh</string>\n  <string name=\"days_ago\">пре %sd</string>\n  <string name=\"invalid_date\">Неисправан датум</string>\n  <string name=\"disable_battery_optimization\">Онемогући оптимизацију батерије</string>\n  <string name=\"input_dialog_value_invalid\">Неисправна вредност</string>\n  <string name=\"option_required\">Ова опција је обавезна</string>\n  <string name=\"required_options_screen\">Обавезне опције</string>\n  <string name=\"failed_to_check_updates\">Није успела провера ажурирања: %s</string>\n  <string name=\"no_update_available\">Нема доступног ажурирања</string>\n  <string name=\"no_announcements_found\">Нису пронађена обавештења</string>\n  <string name=\"update_check\">Провера ажурирања…</string>\n  <string name=\"dismiss_temporary\">Не сада</string>\n  <string name=\"update_available_dialog_description\">Доступна је нова верзија ReVanced Manager-а (%s).</string>\n  <string name=\"failed_to_download_update\">Није успело преузимање ажурирања: %s</string>\n  <string name=\"download\">Преузми</string>\n  <string name=\"download_confirmation_metered\">Тренутно сте на тарифном повезивању, и могу се применити трошкови преноса података од вашег провајдера услуга.\n\nДа ли и даље желите да наставите?</string>\n  <string name=\"download_update_confirmation\">Преузети ажурирање?</string>\n  <string name=\"no_contributors_found\">Нису пронађени сарадници</string>\n  <string name=\"select\">Изабери</string>\n  <string name=\"select_deselect_all\">Изабери или поништи избор свега</string>\n  <string name=\"select_patches_type_dialog_description\">Додајте нове печеве са УРЛ адресе или локалних датотека</string>\n  <string name=\"local_patches_description\">Додајте печеве из локалног складишта.</string>\n  <string name=\"remote_patches_description\">Додајте печеве са УРЛ адресе. Печеви се могу аутоматски ажурирати.</string>\n  <string name=\"recommended\">Препоручено</string>\n  <string name=\"installation_failed_dialog_title\">Инсталација није успела</string>\n  <string name=\"installation_cancelled_dialog_title\">Инсталација отказана</string>\n  <string name=\"installation_blocked_dialog_title\">Инсталација блокирана</string>\n  <string name=\"installation_conflict_dialog_title\">Конфликт инсталације</string>\n  <string name=\"installation_incompatible_dialog_title\">Инсталација некомпатибилна</string>\n  <string name=\"installation_invalid_dialog_title\">Инсталација неисправна</string>\n  <string name=\"installation_storage_issue_dialog_title\">Нема довољно меморије</string>\n  <string name=\"installation_timeout_dialog_title\">Инсталација истекла</string>\n  <string name=\"installation_failed_description\">Инсталација није успела због непознатог разлога. Покушати поново?</string>\n  <string name=\"installation_aborted_description\">Инсталација је ручно отказана. Покушати поново?</string>\n  <string name=\"installation_blocked_description\">Инсталација је блокирана. Проверите безбедносна подешавања уређаја и покушајте поново.</string>\n  <string name=\"installation_conflict_description\">Инсталацију је спречила постојећа инсталација апликације. Деинсталирати инсталирану апликацију и покушати поново?</string>\n  <string name=\"installation_incompatible_description\">Апликација је некомпатибилна са овим уређајем. Користите АПК који је компатибилан са овим уређајем и покушајте поново.</string>\n  <string name=\"installation_invalid_description\">Апликација је неисправна. Деинсталирати апликацију и покушати поново?</string>\n  <string name=\"installation_storage_issue_description\">Апликација није могла бити инсталирана због недовољно меморије. Ослободите простор и покушајте поново.</string>\n  <string name=\"installation_timeout_description\">Инсталација је трајала предуго. Покушати поново?</string>\n  <string name=\"reinstall\">Поново инсталирај</string>\n  <string name=\"show\">Прикажи</string>\n  <string name=\"debugging\">Отклањање грешака</string>\n  <string name=\"about_device\">О уређају</string>\n  <string name=\"enter_url\">Унесите УРЛ</string>\n  <string name=\"next\">Следеће</string>\n  <string name=\"auto_update\">Аутоматско ажурирање</string>\n  <string name=\"add_patches\">Додај печеве</string>\n  <string name=\"auto_update_description\">Аутоматски ажурирај када је доступна нова верзија</string>\n  <string name=\"patches_prereleases\">Користи предиздања</string>\n  <string name=\"patches_prereleases_description\">Користите верзије предиздања %s</string>\n  <string name=\"patches_url\">УРЛ печева</string>\n  <string name=\"incompatible_patches_dialog\">Ови печеви нису компатибилни са одабраном верзијом апликације (%1$s).\n\nКликните на печеве да бисте видели више детаља.</string>\n  <string name=\"incompatible_patch\">Некомпатибилни печ</string>\n  <string name=\"any_version\">Било који</string>\n  <string name=\"never_show_again\">Никада не приказуј поново</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Прикажи поруку о ажурирању при покретању</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Прикажи искачуће обавештење када је доступно ново ажурирање при покретању</string>\n  <string name=\"failed_to_import_keystore\">Није успео увоз спремишта кључева</string>\n  <string name=\"export\">Извези</string>\n  <string name=\"confirm\">Потврди</string>\n  <string name=\"new_announcement\">Ново обавештење:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d печ</item>\n    <item quantity=\"few\">%d печа</item>\n    <item quantity=\"other\">%d печева</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Изврши %d печ</item>\n    <item quantity=\"few\">Изврши %d печа</item>\n    <item quantity=\"other\">Изврши %d печева</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d изабран</item>\n    <item quantity=\"few\">%d изабрана</item>\n    <item quantity=\"other\">%d изабраних</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sv-rSE/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Patchverktyget</string>\n  <string name=\"patches\">Korrigeringar</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Hanterare</string>\n  <string name=\"onboarding_welcome_to\">Välkommen till</string>\n  <string name=\"onboarding_welcome_back\">Hej! Det är den nya</string>\n  <string name=\"onboarding_apps_subtitle\">Du kan välja en app att patcha nu eller göra det senare</string>\n  <string name=\"onboarding_updates_subtitle\">Konfigurera automatiska uppdateringar för att hålla ReVanced Manager och patchar uppdaterade</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager kommer att ansluta till %s för att ladda ner initiala versioner om din enhet är ansluten till internet.</string>\n  <string name=\"retry\">Försök igen</string>\n  <string name=\"onboarding_skip\">Hoppa över tills vidare</string>\n  <string name=\"onboarding_recommended_version\">Rekommenderad version: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Hoppa över behörigheter?</string>\n  <string name=\"onboarding_permissions_skip_description\">Utan de nödvändiga behörigheterna kanske vissa funktioner inte fungerar korrekt. Du kan bevilja dem senare i appinställningarna.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Hoppa över ändå</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager behöver några behörigheter för att fungera korrekt</string>\n  <string name=\"permission_install_apps\">Installera okända appar</string>\n  <string name=\"permission_install_apps_description\">Krävs för att installera korrigerade applikationer</string>\n  <string name=\"permission_notifications\">Aviseringar</string>\n  <string name=\"permission_battery\">Batterioptimering</string>\n  <string name=\"permission_battery_description\">Förhindrar att korrigering avbryts i bakgrunden</string>\n  <string name=\"permission_grant\">Bevilja</string>\n  <string name=\"downloader_host_permission_label\">Nedladdningsprogramvärd för ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Används för att kontrollera åtkomst till nedladdningsprogram för ReVanced Manager. Endast ReVanced Manager har detta.</string>\n  <string name=\"toast_copied_to_clipboard\">Kopierat!</string>\n  <string name=\"copy_to_clipboard\">Kopiera till urklipp</string>\n  <string name=\"dashboard\">Instrumentpanel</string>\n  <string name=\"settings\">Inställningar</string>\n  <string name=\"select_app\">Välj en app</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d valda</string>\n  <string name=\"fab_patch_app\">Korrigera en app</string>\n  <string name=\"fab_add_patches\">Lägg till korrigeringar</string>\n  <string name=\"new_downloader_notification\">Nya nedladdare tillgängliga. Klicka här för att konfigurera dem.</string>\n  <string name=\"unsupported_architecture_warning\">Korrigering på denna enhetsarkitektur stöds inte och kommer troligen att misslyckas.</string>\n  <string name=\"import_\">Importera</string>\n  <string name=\"import_patches\">Importera korrigeringar</string>\n  <string name=\"file_field_set\">Vald</string>\n  <string name=\"file_field_not_set\">Ej vald</string>\n  <string name=\"field_not_set\">Ej inställd</string>\n  <string name=\"patches_missing\">Saknas</string>\n  <string name=\"patches_error\">Fel</string>\n  <string name=\"patches_error_description\">Korrigeringar kunde inte läsas in. Klicka för att visa felet</string>\n  <string name=\"patches_not_downloaded\">Patchar har inte laddats ned.</string>\n  <string name=\"patches_name_default\">Korrigeringar</string>\n  <string name=\"patches_name_fallback\">Namnlös</string>\n  <string name=\"android_11_bug_dialog_title\">Android 11-fel</string>\n  <string name=\"android_11_bug_dialog_description\">Behörigheten för appinstallation måste beviljas i förväg för att undvika en fel i Android 11-systemet som negativt påverkar användarupplevelsen.</string>\n  <string name=\"no_network_toast\">Ingen internetanslutning är tillgänglig</string>\n  <string name=\"selected_app_meta_any_version\">Valfri tillgänglig version</string>\n  <string name=\"app_source_dialog_title\">Välj källa</string>\n  <string name=\"app_source_dialog_option_auto\">Automatisk</string>\n  <string name=\"app_source_dialog_option_auto_description\">Använd installerad app, sedan nedladdad APK, sedan tillgängliga nedladdningsprogram</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Inga kompatibla appar eller nedladdare tillgängliga</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Monterade appar kan inte korrigeras igen utan rotåtkomst</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Versionen %s matchar inte den föreslagna versionen</string>\n  <string name=\"patch_item_description\">Börja korrigera appen</string>\n  <string name=\"patch_selector_item\">Välj korrigeringar</string>\n  <string name=\"patch_selector_item_description\">%d korrigeringar valda</string>\n  <string name=\"patch_selection_changed_warning\">Valet av patchar har ändrats</string>\n  <string name=\"no_patches_selected\">Inga korrigeringar valda</string>\n  <string name=\"network_unavailable_warning\">Enheten är inte ansluten till internet. Nedladdningen kommer att misslyckas senare.</string>\n  <string name=\"network_metered_warning\">Du använder för närvarande en anslutning med datapriser. Dataavgifter från din internetleverantör kan tillkomma.</string>\n  <string name=\"apk_source_selector_item\">Välj källa för APK-fil</string>\n  <string name=\"apk_source_auto\">Automatiskt</string>\n  <string name=\"apk_source_auto_installed\">Automatiskt · Använder installerad APK-fil</string>\n  <string name=\"apk_source_auto_downloaded\">Automatiskt · Använder nedladdad APK</string>\n  <string name=\"apk_source_auto_downloader\">Automatisk · Använder tillgängliga nedladdare</string>\n  <string name=\"apk_source_auto_storage\">Automatisk · Välj från lagring</string>\n  <string name=\"apk_source_downloader\">Använder %s</string>\n  <string name=\"apk_source_installed\">Använder installerad APK-fil</string>\n  <string name=\"apk_source_local\">Använder en lokal APK-fil</string>\n  <string name=\"apk_source_downloaded\">Redan nedladdad</string>\n  <string name=\"legacy_import_failed\">Det gick inte att importera äldre inställningar</string>\n  <string name=\"auto_updates_dialog_title\">Konfigurera uppdateringar</string>\n  <string name=\"auto_updates_dialog_description\">Vill du att ReVanced Manager periodiskt ska söka efter uppdateringar för följande komponenter?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Patches</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Nedladdare</string>\n  <string name=\"auto_updates_dialog_note\">Dessa inställningar kan ändras senare.\n\n    ReVanced Manager kommer att ansluta till %s för att ladda ner initiala versioner om din enhet är ansluten till internet.</string>\n  <string name=\"announcements_filter_tag\">Filtrera efter tagg</string>\n  <string name=\"announcements_show_archived\">Visa arkiverade</string>\n  <string name=\"general\">Allmänt</string>\n  <string name=\"general_description\">Språk, tema, dynamisk färg</string>\n  <string name=\"updates\">Uppdateringar</string>\n  <string name=\"updates_description\">Sök efter uppdateringar och visa ändringslogg</string>\n  <string name=\"downloads\">Nedladdningar</string>\n  <string name=\"downloads_description\">Nedladdningsprogram och nedladdade appar</string>\n  <string name=\"import_export\">Importera och exportera</string>\n  <string name=\"import_export_description\">Nyckellager, korrigeringsalternativ och -urval</string>\n  <string name=\"advanced\">Avancerat</string>\n  <string name=\"advanced_description\">API-webbadress, minnesgräns, felsökning</string>\n  <string name=\"safeguards_toggled_warning\">Skyddsåtgärder har växlats</string>\n  <string name=\"about\">Om</string>\n  <string name=\"about_app_name\">Om %1$s</string>\n  <string name=\"opensource_licenses\">Licenser för öppen källkod</string>\n  <string name=\"opensource_licenses_description\">Visa alla bibliotek som används för att skapa denna applikation</string>\n  <string name=\"contributors\">Bidragsgivare</string>\n  <string name=\"contributors_description\">Visa bidragsgivarna till ReVanced</string>\n  <string name=\"dynamic_color\">Dynamisk färg</string>\n  <string name=\"dynamic_color_description\">Anpassa färger till bakgrundsbilden</string>\n  <string name=\"pure_black_theme\">Rent svart tema</string>\n  <string name=\"pure_black_theme_description\">Använd rent svarta bakgrunder för mörkt tema</string>\n  <string name=\"theme\">Tema</string>\n  <string name=\"theme_description\">Välj mellan ljust och mörkt tema</string>\n  <string name=\"language\">Språk</string>\n  <string name=\"language_description\">Välj appens visningsspråk</string>\n  <string name=\"language_system_default\">Systemstandard</string>\n  <string name=\"search_languages\">Sök efter språk …</string>\n  <string name=\"safeguards\">Skyddsåtgärder</string>\n  <string name=\"patch_compat_check\">Inaktivera kontroll av versionskompatibilitet</string>\n  <string name=\"patch_compat_check_description\">Begränsa inte korrigeringar till kompatibla appversioner</string>\n  <string name=\"patch_compat_check_confirmation\">Att välja inkompatibla korrigeringar kan orsaka fel i appen.\n\nVill du fortsätta ändå?</string>\n  <string name=\"suggested_version_safeguard\">Kräv föreslagen appversion</string>\n  <string name=\"suggested_version_safeguard_description\">Tvinga val av den föreslagna appversionen</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Om du väljer en app som inte är den föreslagna versionen kan det leda till oväntade problem.\n\nVill du fortsätta ändå?</string>\n  <string name=\"patch_selection_safeguard\">Tillåt att ändra korrigeringsurval och -alternativ</string>\n  <string name=\"patch_selection_safeguard_description\">Tillåt att markera och avmarkera korrigeringar samt att anpassa alternativ</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Om du ändrar urvalet av korrigeringar kan det leda till oväntade problem.\n\nAktivera ändå?</string>\n  <string name=\"universal_patches_safeguard\">Tillåt användning av universella korrigeringar</string>\n  <string name=\"universal_patches_safeguard_description\">Hindra inte användning av universella korrigeringar</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Universella korrigeringar är inte lika väl testade som de som är riktade till specifika appar.\n\nAktivera ändå?</string>\n  <string name=\"keystore\">Nyckellager</string>\n  <string name=\"patches_selections\">Val av korrigeringar</string>\n  <string name=\"import_keystore\">Importera nyckellager</string>\n  <string name=\"import_keystore_description\">Importera ett anpassat nyckellager</string>\n  <string name=\"import_keystore_dialog_title\">Ange nyckellageruppgifter</string>\n  <string name=\"import_keystore_dialog_description\">Du måste ange nyckellagrets uppgifter för att importera det.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Användarnamn (alias)</string>\n  <string name=\"import_keystore_dialog_password_field\">Lösenord</string>\n  <string name=\"import_keystore_dialog_button\">Importera</string>\n  <string name=\"import_keystore_wrong_credentials\">Felaktiga nyckellageruppgifter</string>\n  <string name=\"import_keystore_success\">Nyckellagret importerades</string>\n  <string name=\"export_keystore\">Exportera nyckellager</string>\n  <string name=\"export_keystore_description\">Exportera det nuvarande nyckellagret</string>\n  <string name=\"export_keystore_unavailable\">Inget nyckellager att exportera</string>\n  <string name=\"export_keystore_success\">Nyckellagret exporterades</string>\n  <string name=\"regenerate_keystore\">Återskapa nyckellager</string>\n  <string name=\"regenerate_keystore_description\">Generera ett nytt nyckellager</string>\n  <string name=\"regenerate_keystore_dialog_description\">Du är på väg att återskapa nyckellagret som Manager kommer att använda under korrigeringsprocessen.\n\nDu kommer inte att kunna uppdatera tidigare installerade appar från denna källa.</string>\n  <string name=\"regenerate_keystore_success\">Nyckellagret har ersatts</string>\n  <string name=\"import_patch_selection\">Importera korrigeringsurval</string>\n  <string name=\"import_patch_selection_description\">Importera korrigeringsurval från en JSON-fil</string>\n  <string name=\"import_patch_selection_fail\">Det gick inte att importera korrigeringsurval: %s</string>\n  <string name=\"import_patch_selection_success\">Korrigeringsurval importerades</string>\n  <string name=\"select_bundle_for_import\">Välj paket att importera till</string>\n  <string name=\"export_patch_selection\">Exportera korrigeringsurval</string>\n  <string name=\"export_patch_selection_description\">Exportera korrigeringsurval till en JSON-fil</string>\n  <string name=\"export_patch_selection_fail\">Det gick inte att exportera korrigeringsurval: %s</string>\n  <string name=\"export_patch_selection_success\">Korrigeringsurval exporterades</string>\n  <string name=\"select_bundle_for_export\">Välj paket att exportera från</string>\n  <string name=\"patch_selection_packages\">Appar med sparade val</string>\n  <string name=\"patch_selection_entries\">Totalt antal valda korrigeringar</string>\n  <string name=\"reset_configuration\">Återställ konfiguration</string>\n  <string name=\"reset_patch_selection\">Korrigeringsval</string>\n  <string name=\"reset_patch_selection_description\">Återställ de lagrade korrigeringsurvalet</string>\n  <string name=\"reset_patch_options\">Återställ korrigeringsalternativ</string>\n  <string name=\"reset_patch_options_description\">Återställ de lagrade korrigeringsalternativen</string>\n  <string name=\"reset_patch_selection_success\">Korrigeringsurval har återställts</string>\n  <string name=\"patch_selection_reset_all\">Återställ korrigeringsurval globalt</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Du är på väg att återställa alla korrigeringsurval. Du måste välja varje korrigering manuellt igen.</string>\n  <string name=\"patch_selection_reset_all_description\">Återställer alla korrigeringsurval</string>\n  <string name=\"patch_selection_reset_package\">Återställ korrigeringsurval för app</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Du är på väg att återställa korrigeringsurvalet för appen \\\"%s\\\". Du måste välja varje korrigering manuellt igen.</string>\n  <string name=\"patch_selection_reset_package_description\">Återställer korrigeringsurvalet för en enskild app</string>\n  <string name=\"patch_selection_reset_patches\">Återställ korrigeringsurval (enskilt)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Du är på väg att återställa korrigeringsurvalet för \\\"%s\\\". Du måste välja varje korrigering manuellt igen.</string>\n  <string name=\"patch_selection_reset_patches_description\">Återställer korrigeringsurvalet för en specifik samling korrigeringar</string>\n  <string name=\"patch_options_reset_package\">Återställ korrigeringsalternativ för app</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Du är på väg att återställa korrigeringsalternativen för appen \\\"%s\\\". Du måste tillämpa varje alternativ igen.</string>\n  <string name=\"patch_options_reset_package_description\">Återställer korrigeringsalternativ för en enskild app</string>\n  <string name=\"patch_options_reset_patches\">Återställ korrigeringsalternativ (enskilt)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Du är på väg att återställa korrigeringsalternativen för \\\"%s\\\". Du måste tillämpa varje alternativ igen.</string>\n  <string name=\"patch_options_reset_patches_description\">Återställer korrigeringsalternativen för en specifik samling korrigeringar</string>\n  <string name=\"patch_options_reset_all\">Återställ korrigeringsalternativ globalt</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Du är på väg att återställa alla korrigeringsalternativ. Du måste tillämpa varje alternativ igen.</string>\n  <string name=\"patch_options_reset_all_description\">Återställer alla korrigeringsalternativ</string>\n  <string name=\"downloaders\">Nedladdningsprogram</string>\n  <string name=\"downloader_prereleases\">Använd förhandsversioner</string>\n  <string name=\"downloader_prereleases_description\">Använd förhandsversioner av den primära nedladdaren</string>\n  <string name=\"downloader_state_loaded\">Laddad</string>\n  <string name=\"downloader_state_failed\">Det gick att inte läsa in. Klicka för mer information</string>\n  <string name=\"downloader_state_missing\">Saknas</string>\n  <string name=\"downloader_delete_apps_title\">Ta bort valda appar</string>\n  <string name=\"downloader_delete_apps_description\">Är du säker på att du vill ta bort de valda apparna?</string>\n  <string name=\"downloader_delete_single_description\">Är du säker på att du vill ta bort \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Inga nedladdade appar hittades.</string>\n  <string name=\"downloader_settings_no_apps_description\">Appar nedladdade via ReVanced Manager visas här.</string>\n  <string name=\"downloader_url\">Nedladdare-URL</string>\n  <string name=\"downloader_add\">Lägg till nedladdare</string>\n  <string name=\"select_downloader_type_dialog_description\">Lägg till nya nedladdare från webbadress eller lokala filer</string>\n  <string name=\"local_downloaders_description\">Lägg till nedladdare från lokal lagring.</string>\n  <string name=\"remote_downloaders_description\">Lägg till nedladdare från webbadress. Kan uppdateras automatiskt.</string>\n  <string name=\"install_revanced_downloaders\">Installera nedladdare för att få appar direkt i ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Installera ReVanced-nedladdare</string>\n  <string name=\"cancel_downloader_install_title\">Avbryt installationen av nedladdare?</string>\n  <string name=\"cancel_downloader_install_description\">En installation av nedladdare pågår. Om du lämnar nu kommer nedladdningen att avbrytas.</string>\n  <string name=\"downloader_sources_unavailable_title\">Dessa nedladdare saknas</string>\n  <string name=\"downloader_sources_unavailable_description\">Klicka på uppdateringsknappen för att åtgärda det.</string>\n  <string name=\"downloader_update_failed\">Det gick inte att uppdatera nedladdaren: %s</string>\n  <string name=\"downloader_replace_fail\">Det gick inte att importera nedladdaren: %s</string>\n  <string name=\"search_apps\">Sök efter appar …</string>\n  <string name=\"loading_body\">Läser in …</string>\n  <string name=\"downloading_patches\">Laddar ned korrigeringar …</string>\n  <string name=\"options\">Alternativ</string>\n  <string name=\"ok\">OK</string>\n  <string name=\"yes\">Ja</string>\n  <string name=\"no\">Nej</string>\n  <string name=\"edit\">Redigera</string>\n  <string name=\"dialog_input_placeholder\">Värde</string>\n  <string name=\"reset\">Återställ</string>\n  <string name=\"share\">Dela</string>\n  <string name=\"patch\">Korrigera</string>\n  <string name=\"select_from_storage\">Välj från lagring</string>\n  <string name=\"select_from_storage_description\">Välj en APK-fil från lagring med filväljaren</string>\n  <string name=\"suggested_version_info\">Föreslagen version: %s</string>\n  <string name=\"type_anything\">Skriv något för att fortsätta</string>\n  <string name=\"search\">Sök efter korrigeringar …</string>\n  <string name=\"apply\">Tillämpa</string>\n  <string name=\"help\">Hjälp</string>\n  <string name=\"back\">Tillbaka</string>\n  <string name=\"warning\">Varning</string>\n  <string name=\"add\">Lägg till</string>\n  <string name=\"enable\">Aktivera</string>\n  <string name=\"disable\">Inaktivera</string>\n  <string name=\"close\">Stäng</string>\n  <string name=\"clear\">Rensa</string>\n  <string name=\"system\">System</string>\n  <string name=\"light\">Ljust</string>\n  <string name=\"dark\">Mörkt</string>\n  <string name=\"appearance\">Utseende</string>\n  <string name=\"networking\">Nätverk</string>\n  <string name=\"allow_metered_networks\">Tillåt nätverk med datapriser</string>\n  <string name=\"allow_metered_networks_description\">Tillåter automatiska uppdateringar på nätverk med datapriser.\n    Applikationen kan fortfarande varna om nätverk med datapriser för manuella åtgärder.</string>\n  <string name=\"downloaded_apps\">Nedladdade appar</string>\n  <string name=\"process_runtime\">Kör Patcher i en annan process (experimentellt)</string>\n  <string name=\"process_runtime_description\">Detta är snabbare och låter Patcher använda mer minne</string>\n  <string name=\"process_runtime_memory_limit\">Minnesgräns för Patcher-process</string>\n  <string name=\"process_runtime_memory_limit_description\">Den maximala mängden minne som Patcher-processen kan använda</string>\n  <string name=\"debug_logs_export\">Exportera felsökningsloggar</string>\n  <string name=\"debug_logs_export_read_failed\">Det gick inte att läsa loggarna (utgångskod %d)</string>\n  <string name=\"debug_logs_export_failed\">Det gick inte att exportera loggarna</string>\n  <string name=\"debug_logs_export_success\">Loggarna exporterades</string>\n  <string name=\"api_url\">API-webbadress</string>\n  <string name=\"api_url_description\">API:et som används för att ladda ned nödvändiga filer</string>\n  <string name=\"api_url_dialog_title\">Ändra API-webbadress</string>\n  <string name=\"api_url_dialog_description\">Ändra API-webbadressen för ReVanced Manager. ReVanced Manager använder API:et för att ladda ned korrigeringar och uppdateringar.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager ansluter till API:et för att ladda ned korrigeringar och uppdateringar. Se till att du litar på det.</string>\n  <string name=\"api_url_dialog_save\">Ange</string>\n  <string name=\"api_url_dialog_reset\">Återställ API-webbadress</string>\n  <string name=\"device\">Enhet</string>\n  <string name=\"device_android_version\">Android-version</string>\n  <string name=\"device_model\">Modell</string>\n  <string name=\"device_architectures\">CPU-arkitekturer</string>\n  <string name=\"device_memory_limit\">Minnesgränser</string>\n  <string name=\"device_memory_limit_format\">%1$d MB (normal) – %2$d MB (stor)</string>\n  <string name=\"patches_force_download\">Tvinga nedladdning av alla korrigeringar</string>\n  <string name=\"patches_reset\">Återställ korrigeringar</string>\n  <string name=\"reset_onboarding\">Återställ introduktion</string>\n  <string name=\"reset_onboarding_description\">Visa introduktionsskärmen vid nästa appstart</string>\n  <string name=\"patching\">Korrigering</string>\n  <string name=\"signing\">Signerar</string>\n  <string name=\"storage\">Lagring</string>\n  <string name=\"no_patch_found\">Ingen korrigering kunde hittas. Kontrollera dina korrigeringar</string>\n  <string name=\"tab_apps\">Appar</string>\n  <string name=\"tab_patches\">Korrigeringar</string>\n  <string name=\"delete\">Ta bort</string>\n  <string name=\"refresh\">Uppdatera</string>\n  <string name=\"continue_anyways\">Fortsätt ändå</string>\n  <string name=\"download_another_version\">Ladda ned en annan version</string>\n  <string name=\"download_app\">Ladda ned app</string>\n  <string name=\"download_apk\">Ladda ned APK-fil</string>\n  <string name=\"patches_download_fail\">Det gick inte att ladda ned korrigeringar: %s</string>\n  <string name=\"api_not_working_title\">API-tjänsten är för närvarande nere</string>\n  <string name=\"api_not_working_description\">Vissa funktioner kan påverkas. Kontrollera din anslutning eller API-URL i inställningarna.</string>\n  <string name=\"patches_replace_fail\">Det gick inte att importera korrigeringar: %s</string>\n  <string name=\"no_patched_apps_found\">Inga korrigerade appar hittades</string>\n  <string name=\"no_patched_apps_description\">Du har för närvarande inga korrigerade appar som vi känner till. Ändra det genom att korrigera din första app!</string>\n  <string name=\"patched_apps_section_title\">Patchade appar</string>\n  <string name=\"patchable_apps_section_title\">Appar som kan patchas</string>\n  <string name=\"no_patches_found\">Inga korrigeringar hittades</string>\n  <string name=\"no_patches_description\">Du har inga korrigeringar ännu. Lägg till korrigeringar genom att trycka på knappen nedan!</string>\n  <string name=\"tap_on_patches\">Tryck på korrigeringarna för att få mer information om dem</string>\n  <string name=\"patches_selected\">%s valda</string>\n  <string name=\"incompatible_patches\">Inkompatibla korrigeringar</string>\n  <string name=\"universal_patches\">Universella korrigeringar</string>\n  <string name=\"patch_selection_reset_toast\">Korrigeringsurval och -alternativ har återställts till de rekommenderade standardinställningarna</string>\n  <string name=\"patch_options_reset_toast\">Korrigeringsalternativ har återställts</string>\n  <string name=\"non_suggested_version_warning_title\">Ej föreslagen version</string>\n  <string name=\"non_suggested_version_warning_description\">Den version av appen du har valt matchar inte den föreslagna versionen.\nAnvänd den föreslagna versionen: %s\n\nOm du ändå vill fortsätta inaktiverar du \\\"Kräv föreslagen appversion\\\" i de avancerade inställningarna.</string>\n  <string name=\"selection_warning_title\">Sluta använda standardinställningarna?</string>\n  <string name=\"selection_warning_description\">Vi rekommenderar att du använder standardkorrigeringarna och standardalternativen. Om du ändrar dem kan det leda till oväntade problem.\n\nDu måste aktivera \\\"Tillåt att ändra korrigeringsurval och -alternativ\\\" i de avancerade inställningarna innan du kan markera eller avmarkera patchar.</string>\n  <string name=\"universal_patch_warning_description\">Universella korrigeringar har en mer generaliserad användning och fungerar inte lika tillförlitligt som korrigeringar som är riktade till specifika appar. Du kan stöta på problem när du använder dem.\n\nDu måste aktivera \\\"Tillåt användning av universella korrigeringar\\\" i de avancerade inställningarna innan du använder universella korrigeringar.</string>\n  <string name=\"this_version\">Denna version</string>\n  <string name=\"universal\">Alla appar</string>\n  <string name=\"search_patches\">Sök efter korrigeringar</string>\n  <string name=\"app_version_not_compatible\">Denna korrigering är inte kompatibel med den valda appversionen (%1$s)\n\nDen är endast kompatibel med följande version(er): %2$s</string>\n  <string name=\"continue_with_version\">Fortsätt med denna version?</string>\n  <string name=\"version_not_compatible\">Alla korrigeringar är inte kompatibla med denna version (%s). Vill du fortsätta ändå?</string>\n  <string name=\"download_application\">Ladda ned applikation?</string>\n  <string name=\"app_not_installed\">Appen du valde är inte installerad. Vill du ladda ned den?</string>\n  <string name=\"failed_to_load_apk\">Det gick inte att läsa in APK-filen</string>\n  <string name=\"split_apk_not_supported\">Delade APK:er kan inte patchas</string>\n  <string name=\"loading\">Läser in …</string>\n  <string name=\"not_installed\">Inte installerad</string>\n  <string name=\"installed\">Installerad</string>\n  <string name=\"app_info\">Appinformation</string>\n  <string name=\"uninstall\">Avinstallera</string>\n  <string name=\"unpatch\">Ta bort korrigeringar</string>\n  <string name=\"repatch\">Korrigera igen</string>\n  <string name=\"install_type\">Installationstyp</string>\n  <string name=\"package_name\">Paketnamn</string>\n  <string name=\"original_package_name\">Ursprungligt paketnamn</string>\n  <string name=\"applied_patches\">Tillämpade korrigeringar</string>\n  <string name=\"view_applied_patches\">Visa tillämpade korrigeringar</string>\n  <string name=\"default_install\">Standard</string>\n  <string name=\"mount_install\">Montering</string>\n  <string name=\"mounted\">Monterad</string>\n  <string name=\"not_mounted\">Ej monterad</string>\n  <string name=\"mount\">Montering</string>\n  <string name=\"unmount\">Avmontera</string>\n  <string name=\"failed_to_mount\">Det gick inte att montera: %s</string>\n  <string name=\"failed_to_unmount\">Det gick inte att avmontera: %s</string>\n  <string name=\"unpatch_app\">Ta bort korrigeringarna från appen?</string>\n  <string name=\"unpatch_description\">Är du säker på att du vill ta bort korrigeringarna från den här appen?</string>\n  <string name=\"downloader_invalid_version\">Nedladdaren hämtade inte rätt version</string>\n  <string name=\"downloader_app_not_found\">Nedladdaren hittade inte appen</string>\n  <string name=\"downloader_error\">Nedladdningsfel: %s</string>\n  <string name=\"no_downloaders_installed\">Inga appnedladdare är installerade!</string>\n  <string name=\"no_downloaders_trusted\">Inga appnedladdare har betrotts! Kontrollera dina inställningar.</string>\n  <string name=\"already_patched\">Redan korrigerad</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filtrera</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Kompatibilitet</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paket</string>\n  <string name=\"patch_selector_sheet_actions_title\">Åtgärder</string>\n  <string name=\"restore_default_selection\">Återställ standardpatcharna</string>\n  <string name=\"deselect_all\">Avmarkera alla</string>\n  <string name=\"invert_selection\">Invertera markering</string>\n  <string name=\"deselect_all_except\">Avmarkera allt utom %s</string>\n  <string name=\"scope_dialog_title\">Tillämpa på</string>\n  <string name=\"scope_all_patches\">Alla korrigeringar</string>\n  <string name=\"scope_bundle_patches\">Endast %s</string>\n  <string name=\"string_option_menu_description\">Fler alternativ</string>\n  <string name=\"option_preset_custom_value\">Anpassat värde</string>\n  <string name=\"path_selector\">Välj från lagring</string>\n  <string name=\"path_selector_parent_dir\">Föregående katalog</string>\n  <string name=\"path_selector_dirs\">Kataloger</string>\n  <string name=\"path_selector_files\">Filer</string>\n  <string name=\"show_password_field\">Visa lösenord</string>\n  <string name=\"hide_password_field\">Dölj lösenord</string>\n  <string name=\"installer\">Installerare</string>\n  <string name=\"install_app\">Installera</string>\n  <string name=\"install_app_success\">Appen installerades</string>\n  <string name=\"install_app_fail\">Det gick inte att installera appen: %s</string>\n  <string name=\"reinstall_app_fail\">Det gick inte att installera om appen: %s</string>\n  <string name=\"uninstall_app_fail\">Det gick inte att avinstallera appen: %s</string>\n  <string name=\"open_app\">Öppna</string>\n  <string name=\"save_apk\">Spara APK-fil</string>\n  <string name=\"save_apk_success\">APK-filen sparades</string>\n  <string name=\"sign_fail\">Det gick inte att signera APK-filen: %s</string>\n  <string name=\"save_logs\">Spara loggar</string>\n  <string name=\"save_as_file\">Spara till filer</string>\n  <string name=\"export_patcher_logs\">Exportera patcherloggar</string>\n  <string name=\"save_logs_success\">Loggar sparade</string>\n  <string name=\"downloader_activity_dialog_body\">Användarinteraktion krävs för att fortsätta med detta nedladdningsprogram.</string>\n  <string name=\"select_install_type\">Välj installationstyp</string>\n  <string name=\"patcher_step_group_preparing\">Förberedning</string>\n  <string name=\"patcher_step_load_patches\">Läs in korrigeringar</string>\n  <string name=\"patcher_step_unpack\">Förbered Patcher</string>\n  <string name=\"patcher_step_group_patching\">Korrigering</string>\n  <string name=\"patcher_step_group_saving\">Sparning</string>\n  <string name=\"patcher_step_write_patched\">Skriv korrigerad APK-fil</string>\n  <string name=\"patcher_step_sign_apk\">Signera korrigerad APK-fil</string>\n  <string name=\"patcher_notification_title\">Korrigering pågår …</string>\n  <string name=\"patcher_notification_text\">Tryck för att återgå till Patcher</string>\n  <string name=\"patcher_stop_confirm_title\">Stoppa Patcher</string>\n  <string name=\"patcher_stop_confirm_description\">Är du säker på att du vill stoppa korrigeringsprocessen?</string>\n  <string name=\"patcher_install_in_progress\">Installation pågår. Vänta</string>\n  <string name=\"execute_patches\">Kör korrigeringar</string>\n  <string name=\"executing_patch\">Kör %s</string>\n  <string name=\"failed_to_execute_patch\">Det gick inte att köra %s</string>\n  <string name=\"step_completed\">slutförd</string>\n  <string name=\"step_failed\">misslyckades</string>\n  <string name=\"step_running\">körs</string>\n  <string name=\"step_waiting\">väntar</string>\n  <string name=\"expand_content\">utvidga</string>\n  <string name=\"collapse_content\">fäll ihop</string>\n  <string name=\"drag_handle\">omordna</string>\n  <string name=\"more\">Mer</string>\n  <string name=\"less\">Mindre</string>\n  <string name=\"continue_\">Fortsätt</string>\n  <string name=\"dismiss\">Ignorera</string>\n  <string name=\"view_announcement\">Visa meddelande</string>\n  <string name=\"permanent_dismiss\">Visa inte detta igen</string>\n  <string name=\"donate\">Donera</string>\n  <string name=\"website\">Webbplats</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Kontakt</string>\n  <string name=\"license\">Licens</string>\n  <string name=\"source\">Källa</string>\n  <string name=\"repository\">Databas</string>\n  <string name=\"bundle_information_by_author\">Av %1$s</string>\n  <string name=\"version\">Version</string>\n  <string name=\"version_compatibility_warning\">Vald version kan vara inkompatibel med valda patchar</string>\n  <string name=\"submit_feedback\">Skicka ärende eller feedback</string>\n  <string name=\"submit_feedback_description\">Hjälp oss att förbättra denna applikation</string>\n  <string name=\"developer_options\">Utvecklaralternativ</string>\n  <string name=\"developer_options_description\">Alternativ för att felsöka problem</string>\n  <string name=\"patches_update_success\">Uppdatering lyckades</string>\n  <string name=\"patches_update_unavailable\">Ingen uppdatering tillgänglig</string>\n  <string name=\"view_patches\">Visa korrigeringar</string>\n  <string name=\"patches_view_any_version\">Valfri version</string>\n  <string name=\"patches_view_any_package\">Valfritt paket</string>\n  <string name=\"patches_delete_single_dialog_description\">Är du säker på att du vill ta bort \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Är du säker på att du vill ta bort de valda korrigeringarna?</string>\n  <string name=\"announcements\">Meddelanden</string>\n  <string name=\"archive\">Arkiv</string>\n  <string name=\"about_revanced_manager\">Om ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager är en Android-app som använder ReVanced Patcher för att korrigera Android-appar. Den låter dig ladda ned och korrigera appar med anpassade korrigeringar och hantera korrigeringsprocessen.</string>\n  <string name=\"developer_options_taps\">%d tryck kvar</string>\n  <string name=\"developer_options_enabled\">Utvecklaralternativ aktiverade</string>\n  <string name=\"developer_options_already_enabled\">Utvecklaralternativ är redan aktiverade</string>\n  <string name=\"update_available\">En uppdatering är tillgänglig</string>\n  <string name=\"current_version\">Nuvarande version: %s</string>\n  <string name=\"new_version\">Ny version: %s</string>\n  <string name=\"ready_to_install_update\">Redo att installera uppdateringen</string>\n  <string name=\"update_completed\">Uppdatering installerad</string>\n  <string name=\"install_update_manager_failed\">Det gick inte att installera uppdateringen</string>\n  <string name=\"manual_update_check\">Sök efter uppdateringar</string>\n  <string name=\"view_update\">Visa uppdatering</string>\n  <string name=\"manual_update_check_description\">Sök manuellt efter uppdateringar</string>\n  <string name=\"update_checking_manager\">Sök efter uppdateringar vid start</string>\n  <string name=\"update_checking_manager_description\">Sök efter nya versioner av ReVanced Manager när applikationen startas</string>\n  <string name=\"update_checking_downloader\">Sök efter uppdateringar för ReVanced-nedladdare vid start</string>\n  <string name=\"update_checking_downloader_description\">Sök efter uppdateringar för installerade ReVanced-nedladdare när applikationen startar</string>\n  <string name=\"manager_prereleases\">Använd förhandsversioner</string>\n  <string name=\"manager_prereleases_description\">Använd förhandsversioner av ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Förhandsversioner kan vara instabila och innehålla buggar. Du kan uppleva krascher, dataförlust eller andra oväntade problem. Aktivera detta endast om du är bekväm med dessa risker.</string>\n  <string name=\"changelog\">Visa ändringslogg</string>\n  <string name=\"changelog_loading\">Läser in ändringslogg</string>\n  <string name=\"changelog_download_fail\">Det gick inte att ladda ned ändringsloggen: %s</string>\n  <string name=\"changelog_description\">Kolla in de senaste ändringarna i den här uppdateringen</string>\n  <string name=\"battery_optimization_notification\">Batterioptimeringar måste stängas av för att ReVanced Manager ska fungera korrekt i bakgrunden. Klicka här för att stänga av optimeringar.</string>\n  <string name=\"installing_manager_update\">Installerar uppdatering …</string>\n  <string name=\"downloading_manager_update\">Laddar ned uppdatering …</string>\n  <string name=\"download_manager_failed\">Det gick inte att ladda ned uppdateringen: %s</string>\n  <string name=\"cancel\">Avbryt</string>\n  <string name=\"save\">Spara</string>\n  <string name=\"save_with_count\">Spara (%1$s)</string>\n  <string name=\"update\">Uppdatera</string>\n  <string name=\"empty\">Tom</string>\n  <string name=\"installing_message\">Tryck på <b>Uppdatera</b> när du blir ombedd.\\nReVanced Manager stängs när den uppdateras.</string>\n  <string name=\"no_changelogs_found\">Inga ändringsloggar hittades</string>\n  <string name=\"just_now\">Just nu</string>\n  <string name=\"minutes_ago\">för %s min. sedan</string>\n  <string name=\"hours_ago\">för %s tim. sedan</string>\n  <string name=\"days_ago\">för %s dgr sedan</string>\n  <string name=\"invalid_date\">Ogiltigt datum</string>\n  <string name=\"disable_battery_optimization\">Inaktivera batterioptimering</string>\n  <string name=\"input_dialog_value_invalid\">Ogiltigt värde</string>\n  <string name=\"option_required\">Det här alternativet krävs</string>\n  <string name=\"required_options_screen\">Obligatoriska alternativ</string>\n  <string name=\"failed_to_check_updates\">Det gick inte att söka efter uppdateringar: %s</string>\n  <string name=\"no_update_available\">Ingen uppdatering tillgänglig</string>\n  <string name=\"no_announcements_found\">Inga meddelanden hittades</string>\n  <string name=\"update_check\">Söker efter uppdateringar …</string>\n  <string name=\"dismiss_temporary\">Inte nu</string>\n  <string name=\"update_available_dialog_description\">En ny version av ReVanced Manager (%s) är tillgänglig.</string>\n  <string name=\"failed_to_download_update\">Det gick inte att ladda ned uppdateringen: %s</string>\n  <string name=\"download\">Ladda ned</string>\n  <string name=\"download_confirmation_metered\">Du använder för närvarande en anslutning med datapriser, och dataavgifter från din internetleverantör kan tillkomma.\n\nVill du ändå fortsätta?</string>\n  <string name=\"download_update_confirmation\">Ladda ned uppdatering?</string>\n  <string name=\"no_contributors_found\">Inga bidragsgivare hittades</string>\n  <string name=\"select\">Välj</string>\n  <string name=\"select_deselect_all\">Markera eller avmarkera alla</string>\n  <string name=\"select_patches_type_dialog_description\">Lägg till nya korrigeringar från webbadress eller lokala filer</string>\n  <string name=\"local_patches_description\">Lägg till korrigeringar från lokal lagring.</string>\n  <string name=\"remote_patches_description\">Lägg till korrigeringar från webbadress. Korrigeringar kan uppdateras automatiskt.</string>\n  <string name=\"recommended\">Rekommenderas</string>\n  <string name=\"installation_failed_dialog_title\">Installationen misslyckades</string>\n  <string name=\"installation_cancelled_dialog_title\">Installationen avbröts</string>\n  <string name=\"installation_blocked_dialog_title\">Installationen blockerades</string>\n  <string name=\"installation_conflict_dialog_title\">Installationskonflikt</string>\n  <string name=\"installation_incompatible_dialog_title\">Installationen inkompatibel</string>\n  <string name=\"installation_invalid_dialog_title\">Installationen är ogiltig</string>\n  <string name=\"installation_storage_issue_dialog_title\">Inte tillräckligt med lagringsutrymme</string>\n  <string name=\"installation_timeout_dialog_title\">Installationen överskred tidsgränsen</string>\n  <string name=\"installation_failed_description\">Installationen misslyckades på grund av okänd anledning. Försök igen?</string>\n  <string name=\"installation_aborted_description\">Installationen avbröts manuellt. Försök igen?</string>\n  <string name=\"installation_blocked_description\">Installationen blockerades. Granska enhetens säkerhetsinställningar och försök igen.</string>\n  <string name=\"installation_conflict_description\">Installationen förhindrades av en befintlig installation av appen. Avinstallera den installerade appen och försök igen?</string>\n  <string name=\"installation_incompatible_description\">Appen är inkompatibel med den här enheten. Använd en APK-fil som är kompatibel med den här enheten och försök igen.</string>\n  <string name=\"installation_invalid_description\">Appen är ogiltig. Avinstallera appen och försök igen?</string>\n  <string name=\"installation_storage_issue_description\">Appen kunde inte installeras på grund av otillräckligt lagringsutrymme. Frigör utrymme och försök igen.</string>\n  <string name=\"installation_timeout_description\">Installationen tog för lång tid. Försök igen?</string>\n  <string name=\"reinstall\">Installera om</string>\n  <string name=\"show\">Visa</string>\n  <string name=\"debugging\">Felsökning</string>\n  <string name=\"about_device\">Om enheten</string>\n  <string name=\"enter_url\">Ange webbadress</string>\n  <string name=\"next\">Nästa</string>\n  <string name=\"auto_update\">Automatisk uppdatering</string>\n  <string name=\"add_patches\">Lägg till korrigeringar</string>\n  <string name=\"auto_update_description\">Uppdatera automatiskt när en ny version är tillgänglig</string>\n  <string name=\"patches_prereleases\">Använd förhandsversioner</string>\n  <string name=\"patches_prereleases_description\">Använd förhandsversioner av %s</string>\n  <string name=\"patches_url\">Webbadress för korrigeringar</string>\n  <string name=\"incompatible_patches_dialog\">Dessa korrigeringar är inte kompatibla med den valda appversionen (%1$s).\n\nKlicka på korrigeringarna för att se mer information.</string>\n  <string name=\"incompatible_patch\">Inkompatibel korrigering</string>\n  <string name=\"any_version\">Valfri</string>\n  <string name=\"never_show_again\">Visa aldrig igen</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Visa uppdateringsmeddelande vid start</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Visa ett popup-meddelande när en ny uppdatering är tillgänglig vid start</string>\n  <string name=\"failed_to_import_keystore\">Det gick inte att importera nyckellagret</string>\n  <string name=\"export\">Exportera</string>\n  <string name=\"confirm\">Bekräfta</string>\n  <string name=\"new_announcement\">Nytt meddelande:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d korrigering</item>\n    <item quantity=\"other\">%d korrigeringar</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Kör %d korrigering</item>\n    <item quantity=\"other\">Kör %d korrigeringar</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d vald</item>\n    <item quantity=\"other\">%d valda</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-sw-rKE/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">Kirekebisha</string>\n  <string name=\"onboarding_welcome_to\">Karibu</string>\n  <string name=\"onboarding_welcome_back\">Hujambo! Hii ndiyo mpya</string>\n  <string name=\"onboarding_apps_subtitle\">Unaweza kuchagua programu ya kurekebisha sasa au ufanye baadaye</string>\n  <string name=\"onboarding_updates_subtitle\">Sanidi masasisho ya kiotomatiki ili kuweka ReVanced Manager na marekebisho yakiwa ya kisasa</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager itaunganisha kwenye %s ili kupakua matoleo ya awali ikiwa kifaa chako kimeunganishwa kwenye intaneti.</string>\n  <string name=\"retry\">Jaribu tena</string>\n  <string name=\"onboarding_skip\">Ruka kwa sasa</string>\n  <string name=\"onboarding_recommended_version\">Toleo linalopendekezwa: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Kuruka ruhusa?</string>\n  <string name=\"onboarding_permissions_skip_description\">Bila ruhusa zinazohitajika, baadhi ya vipengele huenda visifanye kazi vizuri. Unaweza kuzipa ruhusa hizo baadaye katika mipangilio ya programu.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Ruka hata hivyo</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager inahitaji ruhusa chache ili kufanya kazi vizuri</string>\n  <string name=\"permission_install_apps\">Sakinisha programu zisizojulikana</string>\n  <string name=\"permission_install_apps_description\">Inahitajika kusakinisha programu zilizorekebishwa</string>\n  <string name=\"permission_notifications\">Arifa</string>\n  <string name=\"permission_battery\">Uboreshaji wa betri</string>\n  <string name=\"permission_battery_description\">Inazuia urekebishaji kusiingiliwe chinichini</string>\n  <string name=\"permission_grant\">Ruhusu</string>\n  <string name=\"downloader_host_permission_label\">Mwenyeji wa kipakua cha ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Inatumika kudhibiti ufikiaji wa vipakua vya ReVanced Manager. Ni ReVanced Manager pekee ndiye anayemiliki hii.</string>\n  <string name=\"fab_patch_app\">Rekebisha programu</string>\n  <string name=\"fab_add_patches\">Ongeza marekebisho</string>\n  <string name=\"new_downloader_notification\">Kipakuzi kipya kinapatikana. Bofya hapa ili kukisanidi.</string>\n  <string name=\"patches_not_downloaded\">Viraka havijapakuliwa.</string>\n  <string name=\"app_source_dialog_option_auto_description\">Tumia programu iliyosakinishwa, kisha APK iliyopakuliwa, kisha vipakuzi vinavyopatikana</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Hakuna programu au vipakuzi vinavyopatikana vinavyooana</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Programu zilizowekwa haziwezi kurekebishwa tena bila ruhusa ya root</string>\n  <string name=\"patch_selector_item\">Chagua marekebisho</string>\n  <string name=\"patch_selector_item_description\">marekebisho %d yamechaguliwa</string>\n  <string name=\"patch_selection_changed_warning\">Uteuzi wa viraka umebadilishwa</string>\n  <string name=\"apk_source_selector_item\">Chagua chanzo cha APK</string>\n  <string name=\"apk_source_auto\">Otomatiki</string>\n  <string name=\"apk_source_auto_installed\">Otomatiki · Inatumia APK iliyosakinishwa</string>\n  <string name=\"apk_source_auto_downloaded\">Otomatiki · Inatumia APK iliyopakuliwa</string>\n  <string name=\"apk_source_auto_downloader\">Kiotomatiki · Kutumia vipakua vilivyopo</string>\n  <string name=\"apk_source_auto_storage\">Kiotomatiki · Chagua kutoka hifadhi</string>\n  <string name=\"apk_source_downloaded\">Imepakuliwa tayari</string>\n  <string name=\"auto_updates_dialog_description\">Je, unataka ReVanced Manager iangalie masasisho mara kwa mara kwa vipengele vifuatavyo?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Marekebisho ya ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Vipakuzi</string>\n  <string name=\"auto_updates_dialog_note\">Mipangilio hii inaweza kubadilishwa baadaye.\n\n    ReVanced Manager itaunganisha kwenye %s ili kupakua matoleo ya awali ikiwa kifaa chako kimeunganishwa kwenye intaneti.</string>\n  <string name=\"announcements_filter_tag\">Chuja kwa lebo</string>\n  <string name=\"announcements_show_archived\">Onyesha yaliyohifadhiwa</string>\n  <string name=\"updates_description\">Angalia masasisho na uone orodha ya mabadiliko</string>\n  <string name=\"downloads_description\">Wapakuzi na programu zilizopakuliwa</string>\n  <string name=\"safeguards_toggled_warning\">Kinga zimewezeshwa/kulemazwa</string>\n  <string name=\"about_app_name\">Kuhusu %1$s</string>\n  <string name=\"search_languages\">Tafuta lugha…</string>\n  <string name=\"keystore\">Keystore</string>\n  <string name=\"patches_selections\">Chagua marekebisho</string>\n  <string name=\"select_bundle_for_import\">Chagua kifurushi cha kuingiza</string>\n  <string name=\"select_bundle_for_export\">Chagua kifurushi cha kutoa kutoka</string>\n  <string name=\"patch_selection_packages\">Programu zenye chaguo zilizohifadhiwa</string>\n  <string name=\"patch_selection_entries\">Jumla ya marekebisho yaliyochaguliwa</string>\n  <string name=\"reset_configuration\">Weka upya usanidi</string>\n  <string name=\"reset_patch_selection\">Chaguzi za marekebisho</string>\n  <string name=\"reset_patch_options\">Chaguo za marekebisho</string>\n  <string name=\"downloaders\">Wapakuzi</string>\n  <string name=\"downloader_prereleases\">Tumia matoleo ya awali</string>\n  <string name=\"downloader_prereleases_description\">Tumia matoleo ya awali ya kipakuzi kikuu</string>\n  <string name=\"downloader_state_loaded\">Imepakiwa</string>\n  <string name=\"downloader_state_failed\">Imeshindwa kupakia. Bofya kwa maelezo zaidi</string>\n  <string name=\"downloader_state_missing\">Haipo</string>\n  <string name=\"downloader_delete_apps_title\">Futa programu zilizochaguliwa</string>\n  <string name=\"downloader_delete_apps_description\">Una uhakika unataka kufuta programu zilizochaguliwa?</string>\n  <string name=\"downloader_delete_single_description\">Je, una uhakika unataka kufuta \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps_description\">Programu zilizopakuliwa kupitia ReVanced Manager zitaonekana hapa.</string>\n  <string name=\"downloader_url\">URL ya kipakuaji</string>\n  <string name=\"downloader_add\">Ongeza Kipakuaji</string>\n  <string name=\"select_downloader_type_dialog_description\">Ongeza vipakuaji vipya kutoka URL au faili za ndani</string>\n  <string name=\"local_downloaders_description\">Ongeza vipakuaji kutoka hifadhi ya ndani.</string>\n  <string name=\"remote_downloaders_description\">Ongeza vipakuaji kutoka URL. Inaweza kusasishwa kiotomatiki.</string>\n  <string name=\"install_revanced_downloaders\">Sakinisha vipakuzi ili kupata programu moja kwa moja ndani ya ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Sakinisha Vipakuzi vya ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Ghairi usakinishaji wa vipakuzi?</string>\n  <string name=\"cancel_downloader_install_description\">Usakinishaji wa vipakuzi unaendelea. Ukiondoka sasa, upakuaji utaghairiwa.</string>\n  <string name=\"downloader_sources_unavailable_title\">Vipakuaji hivi vinakosekana</string>\n  <string name=\"downloader_sources_unavailable_description\">Bofya kitufe cha kusasisha ili kurekebisha.</string>\n  <string name=\"downloader_update_failed\">Imeshindwa kusasisha kipakuaji: %s</string>\n  <string name=\"downloader_replace_fail\">Imeshindwa kuingiza kipakuaji: %s</string>\n  <string name=\"select_from_storage_description\">Chagua faili ya APK kutoka hifadhi ukitumia kichagua faili</string>\n  <string name=\"enable\">Washa</string>\n  <string name=\"disable\">Zima</string>\n  <string name=\"process_runtime_memory_limit_description\">Kiwango cha juu cha kumbukumbu ambacho mchakato wa Kirekebishaji unaweza kutumia</string>\n  <string name=\"reset_onboarding\">Weka upya utambulisho</string>\n  <string name=\"reset_onboarding_description\">Onyesha skrini ya utambulisho programu itakapozinduliwa tena</string>\n  <string name=\"api_not_working_title\">Huduma ya API haipatikani kwa sasa</string>\n  <string name=\"api_not_working_description\">Baadhi ya vipengele huenda vikaathirika. Angalia muunganisho wako au URL ya API kwenye mipangilio.</string>\n  <string name=\"no_patched_apps_found\">Hakuna programu zilizorekebishwa zilizopatikana</string>\n  <string name=\"no_patched_apps_description\">Huna programu zozote zilizorekebishwa tunazozijua kwa sasa. Badilisha hilo kwa kurekebisha programu yako ya kwanza!</string>\n  <string name=\"patched_apps_section_title\">Programu zilizorekebishwa</string>\n  <string name=\"patchable_apps_section_title\">Programu zinazoweza kurekebishwa</string>\n  <string name=\"no_patches_found\">Hakuna marekebisho yaliyopatikana</string>\n  <string name=\"no_patches_description\">Huna marekebisho yoyote bado. Ongeza marekebisho kwa kugonga kitufe hapa chini!</string>\n  <string name=\"split_apk_not_supported\">APKs zilizogawanywa haziwezi kurekebishwa</string>\n  <string name=\"no_downloaders_installed\">Hakuna vipakuzi vya programu vilivyosakinishwa!</string>\n  <string name=\"no_downloaders_trusted\">Hakuna vipakuzi vya programu vilivyoaminiwa! Tafadhali angalia mipangilio yako.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Vifurushi</string>\n  <string name=\"patch_selector_sheet_actions_title\">Vitendo</string>\n  <string name=\"restore_default_selection\">Rejesha uteuzi chaguomsingi</string>\n  <string name=\"deselect_all\">Ondoa uteuzi wote</string>\n  <string name=\"invert_selection\">Pindua uteuzi</string>\n  <string name=\"deselect_all_except\">Ondoa uteuzi wa yote isipokuwa %s</string>\n  <string name=\"scope_dialog_title\">Tekeleza kwa</string>\n  <string name=\"scope_all_patches\">Marekebisho yote</string>\n  <string name=\"scope_bundle_patches\">%s tu</string>\n  <string name=\"save_as_file\">Hifadhi kwenye faili</string>\n  <string name=\"export_patcher_logs\">Hamisha kumbukumbu za kirekebishaji</string>\n  <string name=\"save_logs_success\">Kumbukumbu zimehifadhiwa</string>\n  <string name=\"downloader_activity_dialog_body\">Mwingiliano wa mtumiaji unahitajika ili kuendelea na kipakuzi hiki.</string>\n  <string name=\"patcher_step_unpack\">Andaa mpachikaji</string>\n  <string name=\"view_announcement\">Tazama tangazo</string>\n  <string name=\"license\">Leseni</string>\n  <string name=\"source\">Chanzo</string>\n  <string name=\"repository\">Hazina</string>\n  <string name=\"bundle_information_by_author\">Na %1$s</string>\n  <string name=\"version_compatibility_warning\">Toleo lililochaguliwa huenda lisiendane na viraka vilivyochaguliwa</string>\n  <string name=\"announcements\">Matangazo</string>\n  <string name=\"archive\">Kumbukumbu</string>\n  <string name=\"view_update\">Tazama sasisho</string>\n  <string name=\"update_checking_downloader\">Angalia masasisho ya Vipakuzi vya ReVanced programu inapozinduliwa</string>\n  <string name=\"update_checking_downloader_description\">Angalia masasisho ya Vipakuzi vya ReVanced vilivyosakinishwa programu inapoanza</string>\n  <string name=\"prereleases_warning\">Matoleo ya kabla ya kutolewa yanaweza kuwa yasiyo thabiti na yanaweza kuwa na hitilafu. Unaweza kukumbana na matatizo, upotevu wa data, au masuala mengine yasiyotarajiwa. Washa hii tu ikiwa uko tayari kuchukua hatari hizi.</string>\n  <string name=\"changelog\">Tazama orodha ya mabadiliko</string>\n  <string name=\"no_announcements_found\">Hakuna matangazo yaliyopatikana</string>\n  <string name=\"new_announcement\">Tangazo jipya:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d kiraka</item>\n    <item quantity=\"other\">%d viraka</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Tekeleza %d kiraka</item>\n    <item quantity=\"other\">Tekeleza %d viraka</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d imechaguliwa</item>\n    <item quantity=\"other\">%d zimechaguliwa</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ta-rIN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">பேட்சர்</string>\n  <string name=\"onboarding_welcome_to\">வரவேற்கிறோம்</string>\n  <string name=\"onboarding_welcome_back\">வணக்கம்! இது புதிய</string>\n  <string name=\"onboarding_apps_subtitle\">நீங்கள் இப்போது பேட்ச் செய்ய ஒரு பயன்பாட்டைத் தேர்ந்தெடுக்கலாம் அல்லது பின்னர் செய்யலாம்</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager மற்றும் பேட்ச்களைப் புதுப்பித்த நிலையில் வைத்திருக்க தானியங்கி புதுப்பிப்புகளை உள்ளமைக்கவும்</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager, உங்கள் சாதனம் இணையத்துடன் இணைக்கப்பட்டிருந்தால், ஆரம்பப் பதிப்புகளைப் பதிவிறக்க %s உடன் இணைக்கும்.</string>\n  <string name=\"retry\">மீண்டும் முயற்சிக்கவும்</string>\n  <string name=\"onboarding_skip\">இப்போதைக்கு தவிர்க்கவும்</string>\n  <string name=\"onboarding_recommended_version\">பரிந்துரைக்கப்பட்ட பதிப்பு: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">அனுமதிகளைத் தவிர்க்கவா?</string>\n  <string name=\"onboarding_permissions_skip_description\">தேவையான அனுமதிகள் இல்லாமல், சில அம்சங்கள் சரியாகச் செயல்படாமல் போகலாம். நீங்கள் பின்னர் பயன்பாட்டு அமைப்புகளில் அவற்றிற்கு அனுமதி வழங்கலாம்.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">எப்படியும் தவிர்க்கவும்</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager சரியாகச் செயல்பட சில அனுமதிகள் தேவை</string>\n  <string name=\"permission_install_apps\">அறியப்படாத பயன்பாடுகளை நிறுவவும்</string>\n  <string name=\"permission_install_apps_description\">பேட்ச் செய்யப்பட்ட பயன்பாடுகளை நிறுவத் தேவை</string>\n  <string name=\"permission_notifications\">அறிவிப்புகள்</string>\n  <string name=\"permission_battery\">பேட்டரி மேம்படுத்தல்</string>\n  <string name=\"permission_battery_description\">பின்னணியில் பேட்சிங் தடைபடுவதைத் தடுக்கிறது</string>\n  <string name=\"permission_grant\">அனுமதி</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager பதிவிறக்கப்பான் ஹோஸ்ட்</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager பதிவிறக்கப்பான்களுக்கான அணுகலைக் கட்டுப்படுத்தப் பயன்படுகிறது. இதை ReVanced Manager மட்டுமே கொண்டுள்ளது.</string>\n  <string name=\"fab_patch_app\">ஒரு பயன்பாட்டை பேட்ச் செய்யவும்</string>\n  <string name=\"fab_add_patches\">பேட்ச்களைச் சேர்க்கவும்</string>\n  <string name=\"new_downloader_notification\">புதிய பதிவிறக்கி(கள்) கிடைக்கிறது(ன). அவற்றை உள்ளமைக்க இங்கே கிளிக் செய்யவும்.</string>\n  <string name=\"patches_not_downloaded\">பேட்சுகள் பதிவிறக்கம் செய்யப்படவில்லை.</string>\n  <string name=\"app_source_dialog_option_auto_description\">நிறுவப்பட்ட பயன்பாட்டைப் பயன்படுத்தவும், பிறகு பதிவிறக்கிய APK-ஐ பயன்படுத்தவும், பிறகு கிடைக்கக்கூடிய பதிவிறக்கிகளைப் பயன்படுத்தவும்</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">இணக்கமான பயன்பாடு அல்லது பதிவிறக்குபவர்கள் இல்லை</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">ரூட் அணுகல் இல்லாமல் ஏற்றப்பட்ட பயன்பாடுகளை மீண்டும் பேட்ச் செய்ய முடியாது</string>\n  <string name=\"patch_selector_item\">பேட்ச்களைத் தேர்ந்தெடுக்கவும்</string>\n  <string name=\"patch_selector_item_description\">%d பேட்ச்கள் தேர்ந்தெடுக்கப்பட்டன</string>\n  <string name=\"patch_selection_changed_warning\">பேட்சுகளின் தேர்வு மாற்றப்பட்டுள்ளது</string>\n  <string name=\"apk_source_selector_item\">APK மூலத்தைத் தேர்ந்தெடுக்கவும்</string>\n  <string name=\"apk_source_auto\">தானியங்கு</string>\n  <string name=\"apk_source_auto_installed\">தானியங்கு · நிறுவப்பட்ட APK-ஐப் பயன்படுத்துதல்</string>\n  <string name=\"apk_source_auto_downloaded\">தானியங்கு · பதிவிறக்கிய APK-ஐப் பயன்படுத்துதல்</string>\n  <string name=\"apk_source_auto_downloader\">தானியங்கு · கிடைக்கும் பதிவிறக்கிகளைப் பயன்படுத்தி</string>\n  <string name=\"apk_source_auto_storage\">தானியங்கு · சேமிப்பகத்திலிருந்து தேர்வுசெய்</string>\n  <string name=\"apk_source_downloaded\">ஏற்கனவே பதிவிறக்கப்பட்டது</string>\n  <string name=\"auto_updates_dialog_description\">ReVanced Manager பின்வரும் கூறுகளுக்கான புதுப்பிப்புகளை அவ்வப்போது சரிபார்க்க வேண்டுமா?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced பேட்ச்கள்</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: பதிவிறக்கிகள்</string>\n  <string name=\"auto_updates_dialog_note\">இந்த அமைப்புகளைப் பின்னர் மாற்றலாம்.\n\n    ReVanced Manager, உங்கள் சாதனம் இணையத்துடன் இணைக்கப்பட்டிருந்தால், ஆரம்பப் பதிப்புகளைப் பதிவிறக்க %s உடன் இணைக்கும்.</string>\n  <string name=\"announcements_filter_tag\">டேக் மூலம் வடிகட்டு</string>\n  <string name=\"announcements_show_archived\">காப்பகப்படுத்தப்பட்டதைக் காட்டு</string>\n  <string name=\"updates_description\">புதுப்பிப்புகளைச் சரிபார்த்து மாற்றப் பதிவைப் பார்க்கவும்</string>\n  <string name=\"downloads_description\">பதிவிறக்குபவர்கள் மற்றும் பதிவிறக்கப்பட்ட பயன்பாடுகள்</string>\n  <string name=\"safeguards_toggled_warning\">பாதுகாப்புகள் மாற்றப்பட்டுள்ளன</string>\n  <string name=\"about_app_name\">%1$s பற்றி</string>\n  <string name=\"search_languages\">மொழிகளைத் தேடு…</string>\n  <string name=\"keystore\">கீஸ்டோர்</string>\n  <string name=\"patches_selections\">பேட்ச் தேர்வுகள்</string>\n  <string name=\"select_bundle_for_import\">இறக்குமதி செய்ய தொகுப்பைத் தேர்ந்தெடுக்கவும்</string>\n  <string name=\"select_bundle_for_export\">ஏற்றுமதி செய்ய தொகுப்பைத் தேர்ந்தெடுக்கவும்</string>\n  <string name=\"patch_selection_packages\">சேமிக்கப்பட்ட தேர்வுகள் கொண்ட பயன்பாடுகள்</string>\n  <string name=\"patch_selection_entries\">மொத்தமாக தேர்ந்தெடுக்கப்பட்ட பேட்ச்கள்</string>\n  <string name=\"reset_configuration\">உள்ளமைவை மீட்டமை</string>\n  <string name=\"reset_patch_selection\">பேட்ச் தேர்வுகள்</string>\n  <string name=\"reset_patch_options\">பேட்ச் விருப்பங்கள்</string>\n  <string name=\"downloaders\">பதிவிறக்குபவர்கள்</string>\n  <string name=\"downloader_prereleases\">முன்-வெளியீடுகளைப் பயன்படுத்துக</string>\n  <string name=\"downloader_prereleases_description\">முக்கிய பதிவிறக்கியின் முன்-வெளியீட்டுப் பதிப்புகளைப் பயன்படுத்துக</string>\n  <string name=\"downloader_state_loaded\">ஏற்றப்பட்டது</string>\n  <string name=\"downloader_state_failed\">ஏற்றத் தவறிவிட்டது. மேலும் விவரங்களுக்கு கிளிக் செய்யவும்</string>\n  <string name=\"downloader_state_missing\">காணவில்லை</string>\n  <string name=\"downloader_delete_apps_title\">தேர்ந்தெடுக்கப்பட்ட பயன்பாடுகளை நீக்கு</string>\n  <string name=\"downloader_delete_apps_description\">தேர்ந்தெடுக்கப்பட்ட பயன்பாடுகளை நீக்க நீங்கள் உறுதியாக இருக்கிறீர்களா?</string>\n  <string name=\"downloader_delete_single_description\">\\\"%s\\\" என்பதை நீக்க விரும்புகிறீர்களா?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager மூலம் பதிவிறக்கப்பட்ட பயன்பாடுகள் இங்கே தோன்றும்.</string>\n  <string name=\"downloader_url\">பதிவிறக்கி URL</string>\n  <string name=\"downloader_add\">பதிவிறக்கியைச் சேர்</string>\n  <string name=\"select_downloader_type_dialog_description\">URL அல்லது உள்ளூர் கோப்புகளிலிருந்து புதிய பதிவிறக்கிகளைச் சேர்க்கவும்</string>\n  <string name=\"local_downloaders_description\">உள்ளூர் சேமிப்பகத்திலிருந்து பதிவிறக்கிகளைச் சேர்க்கவும்.</string>\n  <string name=\"remote_downloaders_description\">URL இலிருந்து பதிவிறக்கிகளைச் சேர்க்கவும். தானாகவே புதுப்பிக்கப்படலாம்.</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager க்குள் நேரடியாக பயன்பாடுகளைப் பெற பதிவிறக்கிகளை நிறுவவும்.</string>\n  <string name=\"install_revanced_downloader\">ReVanced பதிவிறக்கிகளை நிறுவவும்</string>\n  <string name=\"cancel_downloader_install_title\">பதிவிறக்கிகளை நிறுவுவதை ரத்து செய்யவா?</string>\n  <string name=\"cancel_downloader_install_description\">பதிவிறக்கிகளை நிறுவும் பணி நடைபெறுகிறது. நீங்கள் இப்போது வெளியேறினால், பதிவிறக்கம் ரத்து செய்யப்படும்.</string>\n  <string name=\"downloader_sources_unavailable_title\">இந்த பதிவிறக்கிகள் காணவில்லை</string>\n  <string name=\"downloader_sources_unavailable_description\">இதைச் சரிசெய்ய புதுப்பிப்பு பொத்தானைக் கிளிக் செய்யவும்.</string>\n  <string name=\"downloader_update_failed\">பதிவிறக்கியைப் புதுப்பிக்கத் தவறிவிட்டது: %s</string>\n  <string name=\"downloader_replace_fail\">பதிவிறக்கியை இறக்குமதி செய்யத் தவறிவிட்டது: %s</string>\n  <string name=\"select_from_storage_description\">கோப்புத் தேர்ந்தெடுப்பான் பயன்படுத்தி சேமிப்பகத்திலிருந்து ஒரு APK கோப்பைத் தேர்ந்தெடுக்கவும்</string>\n  <string name=\"enable\">இயக்கு</string>\n  <string name=\"disable\">முடக்கு</string>\n  <string name=\"process_runtime_memory_limit_description\">பேட்சர் செயல்முறை பயன்படுத்தக்கூடிய அதிகபட்ச நினைவக அளவு</string>\n  <string name=\"reset_onboarding\">ஆன்போர்டிங்கை மீட்டமை</string>\n  <string name=\"reset_onboarding_description\">அடுத்த பயன்பாடு தொடங்கும்போது ஆன்போர்டிங் திரையைக் காட்டு</string>\n  <string name=\"api_not_working_title\">API சேவை தற்போது முடக்கப்பட்டுள்ளது.</string>\n  <string name=\"api_not_working_description\">சில அம்சங்கள் பாதிக்கப்படலாம். உங்கள் இணைப்பு அல்லது API URL அமைப்புகளில் சரிபார்க்கவும்.</string>\n  <string name=\"no_patched_apps_found\">பேட்ச் செய்யப்பட்ட பயன்பாடுகள் எதுவும் காணப்படவில்லை</string>\n  <string name=\"no_patched_apps_description\">எங்களுக்குத் தெரிந்த எந்த பேட்ச் செய்யப்பட்ட பயன்பாடுகளும் உங்களிடம் தற்போது இல்லை. உங்கள் முதல் பயன்பாட்டை பேட்ச் செய்வதன் மூலம் அதை மாற்றவும்!</string>\n  <string name=\"patched_apps_section_title\">பேட்ச் செய்யப்பட்ட பயன்பாடுகள்</string>\n  <string name=\"patchable_apps_section_title\">பேட்ச் செய்யக்கூடிய பயன்பாடுகள்</string>\n  <string name=\"no_patches_found\">பேட்ச்கள் எதுவும் காணப்படவில்லை</string>\n  <string name=\"no_patches_description\">உங்களிடம் இன்னும் பேட்ச்கள் எதுவும் இல்லை. கீழே உள்ள பொத்தானைத் தட்டுவதன் மூலம் பேட்ச்களைச் சேர்க்கவும்!</string>\n  <string name=\"split_apk_not_supported\">பிளவுபட்ட APKகளை பேட்ச் செய்ய முடியாது</string>\n  <string name=\"no_downloaders_installed\">பயன்பாட்டு பதிவிறக்கிகள் எதுவும் நிறுவப்படவில்லை!</string>\n  <string name=\"no_downloaders_trusted\">எந்த பயன்பாட்டு பதிவிறக்கிகளும் நம்பப்படவில்லை! உங்கள் அமைப்புகளைச் சரிபார்க்கவும்.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">தொகுப்புகள்</string>\n  <string name=\"patch_selector_sheet_actions_title\">செயல்கள்</string>\n  <string name=\"restore_default_selection\">இயல்புநிலைத் தேர்வை மீட்டமை</string>\n  <string name=\"deselect_all\">அனைத்தையும் தேர்வுநீக்கு</string>\n  <string name=\"invert_selection\">தேர்வைப் புரட்டு</string>\n  <string name=\"deselect_all_except\">%s தவிர மற்ற அனைத்தையும் தேர்வு நீக்கவும்</string>\n  <string name=\"scope_dialog_title\">இதற்குப் பயன்படுத்து</string>\n  <string name=\"scope_all_patches\">அனைத்துப் பேட்ச்களும்</string>\n  <string name=\"scope_bundle_patches\">%s மட்டும்</string>\n  <string name=\"save_as_file\">கோப்புகளில் சேமி</string>\n  <string name=\"export_patcher_logs\">பேட்சர் பதிவுகளை ஏற்றுமதி செய்</string>\n  <string name=\"save_logs_success\">பதிவுகள் சேமிக்கப்பட்டன</string>\n  <string name=\"downloader_activity_dialog_body\">இந்த பதிவிறக்குபவருடன் தொடர பயனர் தொடர்பு தேவை.</string>\n  <string name=\"patcher_step_unpack\">பேட்சரைத் தயார் செய்யவும்</string>\n  <string name=\"view_announcement\">அறிவிப்பைக் காண்க</string>\n  <string name=\"license\">உரிமம்</string>\n  <string name=\"source\">ஆதாரம்</string>\n  <string name=\"repository\">களஞ்சியம்</string>\n  <string name=\"bundle_information_by_author\">%1$s ஆல்</string>\n  <string name=\"version_compatibility_warning\">தேர்ந்தெடுக்கப்பட்ட பதிப்பு தேர்ந்தெடுக்கப்பட்ட பேட்சுகளுடன் இணக்கமாக இல்லாமல் இருக்கலாம்.</string>\n  <string name=\"announcements\">அறிவிப்புகள்</string>\n  <string name=\"archive\">காப்பகம்</string>\n  <string name=\"view_update\">புதுப்பிப்பைப் பார்க்கவும்</string>\n  <string name=\"update_checking_downloader\">தொடங்கும்போது ReVanced பதிவிறக்கிகளின் புதுப்பிப்புகளைச் சரிபார்க்கவும்</string>\n  <string name=\"update_checking_downloader_description\">பயன்பாடு தொடங்கும்போது நிறுவப்பட்ட ReVanced பதிவிறக்கிகளுக்கு புதுப்பிப்புகளைச் சரிபார்க்கவும்</string>\n  <string name=\"prereleases_warning\">முன்கூட்டிய வெளியீட்டுப் பதிப்புகள் நிலையற்றதாகவும் பிழைகள் கொண்டதாகவும் இருக்கலாம். செயலிழப்புகள், தரவு இழப்பு அல்லது பிற எதிர்பாராத சிக்கல்களை நீங்கள் அனுபவிக்கலாம். இந்த அபாயங்களை நீங்கள் ஏற்றுக்கொண்டால் மட்டுமே இதை இயக்கவும்.</string>\n  <string name=\"changelog\">மாற்றப் பதிவைப் பார்க்கவும்</string>\n  <string name=\"no_announcements_found\">அறிவிப்புகள் எதுவும் கண்டறியப்படவில்லை</string>\n  <string name=\"new_announcement\">புதிய அறிவிப்பு:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d பேட்ச்</item>\n    <item quantity=\"other\">%d பேட்ச்கள்</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d பேட்ச் செயல்படுத்து</item>\n    <item quantity=\"other\">%d பேட்ச்களை செயல்படுத்து</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d தேர்ந்தெடுக்கப்பட்டது</item>\n    <item quantity=\"other\">%d தேர்ந்தெடுக்கப்பட்டன</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-te-rIN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">ప్యాచర్</string>\n  <string name=\"onboarding_welcome_to\">కు స్వాగతం</string>\n  <string name=\"onboarding_welcome_back\">నమస్తే! ఇది కొత్త</string>\n  <string name=\"onboarding_apps_subtitle\">మీరు ఇప్పుడు ప్యాచ్ చేయడానికి ఒక యాప్‌ను ఎంచుకోవచ్చు లేదా తర్వాత చేయవచ్చు</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager మరియు ప్యాచ్‌లను ఎప్పటికప్పుడు అప్‌డేట్‌గా ఉంచడానికి స్వయంచాలక అప్‌డేట్‌లను కాన్ఫిగర్ చేయండి</string>\n  <string name=\"onboarding_updates_note\">మీ పరికరం ఇంటర్నెట్‌కు కనెక్ట్ చేయబడి ఉంటే, ReVanced Manager ప్రారంభ సంస్కరణలను డౌన్‌లోడ్ చేయడానికి %sకి కనెక్ట్ అవుతుంది.</string>\n  <string name=\"retry\">మళ్ళీ ప్రయత్నించండి</string>\n  <string name=\"onboarding_skip\">ప్రస్తుతానికి దాటవేయి</string>\n  <string name=\"onboarding_recommended_version\">సిఫార్సు చేయబడిన వెర్షన్: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">అనుమతులను దాటవేయాలా?</string>\n  <string name=\"onboarding_permissions_skip_description\">అవసరమైన అనుమతులు లేకుండా, కొన్ని ఫీచర్‌లు సరిగ్గా పనిచేయకపోవచ్చు. మీరు తర్వాత యాప్ సెట్టింగ్‌లలో వాటిని మంజూరు చేయవచ్చు.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">ఏమైనా దాటవేయి</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager సరిగ్గా పనిచేయడానికి కొన్ని అనుమతులు అవసరం</string>\n  <string name=\"permission_install_apps\">తెలియని యాప్‌లను ఇన్‌స్టాల్ చేయండి</string>\n  <string name=\"permission_install_apps_description\">ప్యాచ్ చేయబడిన అప్లికేషన్‌లను ఇన్‌స్టాల్ చేయడానికి అవసరం</string>\n  <string name=\"permission_notifications\">నోటిఫికేషన్‌లు</string>\n  <string name=\"permission_battery\">బ్యాటరీ ఆప్టిమైజేషన్</string>\n  <string name=\"permission_battery_description\">బ్యాక్‌గ్రౌండ్‌లో ప్యాచింగ్ అంతరాయం లేకుండా నిరోధిస్తుంది</string>\n  <string name=\"permission_grant\">మంజూరు చేయండి</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager డౌన్‌లోడర్ హోస్ట్</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager డౌన్‌లోడర్‌లకు ప్రాప్యతను నియంత్రించడానికి ఉపయోగించబడుతుంది. ReVanced Manager కి మాత్రమే ఇది ఉంటుంది.</string>\n  <string name=\"fab_patch_app\">ఒక యాప్‌ను ప్యాచ్ చేయండి</string>\n  <string name=\"fab_add_patches\">ప్యాచ్‌లను జోడించండి</string>\n  <string name=\"new_downloader_notification\">కొత్త డౌన్‌లోడర్(లు) అందుబాటులో ఉన్నాయి. వాటిని కాన్ఫిగర్ చేయడానికి ఇక్కడ క్లిక్ చేయండి.</string>\n  <string name=\"patches_not_downloaded\">ప్యాచ్‌లు డౌన్‌లోడ్ చేయబడలేదు.</string>\n  <string name=\"app_source_dialog_option_auto_description\">ఇన్‌స్టాల్ చేయబడిన యాప్‌ను ఉపయోగించండి, తర్వాత డౌన్‌లోడ్ చేయబడిన APK, తర్వాత అందుబాటులో ఉన్న డౌన్‌లోడర్‌లు</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">అనుకూలమైన యాప్ లేదా డౌన్‌లోడర్‌లు అందుబాటులో లేవు</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">రూట్ యాక్సెస్ లేకుండా మౌంట్ చేసిన యాప్‌లను మళ్ళీ ప్యాచ్ చేయలేము</string>\n  <string name=\"patch_selector_item\">ప్యాచ్‌లను ఎంచుకోండి</string>\n  <string name=\"patch_selector_item_description\">%d ప్యాచ్‌లు ఎంపిక చేయబడ్డాయి</string>\n  <string name=\"patch_selection_changed_warning\">ప్యాచ్‌ల ఎంపిక మార్చబడింది</string>\n  <string name=\"apk_source_selector_item\">APK మూలాధారాన్ని ఎంచుకోండి</string>\n  <string name=\"apk_source_auto\">ఆటో</string>\n  <string name=\"apk_source_auto_installed\">ఆటో · ఇన్‌స్టాల్ చేయబడిన APKని ఉపయోగించి</string>\n  <string name=\"apk_source_auto_downloaded\">ఆటో · డౌన్‌లోడ్ చేయబడిన APKని ఉపయోగించి</string>\n  <string name=\"apk_source_auto_downloader\">ఆటో · అందుబాటులో ఉన్న డౌన్‌లోడర్‌లను ఉపయోగించి</string>\n  <string name=\"apk_source_auto_storage\">ఆటో · నిల్వ నుండి ఎంచుకోండి</string>\n  <string name=\"apk_source_downloaded\">ఇప్పటికే డౌన్‌లోడ్ చేయబడింది</string>\n  <string name=\"auto_updates_dialog_description\">ReVanced Manager క్రింది భాగాల కోసం అప్‌డేట్‌ల కోసం క్రమానుగతంగా తనిఖీ చేయాలని మీరు కోరుకుంటున్నారా?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced ప్యాచ్‌లు</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: డౌన్‌లోడర్‌లు</string>\n  <string name=\"auto_updates_dialog_note\">ఈ సెట్టింగ్‌లను తర్వాత మార్చవచ్చు.\n\n    మీ పరికరం ఇంటర్నెట్‌కు కనెక్ట్ చేయబడి ఉంటే, ReVanced Manager ప్రారంభ సంస్కరణలను డౌన్‌లోడ్ చేయడానికి %sకి కనెక్ట్ అవుతుంది.</string>\n  <string name=\"announcements_filter_tag\">ట్యాగ్ ద్వారా ఫిల్టర్ చేయండి</string>\n  <string name=\"announcements_show_archived\">ఆర్కైవ్ చేసినవి చూపించు</string>\n  <string name=\"updates_description\">అప్‌డేట్‌ల కోసం తనిఖీ చేయండి మరియు చేంజ్ లాగ్‌ను వీక్షించండి</string>\n  <string name=\"downloads_description\">డౌన్‌లోడర్‌లు మరియు డౌన్‌లోడ్ చేయబడిన యాప్‌లు</string>\n  <string name=\"safeguards_toggled_warning\">రక్షణలు మార్చబడ్డాయి</string>\n  <string name=\"about_app_name\">%1$s గురించి</string>\n  <string name=\"search_languages\">భాషలను శోధించండి…</string>\n  <string name=\"keystore\">కీస్టోర్</string>\n  <string name=\"patches_selections\">ప్యాచ్‌ల ఎంపికలు</string>\n  <string name=\"select_bundle_for_import\">దిగుమతి చేయడానికి బండిల్‌ను ఎంచుకోండి</string>\n  <string name=\"select_bundle_for_export\">ఎగుమతి చేయడానికి బండిల్‌ను ఎంచుకోండి</string>\n  <string name=\"patch_selection_packages\">సేవ్ చేయబడిన ఎంపికలతో యాప్‌లు</string>\n  <string name=\"patch_selection_entries\">మొత్తం ఎంపిక చేయబడిన ప్యాచ్‌లు</string>\n  <string name=\"reset_configuration\">కాన్ఫిగరేషన్‌ను రీసెట్ చేయండి</string>\n  <string name=\"reset_patch_selection\">ప్యాచ్ ఎంపికలు</string>\n  <string name=\"reset_patch_options\">ప్యాచ్ ఎంపికలు</string>\n  <string name=\"downloaders\">డౌన్‌లోడర్‌లు</string>\n  <string name=\"downloader_prereleases\">ప్రీ-రిలీజ్‌లను ఉపయోగించండి</string>\n  <string name=\"downloader_prereleases_description\">ప్రధాన డౌన్‌లోడర్ యొక్క ప్రీ-రిలీజ్ వెర్షన్‌లను ఉపయోగించండి</string>\n  <string name=\"downloader_state_loaded\">లోడ్ చేయబడింది</string>\n  <string name=\"downloader_state_failed\">లోడ్ చేయడంలో విఫలమైంది. మరిన్ని వివరాల కోసం క్లిక్ చేయండి</string>\n  <string name=\"downloader_state_missing\">గల్లంతు</string>\n  <string name=\"downloader_delete_apps_title\">ఎంచుకున్న యాప్‌లను తొలగించండి</string>\n  <string name=\"downloader_delete_apps_description\">మీరు ఎంచుకున్న యాప్‌లను తొలగించాలనుకుంటున్నారని ఖచ్చితంగా ఉన్నారా?</string>\n  <string name=\"downloader_delete_single_description\">మీరు \\\"%s\\\"ని తొలగించడానికి ఖచ్చితంగా ఉన్నారా?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager ద్వారా డౌన్‌లోడ్ చేయబడిన యాప్‌లు ఇక్కడ కనిపిస్తాయి.</string>\n  <string name=\"downloader_url\">డౌన్‌లోడర్ URL</string>\n  <string name=\"downloader_add\">డౌన్‌లోడర్‌ను జోడించు</string>\n  <string name=\"select_downloader_type_dialog_description\">URL లేదా స్థానిక ఫైల్‌ల నుండి కొత్త డౌన్‌లోడర్‌లను జోడించండి</string>\n  <string name=\"local_downloaders_description\">స్థానిక నిల్వ నుండి డౌన్‌లోడర్‌లను జోడించండి.</string>\n  <string name=\"remote_downloaders_description\">URL నుండి డౌన్‌లోడర్‌లను జోడించండి. స్వయంచాలకంగా నవీకరించబడవచ్చు.</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager లోపల నేరుగా యాప్‌లను పొందడానికి డౌన్‌లోడర్‌లను ఇన్‌స్టాల్ చేయండి.</string>\n  <string name=\"install_revanced_downloader\">ReVanced డౌన్‌లోడర్‌లను ఇన్‌స్టాల్ చేయండి</string>\n  <string name=\"cancel_downloader_install_title\">డౌన్‌లోడర్‌ల ఇన్‌స్టాల్‌ను రద్దు చేయాలా?</string>\n  <string name=\"cancel_downloader_install_description\">డౌన్‌లోడర్‌ల ఇన్‌స్టాల్ పురోగతిలో ఉంది. మీరు ఇప్పుడు నిష్క్రమిస్తే, డౌన్‌లోడ్ రద్దు చేయబడుతుంది.</string>\n  <string name=\"downloader_sources_unavailable_title\">ఈ డౌన్‌లోడర్‌లు లేవు</string>\n  <string name=\"downloader_sources_unavailable_description\">దీన్ని సరిచేయడానికి అప్‌డేట్ బటన్‌పై క్లిక్ చేయండి.</string>\n  <string name=\"downloader_update_failed\">డౌన్‌లోడర్‌ను అప్‌డేట్ చేయడంలో విఫలమైంది: %s</string>\n  <string name=\"downloader_replace_fail\">డౌన్‌లోడర్‌ను దిగుమతి చేయడంలో విఫలమైంది: %s</string>\n  <string name=\"select_from_storage_description\">ఫైల్ పికర్‌ని ఉపయోగించి నిల్వ నుండి ఒక APK ఫైల్‌ను ఎంచుకోండి</string>\n  <string name=\"enable\">ప్రారంభించండి</string>\n  <string name=\"disable\">నిలిపివేయండి</string>\n  <string name=\"process_runtime_memory_limit_description\">ప్యాచ్ ప్రాసెస్ ఉపయోగించగల గరిష్ట మెమరీ మొత్తం</string>\n  <string name=\"reset_onboarding\">ఆన్‌బోర్డింగ్‌ను రీసెట్ చేయండి</string>\n  <string name=\"reset_onboarding_description\">తదుపరి యాప్ లాంచ్‌లో ఆన్‌బోర్డింగ్ స్క్రీన్‌ను చూపండి</string>\n  <string name=\"api_not_working_title\">API సేవ ప్రస్తుతం నిలిచిపోయింది</string>\n  <string name=\"api_not_working_description\">కొన్ని ఫీచర్‌లు ప్రభావితం కావచ్చు. మీ కనెక్షన్ లేదా సెట్టింగ్‌లలో API URLని తనిఖీ చేయండి.</string>\n  <string name=\"no_patched_apps_found\">ప్యాచ్ చేయబడిన యాప్‌లు కనుగొనబడలేదు</string>\n  <string name=\"no_patched_apps_description\">ప్రస్తుతం మీకు మాకు తెలిసిన ప్యాచ్ చేయబడిన యాప్‌లు ఏవీ లేవు. మీ మొదటి యాప్‌ను ప్యాచ్ చేయడం ద్వారా దానిని మార్చండి!</string>\n  <string name=\"patched_apps_section_title\">ప్యాచ్ చేయబడిన యాప్‌లు</string>\n  <string name=\"patchable_apps_section_title\">ప్యాచ్ చేయగల యాప్‌లు</string>\n  <string name=\"no_patches_found\">ప్యాచ్‌లు కనుగొనబడలేదు</string>\n  <string name=\"no_patches_description\">మీకు ఇంకా ప్యాచ్‌లు ఏవీ లేవు. దిగువ బటన్‌ను నొక్కడం ద్వారా ప్యాచ్‌లను జోడించండి!</string>\n  <string name=\"split_apk_not_supported\">విభజించబడిన APKలు ప్యాచ్ చేయబడవు</string>\n  <string name=\"no_downloaders_installed\">యాప్ డౌన్‌లోడర్‌లు ఏవీ ఇన్‌స్టాల్ చేయబడలేదు!</string>\n  <string name=\"no_downloaders_trusted\">యాప్ డౌన్‌లోడర్‌లు ఏవీ విశ్వసించబడలేదు! దయచేసి మీ సెట్టింగ్‌లను తనిఖీ చేయండి.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">ప్యాకేజీలు</string>\n  <string name=\"patch_selector_sheet_actions_title\">చర్యలు</string>\n  <string name=\"restore_default_selection\">డిఫాల్ట్ ఎంపికను పునరుద్ధరించండి</string>\n  <string name=\"deselect_all\">అన్నింటినీ ఎంపిక తీసివేయండి</string>\n  <string name=\"invert_selection\">ఎంపికను విలోమం చేయండి</string>\n  <string name=\"deselect_all_except\">%s మినహా అన్నింటినీ ఎంపిక తీసివేయండి</string>\n  <string name=\"scope_dialog_title\">దీనికి వర్తింపజేయండి</string>\n  <string name=\"scope_all_patches\">అన్ని ప్యాచ్‌లు</string>\n  <string name=\"scope_bundle_patches\">కేవలం %s మాత్రమే</string>\n  <string name=\"save_as_file\">ఫైల్‌లకు సేవ్ చేయండి</string>\n  <string name=\"export_patcher_logs\">ప్యాచ్ లాగ్‌లను ఎగుమతి చేయండి</string>\n  <string name=\"save_logs_success\">లాగ్‌లు సేవ్ చేయబడ్డాయి</string>\n  <string name=\"downloader_activity_dialog_body\">ఈ డౌన్‌లోడర్‌తో కొనసాగడానికి వినియోగదారు పరస్పర చర్య అవసరం.</string>\n  <string name=\"patcher_step_unpack\">ప్యాచర్‌ను సిద్ధం చేయండి</string>\n  <string name=\"view_announcement\">ప్రకటనను వీక్షించండి</string>\n  <string name=\"license\">లైసెన్స్</string>\n  <string name=\"source\">మూలం</string>\n  <string name=\"repository\">రిపోజిటరీ</string>\n  <string name=\"bundle_information_by_author\">%1$s ద్వారా</string>\n  <string name=\"version_compatibility_warning\">ఎంచుకున్న వెర్షన్, ఎంపిక చేసిన ప్యాచ్‌లతో సరిపోలకపోవచ్చు</string>\n  <string name=\"announcements\">ప్రకటనలు</string>\n  <string name=\"archive\">ఆర్కైవ్</string>\n  <string name=\"view_update\">అప్‌డేట్‌ను వీక్షించండి</string>\n  <string name=\"update_checking_downloader\">లాంచ్‌లో ReVanced డౌన్‌లోడర్‌ల అప్‌డేట్‌ల కోసం తనిఖీ చేయండి</string>\n  <string name=\"update_checking_downloader_description\">అప్లికేషన్ ప్రారంభమైనప్పుడు ఇన్‌స్టాల్ చేయబడిన ReVanced డౌన్‌లోడర్‌లకు అప్‌డేట్‌ల కోసం తనిఖీ చేయండి</string>\n  <string name=\"prereleases_warning\">ప్రీ-రిలీజ్ వెర్షన్‌లు అస్థిరంగా ఉండవచ్చు మరియు బగ్‌లను కలిగి ఉండవచ్చు. మీరు క్రాష్‌లు, డేటా నష్టం లేదా ఇతర ఊహించని సమస్యలను అనుభవించవచ్చు. మీరు ఈ ప్రమాదాలతో సౌకర్యవంతంగా ఉంటే మాత్రమే దీన్ని ప్రారంభించండి.</string>\n  <string name=\"changelog\">చేంజ్ లాగ్‌ను వీక్షించండి</string>\n  <string name=\"no_announcements_found\">ప్రకటనలు కనుగొనబడలేదు</string>\n  <string name=\"new_announcement\">కొత్త ప్రకటన:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d ప్యాచ్</item>\n    <item quantity=\"other\">%d ప్యాచ్‌లు</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d ప్యాచ్ ని అమలు చేయండి</item>\n    <item quantity=\"other\">%d ప్యాచ్ లను అమలు చేయండి</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d ఎంపిక చేయబడింది</item>\n    <item quantity=\"other\">%d ఎంపిక చేయబడ్డాయి</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-th-rTH/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">แพตเชอร์</string>\n  <string name=\"patches\">แพตช์</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">ตัวจัดการ</string>\n  <string name=\"onboarding_welcome_to\">ยินดีต้อนรับสู่</string>\n  <string name=\"onboarding_welcome_back\">สวัสดี! นี่คือ</string>\n  <string name=\"onboarding_apps_subtitle\">คุณสามารถเลือกแอปที่จะแพตช์ตอนนี้หรือทำในภายหลัง</string>\n  <string name=\"onboarding_updates_subtitle\">กำหนดค่าการอัปเดตอัตโนมัติเพื่อให้ ReVanced Manager และแพตช์เป็นปัจจุบันอยู่เสมอ</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager จะเชื่อมต่อกับ %s เพื่อดาวน์โหลดเวอร์ชันเริ่มต้น หากอุปกรณ์ของคุณเชื่อมต่ออินเทอร์เน็ต</string>\n  <string name=\"retry\">ลองใหม่</string>\n  <string name=\"onboarding_skip\">ข้ามไปก่อน</string>\n  <string name=\"onboarding_recommended_version\">เวอร์ชันที่แนะนำ: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">ข้ามการอนุญาตหรือไม่</string>\n  <string name=\"onboarding_permissions_skip_description\">หากไม่มีการอนุญาตที่จำเป็น ฟีเจอร์บางอย่างอาจทำงานไม่ถูกต้อง คุณสามารถให้สิทธิ์ได้ในภายหลังในการตั้งค่าแอป</string>\n  <string name=\"onboarding_permissions_skip_anyway\">ข้ามไปอยู่ดี</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager ต้องการการอนุญาตบางอย่างเพื่อให้ทำงานได้อย่างถูกต้อง</string>\n  <string name=\"permission_install_apps\">ติดตั้งแอปที่ไม่รู้จัก</string>\n  <string name=\"permission_install_apps_description\">จำเป็นสำหรับการติดตั้งแอปพลิเคชันที่ได้รับการแพตช์</string>\n  <string name=\"permission_notifications\">บริค์ซ์</string>\n  <string name=\"permission_battery\">การเพิ่มประสิทธิภาพแบตเตอรี่</string>\n  <string name=\"permission_battery_description\">ป้องกันไม่ให้การแพตช์ถูกขัดจังหวะในเบื้องหลัง</string>\n  <string name=\"permission_grant\">ให้สิทธิ์</string>\n  <string name=\"downloader_host_permission_label\">โฮสต์ดาวน์โหลด ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">ใช้เพื่อควบคุมการเข้าถึงโปรแกรมดาวน์โหลด ReVanced Manager มีเพียง ReVanced Manager เท่านั้นที่มีสิ่งนี้</string>\n  <string name=\"toast_copied_to_clipboard\">คัดลอกแล้ว!</string>\n  <string name=\"copy_to_clipboard\">คัดลอกไปยังคลิปบอร์ด</string>\n  <string name=\"dashboard\">แดชบอร์ด</string>\n  <string name=\"settings\">การตั้งค่า</string>\n  <string name=\"select_app\">เลือกแอป</string>\n  <string name=\"patches_count_selected\">เลือก %1$d/%2$d</string>\n  <string name=\"fab_patch_app\">แพตช์แอป</string>\n  <string name=\"fab_add_patches\">เพิ่มแพตช์</string>\n  <string name=\"new_downloader_notification\">มีตัวดาวน์โหลดใหม่พร้อมใช้งาน คลิกที่นี่เพื่อกำหนดค่า</string>\n  <string name=\"unsupported_architecture_warning\">การแพตช์บนสถาปัตยกรรมอุปกรณ์นี้ไม่รองรับและมีแนวโน้มที่จะล้มเหลว</string>\n  <string name=\"import_\">นำเข้า</string>\n  <string name=\"import_patches\">นำเข้าแพตช์</string>\n  <string name=\"file_field_set\">เลือกแล้ว</string>\n  <string name=\"file_field_not_set\">ไม่ได้เลือก</string>\n  <string name=\"field_not_set\">ไม่ได้ตั้งค่า</string>\n  <string name=\"patches_missing\">ขาดหายไป</string>\n  <string name=\"patches_error\">ข้อผิดพลาด</string>\n  <string name=\"patches_error_description\">ไม่สามารถโหลดแพตช์ได้ คลิกเพื่อดูข้อผิดพลาด</string>\n  <string name=\"patches_not_downloaded\">ยังไม่ได้ดาวน์โหลดแพตช์</string>\n  <string name=\"patches_name_default\">แพตช์</string>\n  <string name=\"patches_name_fallback\">ไม่มีชื่อ</string>\n  <string name=\"android_11_bug_dialog_title\">ข้อผิดพลาด Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">ต้องได้รับอนุญาตการติดตั้งแอปก่อนเวลาเพื่อหลีกเลี่ยงข้อผิดพลาดในระบบ Android 11 ซึ่งจะส่งผลเสียต่อประสบการณ์ผู้ใช้</string>\n  <string name=\"no_network_toast\">ไม่มีการเชื่อมต่ออินเทอร์เน็ต</string>\n  <string name=\"selected_app_meta_any_version\">เวอร์ชันใดก็ได้ที่มี</string>\n  <string name=\"app_source_dialog_title\">เลือกแหล่งที่มา</string>\n  <string name=\"app_source_dialog_option_auto\">อัตโนมัติ</string>\n  <string name=\"app_source_dialog_option_auto_description\">ใช้แอปที่ติดตั้งแล้ว, จากนั้น APK ที่ดาวน์โหลดแล้ว, จากนั้นตัวดาวน์โหลดที่มีอยู่</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">ไม่พบแอปหรือโปรแกรมดาวน์โหลดที่เข้ากันได้</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">แอปที่ติดตั้งแล้วจะไม่สามารถแพตช์ได้อีกโดยไม่มีสิทธิ์รูท</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">เวอร์ชัน %s ไม่ตรงกับเวอร์ชันที่แนะนำ</string>\n  <string name=\"patch_item_description\">เริ่มแพตช์แอปพลิเคชัน</string>\n  <string name=\"patch_selector_item\">เลือกแพตช์</string>\n  <string name=\"patch_selector_item_description\">เลือกแพตช์แล้ว %d รายการ</string>\n  <string name=\"patch_selection_changed_warning\">มีการเปลี่ยนแปลงการเลือกแพตช์</string>\n  <string name=\"no_patches_selected\">ไม่ได้เลือกแพตช์</string>\n  <string name=\"network_unavailable_warning\">อุปกรณ์ของคุณไม่ได้เชื่อมต่ออินเทอร์เน็ต การดาวน์โหลดจะล้มเหลวในภายหลัง</string>\n  <string name=\"network_metered_warning\">ขณะนี้คุณกำลังใช้การเชื่อมต่อแบบจำกัดปริมาณข้อมูล อาจมีค่าใช้จ่ายข้อมูลจากผู้ให้บริการของคุณ</string>\n  <string name=\"apk_source_selector_item\">เลือกแหล่งที่มา APK</string>\n  <string name=\"apk_source_auto\">อัตโนมัติ</string>\n  <string name=\"apk_source_auto_installed\">อัตโนมัติ · กำลังใช้ APK ที่ติดตั้งแล้ว</string>\n  <string name=\"apk_source_auto_downloaded\">อัตโนมัติ · กำลังใช้ APK ที่ดาวน์โหลดแล้ว</string>\n  <string name=\"apk_source_auto_downloader\">อัตโนมัติ · ใช้ตัวดาวน์โหลดที่มีอยู่</string>\n  <string name=\"apk_source_auto_storage\">อัตโนมัติ · เลือกจากที่เก็บข้อมูล</string>\n  <string name=\"apk_source_downloader\">กำลังใช้ %s</string>\n  <string name=\"apk_source_installed\">กำลังใช้ APK ที่ติดตั้ง</string>\n  <string name=\"apk_source_local\">กำลังใช้ไฟล์ APK ในเครื่อง</string>\n  <string name=\"apk_source_downloaded\">ดาวน์โหลดแล้ว</string>\n  <string name=\"legacy_import_failed\">ไม่สามารถนำเข้าการตั้งค่าเก่าได้</string>\n  <string name=\"auto_updates_dialog_title\">กำหนดค่าการอัปเดต</string>\n  <string name=\"auto_updates_dialog_description\">คุณต้องการให้ ReVanced Manager ตรวจสอบการอัปเดตเป็นระยะสำหรับส่วนประกอบต่อไปนี้หรือไม่</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">แพตช์ ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: ตัวดาวน์โหลด</string>\n  <string name=\"auto_updates_dialog_note\">การตั้งค่าเหล่านี้สามารถเปลี่ยนแปลงได้ในภายหลัง\n\n    ReVanced Manager จะเชื่อมต่อกับ %s เพื่อดาวน์โหลดเวอร์ชันเริ่มต้น หากอุปกรณ์ของคุณเชื่อมต่ออินเทอร์เน็ต</string>\n  <string name=\"announcements_filter_tag\">กรองตามแท็ก</string>\n  <string name=\"announcements_show_archived\">แสดงที่เก็บถาวร</string>\n  <string name=\"general\">ทั่วไป</string>\n  <string name=\"general_description\">ภาษา, ธีม, สีไดนามิก</string>\n  <string name=\"updates\">การอัปเดต</string>\n  <string name=\"updates_description\">ตรวจสอบการอัปเดตและดูรายการเปลี่ยนแปลง</string>\n  <string name=\"downloads\">การดาวน์โหลด</string>\n  <string name=\"downloads_description\">ตัวดาวน์โหลดและแอปที่ดาวน์โหลด</string>\n  <string name=\"import_export\">นำเข้า &amp; ส่งออก</string>\n  <string name=\"import_export_description\">คีย์สโตร์, ตัวเลือกแพตช์และการเลือก</string>\n  <string name=\"advanced\">ขั้นสูง</string>\n  <string name=\"advanced_description\">URL API, ขีดจำกัดหน่วยความจำ, การดีบัก</string>\n  <string name=\"safeguards_toggled_warning\">ได้สลับการป้องกัน</string>\n  <string name=\"about\">เกี่ยวกับ</string>\n  <string name=\"about_app_name\">เกี่ยวกับ %1$s</string>\n  <string name=\"opensource_licenses\">ใบอนุญาตโอเพนซอร์ส</string>\n  <string name=\"opensource_licenses_description\">ดูไลบรารีทั้งหมดที่ใช้ในการสร้างแอปพลิเคชันนี้</string>\n  <string name=\"contributors\">ผู้ร่วมให้ข้อมูล</string>\n  <string name=\"contributors_description\">ดูผู้ร่วมให้ข้อมูลของ ReVanced</string>\n  <string name=\"dynamic_color\">สีไดนามิก</string>\n  <string name=\"dynamic_color_description\">ปรับสีให้เข้ากับวอลเปเปอร์</string>\n  <string name=\"pure_black_theme\">ธีมสีดำสนิท</string>\n  <string name=\"pure_black_theme_description\">ใช้พื้นหลังสีดำสนิทสำหรับธีมมืด</string>\n  <string name=\"theme\">ธีม</string>\n  <string name=\"theme_description\">เลือกระหว่างธีมสว่างหรือธีมมืด</string>\n  <string name=\"language\">ภาษา</string>\n  <string name=\"language_description\">เลือกภาษาที่แสดงผลของแอป</string>\n  <string name=\"language_system_default\">ค่าเริ่มต้นของระบบ</string>\n  <string name=\"search_languages\">ค้นหาภาษา...</string>\n  <string name=\"safeguards\">มาตรการป้องกัน</string>\n  <string name=\"patch_compat_check\">ปิดใช้งานการตรวจสอบความเข้ากันได้ของเวอร์ชัน</string>\n  <string name=\"patch_compat_check_description\">ไม่ต้องจำกัดแพตช์สำหรับเวอร์ชันแอปที่เข้ากันได้</string>\n  <string name=\"patch_compat_check_confirmation\">การเลือกแพตช์ที่ไม่เข้ากันอาจทำให้แอปเสียหายได้\n\nคุณยังต้องการดำเนินการต่อหรือไม่?</string>\n  <string name=\"suggested_version_safeguard\">กำหนดให้ใช้เวอร์ชันแอปที่แนะนำ</string>\n  <string name=\"suggested_version_safeguard_description\">บังคับให้เลือกเวอร์ชันแอปที่แนะนำ</string>\n  <string name=\"suggested_version_safeguard_confirmation\">การเลือกแอปที่ไม่ใช่เวอร์ชันที่แนะนำอาจทำให้เกิดปัญหาที่ไม่คาดคิดได้\n\nคุณยังต้องการดำเนินการต่อหรือไม่?</string>\n  <string name=\"patch_selection_safeguard\">อนุญาตให้เปลี่ยนการเลือกแพตช์และตัวเลือก</string>\n  <string name=\"patch_selection_safeguard_description\">ไม่ต้องป้องกันการเลือกหรือยกเลิกการเลือกแพตช์และการปรับแต่งตัวเลือก</string>\n  <string name=\"patch_selection_safeguard_confirmation\">การเปลี่ยนแปลงการเลือกแพตช์อาจทำให้เกิดปัญหาที่ไม่คาดคิดได้\n\nยังต้องการเปิดใช้งานหรือไม่?</string>\n  <string name=\"universal_patches_safeguard\">อนุญาตให้ใช้แพตช์สากล</string>\n  <string name=\"universal_patches_safeguard_description\">ไม่ต้องป้องกันการใช้แพตช์สากล</string>\n  <string name=\"universal_patches_safeguard_confirmation\">แพตช์สากลยังไม่ได้รับการทดสอบดีเท่ากับแพตช์ที่กำหนดเป้าหมายแอปเฉพาะ\n\nยังต้องการเปิดใช้งานหรือไม่?</string>\n  <string name=\"keystore\">คีย์สโตร์</string>\n  <string name=\"patches_selections\">การเลือกแพตช์</string>\n  <string name=\"import_keystore\">นำเข้าคีย์สโตร์</string>\n  <string name=\"import_keystore_description\">นำเข้าคีย์สโตร์ที่กำหนดเอง</string>\n  <string name=\"import_keystore_dialog_title\">ป้อนข้อมูลประจำตัวคีย์สโตร์</string>\n  <string name=\"import_keystore_dialog_description\">คุณจะต้องป้อนข้อมูลประจำตัวของคีย์สโตร์เพื่อนำเข้า</string>\n  <string name=\"import_keystore_dialog_alias_field\">ชื่อผู้ใช้ (นามแฝง)</string>\n  <string name=\"import_keystore_dialog_password_field\">รหัสผ่าน</string>\n  <string name=\"import_keystore_dialog_button\">นำเข้า</string>\n  <string name=\"import_keystore_wrong_credentials\">ข้อมูลประจำตัวคีย์สโตร์ไม่ถูกต้อง</string>\n  <string name=\"import_keystore_success\">นำเข้าคีย์สโตร์แล้ว</string>\n  <string name=\"export_keystore\">ส่งออกคีย์สโตร์</string>\n  <string name=\"export_keystore_description\">ส่งออกคีย์สโตร์ปัจจุบัน</string>\n  <string name=\"export_keystore_unavailable\">ไม่มีคีย์สโตร์ให้ส่งออก</string>\n  <string name=\"export_keystore_success\">ส่งออกคีย์สโตร์แล้ว</string>\n  <string name=\"regenerate_keystore\">สร้างคีย์สโตร์ใหม่</string>\n  <string name=\"regenerate_keystore_description\">สร้างคีย์สโตร์ใหม่</string>\n  <string name=\"regenerate_keystore_dialog_description\">คุณกำลังจะสร้างคีย์สโตร์ใหม่ซึ่งตัวจัดการจะใช้ในระหว่างกระบวนการแพตช์\n\nคุณจะไม่สามารถอัปเดตแอปที่ติดตั้งไว้ก่อนหน้านี้จากแหล่งที่มานี้ได้</string>\n  <string name=\"regenerate_keystore_success\">คีย์สโตร์ถูกแทนที่สำเร็จแล้ว</string>\n  <string name=\"import_patch_selection\">นำเข้าการเลือกแพตช์</string>\n  <string name=\"import_patch_selection_description\">นำเข้าการเลือกแพตช์จากไฟล์ JSON</string>\n  <string name=\"import_patch_selection_fail\">ไม่สามารถนำเข้าการเลือกแพตช์ได้: %s</string>\n  <string name=\"import_patch_selection_success\">นำเข้าการเลือกแพตช์แล้ว</string>\n  <string name=\"select_bundle_for_import\">เลือกบันเดิลที่จะนำเข้า</string>\n  <string name=\"export_patch_selection\">ส่งออกการเลือกแพตช์</string>\n  <string name=\"export_patch_selection_description\">ส่งออกการเลือกแพตช์ไปยังไฟล์ JSON</string>\n  <string name=\"export_patch_selection_fail\">ไม่สามารถส่งออกการเลือกแพตช์ได้: %s</string>\n  <string name=\"export_patch_selection_success\">ส่งออกการเลือกแพตช์แล้ว</string>\n  <string name=\"select_bundle_for_export\">เลือกบันเดิลที่จะส่งออก</string>\n  <string name=\"patch_selection_packages\">แอปที่มีการเลือกที่บันทึกไว้</string>\n  <string name=\"patch_selection_entries\">แพตช์ที่เลือกทั้งหมด</string>\n  <string name=\"reset_configuration\">รีเซ็ตการกำหนดค่า</string>\n  <string name=\"reset_patch_selection\">การเลือกแพตช์</string>\n  <string name=\"reset_patch_selection_description\">รีเซ็ตการเลือกแพตช์ที่จัดเก็บไว้</string>\n  <string name=\"reset_patch_options\">ตัวเลือกแพตช์</string>\n  <string name=\"reset_patch_options_description\">รีเซ็ตตัวเลือกแพตช์ที่จัดเก็บไว้</string>\n  <string name=\"reset_patch_selection_success\">การเลือกแพตช์ถูกรีเซ็ตแล้ว</string>\n  <string name=\"patch_selection_reset_all\">รีเซ็ตการเลือกแพตช์ทั่วโลก</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">คุณกำลังจะรีเซ็ตการเลือกแพตช์ทั้งหมด คุณจะต้องเลือกแพตช์แต่ละอันด้วยตนเองอีกครั้ง</string>\n  <string name=\"patch_selection_reset_all_description\">รีเซ็ตการเลือกแพตช์ทั้งหมด</string>\n  <string name=\"patch_selection_reset_package\">รีเซ็ตการเลือกแพตช์สำหรับแอป</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">คุณกำลังจะรีเซ็ตการเลือกแพตช์สำหรับแอป \\\"%s\\\" คุณจะต้องเลือกแพตช์แต่ละอันด้วยตนเองอีกครั้ง</string>\n  <string name=\"patch_selection_reset_package_description\">รีเซ็ตการเลือกแพตช์สำหรับแอปเดียว</string>\n  <string name=\"patch_selection_reset_patches\">รีเซ็ตการเลือกแพตช์ (เดี่ยว)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">คุณกำลังจะรีเซ็ตการเลือกแพตช์สำหรับ \\\"%s\\\" คุณจะต้องเลือกแพตช์แต่ละอันด้วยตนเองอีกครั้ง</string>\n  <string name=\"patch_selection_reset_patches_description\">รีเซ็ตการเลือกแพตช์สำหรับชุดแพตช์ที่ระบุ</string>\n  <string name=\"patch_options_reset_package\">รีเซ็ตตัวเลือกแพตช์สำหรับแอป</string>\n  <string name=\"patch_options_reset_package_dialog_description\">คุณกำลังจะรีเซ็ตตัวเลือกแพตช์สำหรับแอป \\\"%s\\\" คุณจะต้องใช้ตัวเลือกแต่ละอันซ้ำอีกครั้ง</string>\n  <string name=\"patch_options_reset_package_description\">รีเซ็ตตัวเลือกแพตช์สำหรับแอปเดียว</string>\n  <string name=\"patch_options_reset_patches\">รีเซ็ตตัวเลือกแพตช์ (เดี่ยว)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">คุณกำลังจะรีเซ็ตตัวเลือกแพตช์สำหรับ \\\"%s\\\" คุณจะต้องใช้ตัวเลือกแต่ละอันซ้ำอีกครั้ง</string>\n  <string name=\"patch_options_reset_patches_description\">รีเซ็ตตัวเลือกแพตช์สำหรับชุดแพตช์ที่ระบุ</string>\n  <string name=\"patch_options_reset_all\">รีเซ็ตตัวเลือกแพตช์ทั่วโลก</string>\n  <string name=\"patch_options_reset_all_dialog_description\">คุณกำลังจะรีเซ็ตตัวเลือกแพตช์ทั้งหมด คุณจะต้องใช้ตัวเลือกแต่ละอันซ้ำอีกครั้ง</string>\n  <string name=\"patch_options_reset_all_description\">รีเซ็ตตัวเลือกแพตช์ทั้งหมด</string>\n  <string name=\"downloaders\">ตัวดาวน์โหลด</string>\n  <string name=\"downloader_prereleases\">ใช้เวอร์ชันทดสอบ</string>\n  <string name=\"downloader_prereleases_description\">ใช้เวอร์ชันทดสอบของตัวดาวน์โหลดหลัก</string>\n  <string name=\"downloader_state_loaded\">โหลดสำเร็จ</string>\n  <string name=\"downloader_state_failed\">โหลดไม่สำเร็จ คลิกเพื่อดูรายละเอียดเพิ่มเติม</string>\n  <string name=\"downloader_state_missing\">ไม่พบ</string>\n  <string name=\"downloader_delete_apps_title\">ลบแอปที่เลือก</string>\n  <string name=\"downloader_delete_apps_description\">คุณแน่ใจหรือไม่ว่าต้องการลบแอปที่เลือก</string>\n  <string name=\"downloader_delete_single_description\">คุณแน่ใจหรือไม่ว่าต้องการลบ \\\"%s\\\"</string>\n  <string name=\"downloader_settings_no_apps\">ไม่พบแอปที่ดาวน์โหลด</string>\n  <string name=\"downloader_settings_no_apps_description\">แอปที่ดาวน์โหลดผ่าน ReVanced Manager จะปรากฏที่นี่</string>\n  <string name=\"downloader_url\">URL ตัวดาวน์โหลด</string>\n  <string name=\"downloader_add\">เพิ่มตัวดาวน์โหลด</string>\n  <string name=\"select_downloader_type_dialog_description\">เพิ่มตัวดาวน์โหลดใหม่จาก URL หรือไฟล์ในเครื่อง</string>\n  <string name=\"local_downloaders_description\">เพิ่มตัวดาวน์โหลดจากไฟล์ในเครื่อง</string>\n  <string name=\"remote_downloaders_description\">เพิ่มตัวดาวน์โหลดจาก URL สามารถอัปเดตอัตโนมัติได้</string>\n  <string name=\"install_revanced_downloaders\">ติดตั้งตัวดาวน์โหลดเพื่อรับแอปโดยตรงภายใน ReVanced Manager</string>\n  <string name=\"install_revanced_downloader\">ติดตั้ง ReVanced Downloaders</string>\n  <string name=\"cancel_downloader_install_title\">ยกเลิกการติดตั้งตัวดาวน์โหลดหรือไม่</string>\n  <string name=\"cancel_downloader_install_description\">กำลังติดตั้งตัวดาวน์โหลด หากคุณออกตอนนี้ การดาวน์โหลดจะถูกยกเลิก</string>\n  <string name=\"downloader_sources_unavailable_title\">ไม่พบตัวดาวน์โหลดเหล่านี้</string>\n  <string name=\"downloader_sources_unavailable_description\">กดอัปเดตเพื่อแก้ไขปัญหานี้</string>\n  <string name=\"downloader_update_failed\">อัปเดตตัวดาวน์โหลดไม่สำเร็จ: %s</string>\n  <string name=\"downloader_replace_fail\">นำเข้าตัวดาวน์โหลดไม่สำเร็จ: %s</string>\n  <string name=\"search_apps\">ค้นหาแอป…</string>\n  <string name=\"loading_body\">กำลังโหลด…</string>\n  <string name=\"downloading_patches\">กำลังดาวน์โหลดแพตช์…</string>\n  <string name=\"options\">ตัวเลือก</string>\n  <string name=\"ok\">ตกลง</string>\n  <string name=\"yes\">ใช่</string>\n  <string name=\"no\">ไม่</string>\n  <string name=\"edit\">แก้ไข</string>\n  <string name=\"dialog_input_placeholder\">ค่า</string>\n  <string name=\"reset\">รีเซ็ต</string>\n  <string name=\"share\">แชร์</string>\n  <string name=\"patch\">แพตช์</string>\n  <string name=\"select_from_storage\">เลือกจากที่เก็บข้อมูล</string>\n  <string name=\"select_from_storage_description\">เลือกไฟล์ APK จากที่จัดเก็บโดยใช้ตัวเลือกไฟล์</string>\n  <string name=\"suggested_version_info\">เวอร์ชันแนะนำ: %s</string>\n  <string name=\"type_anything\">พิมพ์อะไรก็ได้เพื่อดำเนินการต่อ</string>\n  <string name=\"search\">ค้นหาแพตช์…</string>\n  <string name=\"apply\">ใช้</string>\n  <string name=\"help\">ความช่วยเหลือ</string>\n  <string name=\"back\">ย้อนกลับ</string>\n  <string name=\"warning\">คำเตือน</string>\n  <string name=\"add\">เพิ่ม</string>\n  <string name=\"enable\">เปิดใช้งาน</string>\n  <string name=\"disable\">ปิดการใช้งาน</string>\n  <string name=\"close\">ปิด</string>\n  <string name=\"clear\">ล้าง</string>\n  <string name=\"system\">ระบบ</string>\n  <string name=\"light\">สว่าง</string>\n  <string name=\"dark\">มืด</string>\n  <string name=\"appearance\">ลักษณะที่ปรากฏ</string>\n  <string name=\"networking\">เครือข่าย</string>\n  <string name=\"allow_metered_networks\">อนุญาตเครือข่ายแบบคิดค่าบริการ</string>\n  <string name=\"allow_metered_networks_description\">อนุญาตการอัปเดตอัตโนมัติบนเครือข่ายแบบคิดค่าบริการ\\n    แอปพลิเคชันอาจยังคงเตือนเกี่ยวกับเครือข่ายแบบคิดค่าบริการสำหรับการดำเนินการด้วยตนเอง</string>\n  <string name=\"downloaded_apps\">แอปที่ดาวน์โหลด</string>\n  <string name=\"process_runtime\">เรียกใช้ Patcher ในกระบวนการอื่น (ทดลอง)</string>\n  <string name=\"process_runtime_description\">วิธีนี้เร็วกว่าและทำให้ Patcher ใช้หน่วยความจำได้มากขึ้น</string>\n  <string name=\"process_runtime_memory_limit\">ขีดจำกัดหน่วยความจำของกระบวนการ Patcher</string>\n  <string name=\"process_runtime_memory_limit_description\">ปริมาณหน่วยความจำสูงสุดที่กระบวนการ Patcher สามารถใช้ได้</string>\n  <string name=\"debug_logs_export\">ส่งออกบันทึกการดีบัก</string>\n  <string name=\"debug_logs_export_read_failed\">อ่านบันทึกไม่สำเร็จ (รหัสออก %d)</string>\n  <string name=\"debug_logs_export_failed\">ส่งออกบันทึกไม่สำเร็จ</string>\n  <string name=\"debug_logs_export_success\">ส่งออกบันทึกแล้ว</string>\n  <string name=\"api_url\">URL ของ API</string>\n  <string name=\"api_url_description\">API ที่ใช้ในการดาวน์โหลดไฟล์ที่จำเป็น</string>\n  <string name=\"api_url_dialog_title\">เปลี่ยน URL ของ API</string>\n  <string name=\"api_url_dialog_description\">เปลี่ยน URL ของ API ของ ReVanced Manager. ReVanced Manager ใช้ API เพื่อดาวน์โหลดแพตช์และการอัปเดต</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager เชื่อมต่อกับ API เพื่อดาวน์โหลดแพตช์และการอัปเดต โปรดตรวจสอบให้แน่ใจว่าคุณเชื่อถือมัน</string>\n  <string name=\"api_url_dialog_save\">ตั้งค่า</string>\n  <string name=\"api_url_dialog_reset\">รีเซ็ต URL ของ API</string>\n  <string name=\"device\">อุปกรณ์</string>\n  <string name=\"device_android_version\">เวอร์ชัน Android</string>\n  <string name=\"device_model\">รุ่น</string>\n  <string name=\"device_architectures\">สถาปัตยกรรม CPU</string>\n  <string name=\"device_memory_limit\">ขีดจำกัดหน่วยความจำ</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (ปกติ) - %2$dMB (ขนาดใหญ่)</string>\n  <string name=\"patches_force_download\">บังคับดาวน์โหลดแพตช์ทั้งหมด</string>\n  <string name=\"patches_reset\">รีเซ็ตแพตช์</string>\n  <string name=\"reset_onboarding\">รีเซ็ตการเริ่มต้นใช้งาน</string>\n  <string name=\"reset_onboarding_description\">แสดงหน้าจอเริ่มต้นใช้งานในการเปิดแอปครั้งถัดไป</string>\n  <string name=\"patching\">กำลังแพตช์</string>\n  <string name=\"signing\">กำลังลงนาม</string>\n  <string name=\"storage\">ที่เก็บข้อมูล</string>\n  <string name=\"no_patch_found\">ไม่พบแพตช์ ตรวจสอบแพตช์ของคุณ</string>\n  <string name=\"tab_apps\">แอป</string>\n  <string name=\"tab_patches\">แพตช์</string>\n  <string name=\"delete\">ลบ</string>\n  <string name=\"refresh\">รีเฟรช</string>\n  <string name=\"continue_anyways\">ดำเนินการต่ออยู่ดี</string>\n  <string name=\"download_another_version\">ดาวน์โหลดเวอร์ชันอื่น</string>\n  <string name=\"download_app\">ดาวน์โหลดแอป</string>\n  <string name=\"download_apk\">ดาวน์โหลดไฟล์ APK</string>\n  <string name=\"patches_download_fail\">ดาวน์โหลดแพตช์ไม่สำเร็จ: %s</string>\n  <string name=\"api_not_working_title\">บริการ API ใช้งานไม่ได้ในขณะนี้</string>\n  <string name=\"api_not_working_description\">คุณสมบัติบางอย่างอาจได้รับผลกระทบ โปรดตรวจสอบการเชื่อมต่อของคุณ หรือ URL API ในการตั้งค่า</string>\n  <string name=\"patches_replace_fail\">นำเข้าแพตช์ไม่สำเร็จ: %s</string>\n  <string name=\"no_patched_apps_found\">ไม่พบแอปที่แพตช์แล้ว</string>\n  <string name=\"no_patched_apps_description\">ขณะนี้คุณยังไม่มีแอปที่แพตช์แล้วที่เราทราบ เปลี่ยนแปลงได้โดยการแพตช์แอปแรกของคุณ!</string>\n  <string name=\"patched_apps_section_title\">แอปที่ถูกแพตช์</string>\n  <string name=\"patchable_apps_section_title\">แอปที่สามารถแพตช์ได้</string>\n  <string name=\"no_patches_found\">ไม่พบแพตช์</string>\n  <string name=\"no_patches_description\">คุณยังไม่มีแพตช์ใด ๆ เพิ่มแพตช์โดยการแตะปุ่มด้านล่าง!</string>\n  <string name=\"tap_on_patches\">แตะที่แพตช์เพื่อดูข้อมูลเพิ่มเติม</string>\n  <string name=\"patches_selected\">เลือก %s รายการ</string>\n  <string name=\"incompatible_patches\">แพตช์ที่เข้ากันไม่ได้</string>\n  <string name=\"universal_patches\">แพตช์สากล</string>\n  <string name=\"patch_selection_reset_toast\">การเลือกแพตช์และตัวเลือกถูกรีเซ็ตเป็นค่าเริ่มต้นที่แนะนำ</string>\n  <string name=\"patch_options_reset_toast\">ตัวเลือกแพตช์ถูกรีเซ็ตแล้ว</string>\n  <string name=\"non_suggested_version_warning_title\">เวอร์ชันที่ไม่แนะนำ</string>\n  <string name=\"non_suggested_version_warning_description\">เวอร์ชันของแอปที่คุณเลือกไม่ตรงกับเวอร์ชันที่แนะนำ\\nโปรดใช้เวอร์ชันที่แนะนำ: %s\\n\\nหากต้องการดำเนินการต่อ ให้ปิดใช้งาน \\\"กำหนดเวอร์ชันแอปที่แนะนำ\\\" ในการตั้งค่าขั้นสูง</string>\n  <string name=\"selection_warning_title\">หยุดใช้ค่าเริ่มต้นใช่หรือไม่?</string>\n  <string name=\"selection_warning_description\">ขอแนะนำให้ใช้การเลือกแพตช์และตัวเลือกเริ่มต้น การเปลี่ยนแปลงอาจทำให้เกิดปัญหาที่ไม่คาดคิดได้\\n\\nคุณต้องเปิดใช้งาน \\\"อนุญาตให้เปลี่ยนการเลือกแพตช์และตัวเลือก\\\" ในการตั้งค่าขั้นสูงก่อนที่จะสลับแพตช์</string>\n  <string name=\"universal_patch_warning_description\">แพตช์สากลมีการใช้งานที่กว้างกว่าและทำงานได้ไม่น่าเชื่อถือเท่ากับแพตช์ที่กำหนดเป้าหมายแอปเฉพาะ คุณอาจพบปัญหาขณะใช้งาน\\n\\nคุณต้องเปิดใช้งาน \\\"อนุญาตให้ใช้แพตช์สากล\\\" ในการตั้งค่าขั้นสูงก่อนใช้แพตช์สากล</string>\n  <string name=\"this_version\">เวอร์ชันนี้</string>\n  <string name=\"universal\">แอปใดก็ได้</string>\n  <string name=\"search_patches\">ค้นหาแพตช์</string>\n  <string name=\"app_version_not_compatible\">แพตช์นี้ไม่เข้ากันกับเวอร์ชันแอปที่เลือก (%1$s)\\n\\nมันเข้ากันได้กับเวอร์ชันต่อไปนี้เท่านั้น: %2$s</string>\n  <string name=\"continue_with_version\">ดำเนินการต่อด้วยเวอร์ชันนี้ใช่หรือไม่?</string>\n  <string name=\"version_not_compatible\">แพตช์บางอันไม่เข้ากันกับเวอร์ชันนี้ (%s) คุณต้องการดำเนินการต่อหรือไม่?</string>\n  <string name=\"download_application\">ดาวน์โหลดแอปพลิเคชันใช่หรือไม่?</string>\n  <string name=\"app_not_installed\">แอปที่คุณเลือกยังไม่ได้ติดตั้ง คุณต้องการดาวน์โหลดหรือไม่?</string>\n  <string name=\"failed_to_load_apk\">โหลด APK ไม่สำเร็จ</string>\n  <string name=\"split_apk_not_supported\">APK แบบแยกไม่สามารถแพตช์ได้</string>\n  <string name=\"loading\">กำลังโหลด…</string>\n  <string name=\"not_installed\">ไม่ได้ติดตั้ง</string>\n  <string name=\"installed\">ติดตั้งแล้ว</string>\n  <string name=\"app_info\">ข้อมูลแอป</string>\n  <string name=\"uninstall\">ถอนการติดตั้ง</string>\n  <string name=\"unpatch\">เลิกแพตช์</string>\n  <string name=\"repatch\">แพตช์ใหม่</string>\n  <string name=\"install_type\">ประเภทการติดตั้ง</string>\n  <string name=\"package_name\">ชื่อแพ็กเกจ</string>\n  <string name=\"original_package_name\">ชื่อแพ็กเกจเดิม</string>\n  <string name=\"applied_patches\">แพตช์ที่ใช้แล้ว</string>\n  <string name=\"view_applied_patches\">ดูแพตช์ที่ใช้แล้ว</string>\n  <string name=\"default_install\">ค่าเริ่มต้น</string>\n  <string name=\"mount_install\">เมาท์</string>\n  <string name=\"mounted\">เมาท์แล้ว</string>\n  <string name=\"not_mounted\">ไม่ได้เมาท์</string>\n  <string name=\"mount\">เมาท์</string>\n  <string name=\"unmount\">ถอนการเมาท์</string>\n  <string name=\"failed_to_mount\">เมาท์ไม่สำเร็จ: %s</string>\n  <string name=\"failed_to_unmount\">ถอนการเมาท์ไม่สำเร็จ: %s</string>\n  <string name=\"unpatch_app\">ยกเลิกแพตช์แอปหรือไม่?</string>\n  <string name=\"unpatch_description\">คุณแน่ใจหรือไม่ว่าต้องการยกเลิกแพตช์แอปนี้?</string>\n  <string name=\"downloader_invalid_version\">ตัวดาวน์โหลดไม่ได้ดึงเวอร์ชันที่ถูกต้อง</string>\n  <string name=\"downloader_app_not_found\">ตัวดาวน์โหลดไม่พบแอป</string>\n  <string name=\"downloader_error\">ข้อผิดพลาดของตัวดาวน์โหลด: %s</string>\n  <string name=\"no_downloaders_installed\">ไม่มีตัวดาวน์โหลดแอปติดตั้งอยู่!</string>\n  <string name=\"no_downloaders_trusted\">ไม่มีตัวดาวน์โหลดแอปใดที่ได้รับความเชื่อถือ! โปรดตรวจสอบการตั้งค่าของคุณ</string>\n  <string name=\"already_patched\">แพตช์แล้ว</string>\n  <string name=\"patch_selector_sheet_filter_title\">ตัวกรอง</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">ความเข้ากันได้</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">แพ็กเกจ</string>\n  <string name=\"patch_selector_sheet_actions_title\">การกระทำ</string>\n  <string name=\"restore_default_selection\">คืนค่าการเลือกเริ่มต้น</string>\n  <string name=\"deselect_all\">ยกเลิกการเลือกทั้งหมด</string>\n  <string name=\"invert_selection\">กลับด้านการเลือก</string>\n  <string name=\"deselect_all_except\">ยกเลิกการเลือกทั้งหมด ยกเว้น %s</string>\n  <string name=\"scope_dialog_title\">ใช้กับ</string>\n  <string name=\"scope_all_patches\">แพตช์ทั้งหมด</string>\n  <string name=\"scope_bundle_patches\">%s เท่านั้น</string>\n  <string name=\"string_option_menu_description\">ตัวเลือกเพิ่มเติม</string>\n  <string name=\"option_preset_custom_value\">ค่าที่กำหนดเอง</string>\n  <string name=\"path_selector\">เลือกจากที่เก็บข้อมูล</string>\n  <string name=\"path_selector_parent_dir\">ไดเรกทอรีที่แล้ว</string>\n  <string name=\"path_selector_dirs\">ไดเรกทอรี</string>\n  <string name=\"path_selector_files\">ไฟล์</string>\n  <string name=\"show_password_field\">แสดงรหัสผ่าน</string>\n  <string name=\"hide_password_field\">ซ่อนรหัสผ่าน</string>\n  <string name=\"installer\">ตัวติดตั้ง</string>\n  <string name=\"install_app\">ติดตั้ง</string>\n  <string name=\"install_app_success\">ติดตั้งแอปแล้ว</string>\n  <string name=\"install_app_fail\">ติดตั้งแอปไม่สำเร็จ: %s</string>\n  <string name=\"reinstall_app_fail\">ติดตั้งแอปใหม่ไม่สำเร็จ: %s</string>\n  <string name=\"uninstall_app_fail\">ถอนการติดตั้งแอปไม่สำเร็จ: %s</string>\n  <string name=\"open_app\">เปิด</string>\n  <string name=\"save_apk\">บันทึก APK</string>\n  <string name=\"save_apk_success\">บันทึก APK แล้ว</string>\n  <string name=\"sign_fail\">ลงชื่อ APK ไม่สำเร็จ: %s</string>\n  <string name=\"save_logs\">บันทึกบันทึก</string>\n  <string name=\"save_as_file\">บันทึกลงในไฟล์</string>\n  <string name=\"export_patcher_logs\">ส่งออกบันทึกของ patcher</string>\n  <string name=\"save_logs_success\">บันทึกแล้ว</string>\n  <string name=\"downloader_activity_dialog_body\">จำเป็นต้องมีการโต้ตอบกับผู้ใช้เพื่อดำเนินการต่อด้วยตัวดาวน์โหลดนี้</string>\n  <string name=\"select_install_type\">เลือกประเภทการติดตั้ง</string>\n  <string name=\"patcher_step_group_preparing\">กำลังเตรียม</string>\n  <string name=\"patcher_step_load_patches\">โหลดแพตช์</string>\n  <string name=\"patcher_step_unpack\">เตรียมแพตเชอร์</string>\n  <string name=\"patcher_step_group_patching\">กำลังแพตช์</string>\n  <string name=\"patcher_step_group_saving\">กำลังบันทึก</string>\n  <string name=\"patcher_step_write_patched\">เขียนไฟล์ APK ที่แพตช์แล้ว</string>\n  <string name=\"patcher_step_sign_apk\">ลงชื่อไฟล์ APK ที่แพตช์แล้ว</string>\n  <string name=\"patcher_notification_title\">กำลังแพตช์…</string>\n  <string name=\"patcher_notification_text\">แตะเพื่อกลับไปยังตัวแพตช์</string>\n  <string name=\"patcher_stop_confirm_title\">หยุดตัวแพตช์</string>\n  <string name=\"patcher_stop_confirm_description\">คุณแน่ใจหรือไม่ว่าต้องการหยุดกระบวนการแพตช์?</string>\n  <string name=\"patcher_install_in_progress\">กำลังติดตั้ง โปรดรอ</string>\n  <string name=\"execute_patches\">ดำเนินการแพตช์</string>\n  <string name=\"executing_patch\">ดำเนินการ %s</string>\n  <string name=\"failed_to_execute_patch\">ดำเนินการ %s ไม่สำเร็จ</string>\n  <string name=\"step_completed\">เสร็จสมบูรณ์</string>\n  <string name=\"step_failed\">ล้มเหลว</string>\n  <string name=\"step_running\">กำลังทำงาน</string>\n  <string name=\"step_waiting\">กำลังรอ</string>\n  <string name=\"expand_content\">ขยาย</string>\n  <string name=\"collapse_content\">ยุบ</string>\n  <string name=\"drag_handle\">จัดเรียงใหม่</string>\n  <string name=\"more\">เพิ่มเติม</string>\n  <string name=\"less\">น้อยลง</string>\n  <string name=\"continue_\">ดำเนินการต่อ</string>\n  <string name=\"dismiss\">ปฏิเสธ</string>\n  <string name=\"view_announcement\">ดูประกาศ</string>\n  <string name=\"permanent_dismiss\">ไม่ต้องแสดงอีก</string>\n  <string name=\"donate\">บริจาค</string>\n  <string name=\"website\">เว็บไซต์</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">ติดต่อ</string>\n  <string name=\"license\">ใบอนุญาต</string>\n  <string name=\"source\">แหล่งที่มา</string>\n  <string name=\"repository\">ที่เก็บ</string>\n  <string name=\"bundle_information_by_author\">โดย %1$s</string>\n  <string name=\"version\">เวอร์ชัน</string>\n  <string name=\"version_compatibility_warning\">เวอร์ชันที่เลือกอาจไม่เข้ากันได้กับแพตช์ที่เลือก</string>\n  <string name=\"submit_feedback\">ส่งปัญหาหรือข้อเสนอแนะ</string>\n  <string name=\"submit_feedback_description\">ช่วยเราปรับปรุงแอปพลิเคชันนี้</string>\n  <string name=\"developer_options\">ตัวเลือกสำหรับนักพัฒนา</string>\n  <string name=\"developer_options_description\">ตัวเลือกสำหรับการแก้ไขข้อบกพร่อง</string>\n  <string name=\"patches_update_success\">อัปเดตสำเร็จ</string>\n  <string name=\"patches_update_unavailable\">ไม่มีอัปเดตให้ใช้งาน</string>\n  <string name=\"view_patches\">ดูแพตช์</string>\n  <string name=\"patches_view_any_version\">ทุกเวอร์ชัน</string>\n  <string name=\"patches_view_any_package\">ทุกแพ็กเกจ</string>\n  <string name=\"patches_delete_single_dialog_description\">คุณแน่ใจหรือไม่ว่าต้องการลบ \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">คุณแน่ใจหรือไม่ว่าต้องการลบแพตช์ที่เลือกไว้?</string>\n  <string name=\"announcements\">ประกาศ</string>\n  <string name=\"archive\">ที่เก็บถาวร</string>\n  <string name=\"about_revanced_manager\">เกี่ยวกับ ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager เป็นแอปพลิเคชัน Android ที่ใช้ ReVanced Patcher เพื่อแพตช์แอป Android ซึ่งช่วยให้คุณสามารถดาวน์โหลดและแพตช์แอปด้วยแพตช์ที่กำหนดเอง และจัดการกระบวนการแพตช์ได้</string>\n  <string name=\"developer_options_taps\">เหลือการแตะ %d ครั้ง</string>\n  <string name=\"developer_options_enabled\">เปิดใช้งานตัวเลือกสำหรับนักพัฒนาแล้ว</string>\n  <string name=\"developer_options_already_enabled\">ตัวเลือกสำหรับนักพัฒนาเปิดใช้งานอยู่แล้ว</string>\n  <string name=\"update_available\">มีการอัปเดตใหม่ให้ใช้งาน</string>\n  <string name=\"current_version\">เวอร์ชันปัจจุบัน: %s</string>\n  <string name=\"new_version\">เวอร์ชันใหม่: %s</string>\n  <string name=\"ready_to_install_update\">พร้อมติดตั้งอัปเดต</string>\n  <string name=\"update_completed\">ติดตั้งอัปเดตแล้ว</string>\n  <string name=\"install_update_manager_failed\">ติดตั้งอัปเดตไม่สำเร็จ</string>\n  <string name=\"manual_update_check\">ตรวจสอบอัปเดต</string>\n  <string name=\"view_update\">ดูการอัปเดต</string>\n  <string name=\"manual_update_check_description\">ตรวจสอบอัปเดตด้วยตนเอง</string>\n  <string name=\"update_checking_manager\">ตรวจสอบอัปเดตเมื่อเปิดใช้งาน</string>\n  <string name=\"update_checking_manager_description\">ตรวจสอบ ReVanced Manager เวอร์ชันใหม่เมื่อแอปพลิเคชันเริ่มต้น</string>\n  <string name=\"update_checking_downloader\">ตรวจสอบการอัปเดต ReVanced Downloaders เมื่อเปิดใช้งาน</string>\n  <string name=\"update_checking_downloader_description\">ตรวจสอบการอัปเดต ReVanced Downloaders ที่ติดตั้งแล้วเมื่อแอปพลิเคชันเริ่มต้น</string>\n  <string name=\"manager_prereleases\">ใช้เวอร์ชันก่อนเผยแพร่</string>\n  <string name=\"manager_prereleases_description\">ใช้ ReVanced Manager เวอร์ชันก่อนเผยแพร่</string>\n  <string name=\"prereleases_warning\">เวอร์ชันก่อนเผยแพร่อาจไม่เสถียรและมีข้อบกพร่อง คุณอาจประสบปัญหาแอปขัดข้อง, ข้อมูลสูญหาย หรือปัญหาที่ไม่คาดคิดอื่น ๆ โปรดเปิดใช้งานเฉพาะเมื่อคุณยอมรับความเสี่ยงเหล่านี้ได้</string>\n  <string name=\"changelog\">ดูประวัติการเปลี่ยนแปลง</string>\n  <string name=\"changelog_loading\">กำลังโหลดบันทึกการเปลี่ยนแปลง</string>\n  <string name=\"changelog_download_fail\">ดาวน์โหลดบันทึกการเปลี่ยนแปลงไม่สำเร็จ: %s</string>\n  <string name=\"changelog_description\">ตรวจสอบการเปลี่ยนแปลงล่าสุดในการอัปเดตนี้</string>\n  <string name=\"battery_optimization_notification\">การปรับปรุงแบตเตอรี่ต้องปิดอยู่เพื่อให้ ReVanced Manager ทำงานได้อย่างถูกต้องในเบื้องหลัง คลิกที่นี่เพื่อปิดการปรับปรุง</string>\n  <string name=\"installing_manager_update\">กำลังติดตั้งอัปเดต…</string>\n  <string name=\"downloading_manager_update\">กำลังดาวน์โหลดอัปเดต…</string>\n  <string name=\"download_manager_failed\">ดาวน์โหลดอัปเดตไม่สำเร็จ: %s</string>\n  <string name=\"cancel\">ยกเลิก</string>\n  <string name=\"save\">บันทึก</string>\n  <string name=\"save_with_count\">บันทึก (%1$s)</string>\n  <string name=\"update\">อัปเดต</string>\n  <string name=\"empty\">ว่างเปล่า</string>\n  <string name=\"installing_message\">แตะที่ <b>อัปเดต</b> เมื่อมีข้อความแจ้ง\\nReVanced Manager จะปิดตัวลงเมื่อมีการอัปเดต</string>\n  <string name=\"no_changelogs_found\">ไม่พบบันทึกการเปลี่ยนแปลง</string>\n  <string name=\"just_now\">เมื่อสักครู่นี้</string>\n  <string name=\"minutes_ago\">%s นาทีที่แล้ว</string>\n  <string name=\"hours_ago\">%s ชั่วโมงที่แล้ว</string>\n  <string name=\"days_ago\">%s วันที่แล้ว</string>\n  <string name=\"invalid_date\">วันที่ไม่ถูกต้อง</string>\n  <string name=\"disable_battery_optimization\">ปิดการปรับปรุงแบตเตอรี่</string>\n  <string name=\"input_dialog_value_invalid\">ค่าไม่ถูกต้อง</string>\n  <string name=\"option_required\">ตัวเลือกนี้จำเป็น</string>\n  <string name=\"required_options_screen\">ตัวเลือกที่จำเป็น</string>\n  <string name=\"failed_to_check_updates\">ตรวจสอบอัปเดตไม่สำเร็จ: %s</string>\n  <string name=\"no_update_available\">ไม่มีอัปเดตให้ใช้งาน</string>\n  <string name=\"no_announcements_found\">ไม่พบประกาศ</string>\n  <string name=\"update_check\">กำลังตรวจสอบอัปเดต…</string>\n  <string name=\"dismiss_temporary\">ไม่ใช่ตอนนี้</string>\n  <string name=\"update_available_dialog_description\">มี ReVanced Manager เวอร์ชันใหม่ (%s) ให้ใช้งาน</string>\n  <string name=\"failed_to_download_update\">ดาวน์โหลดอัปเดตไม่สำเร็จ: %s</string>\n  <string name=\"download\">ดาวน์โหลด</string>\n  <string name=\"download_confirmation_metered\">คุณกำลังใช้งานการเชื่อมต่อแบบจำกัดปริมาณข้อมูล และอาจมีค่าบริการข้อมูลจากผู้ให้บริการของคุณ\\n\\nคุณยังต้องการดำเนินการต่อหรือไม่?</string>\n  <string name=\"download_update_confirmation\">ดาวน์โหลดอัปเดตหรือไม่?</string>\n  <string name=\"no_contributors_found\">ไม่พบผู้สนับสนุน</string>\n  <string name=\"select\">เลือก</string>\n  <string name=\"select_deselect_all\">เลือกหรือยกเลิกการเลือกทั้งหมด</string>\n  <string name=\"select_patches_type_dialog_description\">เพิ่มแพตช์ใหม่จาก URL หรือไฟล์ในเครื่อง</string>\n  <string name=\"local_patches_description\">เพิ่มแพตช์จากที่เก็บข้อมูลในเครื่อง</string>\n  <string name=\"remote_patches_description\">เพิ่มแพตช์จาก URL แพตช์สามารถอัปเดตได้โดยอัตโนมัติ</string>\n  <string name=\"recommended\">แนะนำ</string>\n  <string name=\"installation_failed_dialog_title\">ติดตั้งไม่สำเร็จ</string>\n  <string name=\"installation_cancelled_dialog_title\">ยกเลิกการติดตั้ง</string>\n  <string name=\"installation_blocked_dialog_title\">การติดตั้งถูกบล็อก</string>\n  <string name=\"installation_conflict_dialog_title\">การติดตั้งขัดแย้ง</string>\n  <string name=\"installation_incompatible_dialog_title\">การติดตั้งไม่เข้ากัน</string>\n  <string name=\"installation_invalid_dialog_title\">การติดตั้งไม่ถูกต้อง</string>\n  <string name=\"installation_storage_issue_dialog_title\">พื้นที่เก็บข้อมูลไม่เพียงพอ</string>\n  <string name=\"installation_timeout_dialog_title\">การติดตั้งหมดเวลา</string>\n  <string name=\"installation_failed_description\">การติดตั้งล้มเหลวเนื่องจากสาเหตุที่ไม่ทราบสาเหตุ ลองใหม่อีกครั้งหรือไม่?</string>\n  <string name=\"installation_aborted_description\">การติดตั้งถูกยกเลิกด้วยตนเอง ลองใหม่อีกครั้งหรือไม่?</string>\n  <string name=\"installation_blocked_description\">การติดตั้งถูกบล็อก ตรวจสอบการตั้งค่าความปลอดภัยของอุปกรณ์ของคุณแล้วลองใหม่อีกครั้ง</string>\n  <string name=\"installation_conflict_description\">การติดตั้งถูกขัดขวางโดยการติดตั้งแอปที่มีอยู่ ถอนการติดตั้งแอปที่ติดตั้งแล้วลองใหม่อีกครั้งหรือไม่?</string>\n  <string name=\"installation_incompatible_description\">แอปไม่เข้ากันกับอุปกรณ์นี้ ใช้ APK ที่เข้ากันได้กับอุปกรณ์นี้แล้วลองใหม่อีกครั้ง</string>\n  <string name=\"installation_invalid_description\">แอปไม่ถูกต้อง ถอนการติดตั้งแอปแล้วลองใหม่อีกครั้งหรือไม่?</string>\n  <string name=\"installation_storage_issue_description\">ไม่สามารถติดตั้งแอปได้เนื่องจากพื้นที่เก็บข้อมูลไม่เพียงพอ เพิ่มพื้นที่ว่างแล้วลองใหม่อีกครั้ง</string>\n  <string name=\"installation_timeout_description\">การติดตั้งใช้เวลานานเกินไป ลองใหม่อีกครั้งหรือไม่?</string>\n  <string name=\"reinstall\">ติดตั้งใหม่</string>\n  <string name=\"show\">แสดง</string>\n  <string name=\"debugging\">การแก้ไขข้อบกพร่อง</string>\n  <string name=\"about_device\">เกี่ยวกับอุปกรณ์</string>\n  <string name=\"enter_url\">ป้อน URL</string>\n  <string name=\"next\">ถัดไป</string>\n  <string name=\"auto_update\">อัปเดตอัตโนมัติ</string>\n  <string name=\"add_patches\">เพิ่มแพตช์</string>\n  <string name=\"auto_update_description\">อัปเดตโดยอัตโนมัติเมื่อมีเวอร์ชันใหม่ให้ใช้งาน</string>\n  <string name=\"patches_prereleases\">ใช้เวอร์ชันก่อนเผยแพร่</string>\n  <string name=\"patches_prereleases_description\">ใช้เวอร์ชันก่อนเผยแพร่ของ %s</string>\n  <string name=\"patches_url\">URL แพตช์</string>\n  <string name=\"incompatible_patches_dialog\">แพตช์เหล่านี้ไม่เข้ากันกับเวอร์ชันแอปที่เลือก (%1$s)\\n\\nคลิกที่แพตช์เพื่อดูรายละเอียดเพิ่มเติม</string>\n  <string name=\"incompatible_patch\">แพตช์ที่ไม่เข้ากัน</string>\n  <string name=\"any_version\">ใด ๆ</string>\n  <string name=\"never_show_again\">ไม่ต้องแสดงอีก</string>\n  <string name=\"show_manager_update_dialog_on_launch\">แสดงข้อความอัปเดตเมื่อเปิดใช้งาน</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">แสดงการแจ้งเตือนป๊อปอัปเมื่อมีอัปเดตใหม่ให้ใช้งานเมื่อเปิดใช้งาน</string>\n  <string name=\"failed_to_import_keystore\">นำเข้าคีย์สโตร์ไม่สำเร็จ</string>\n  <string name=\"export\">ส่งออก</string>\n  <string name=\"confirm\">ยืนยัน</string>\n  <string name=\"new_announcement\">ประกาศใหม่:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"other\">%d แพทช์</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"other\">ดำเนินการ %d แพทช์</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"other\">%d รายการที่เลือก</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-tr-rTR/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Yamalayıcı</string>\n  <string name=\"patches\">Yamalar</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Manager</string>\n  <string name=\"onboarding_welcome_to\">Hoş geldiniz</string>\n  <string name=\"onboarding_welcome_back\">Merhaba! İşte yeni</string>\n  <string name=\"onboarding_apps_subtitle\">Yamalanacak bir uygulama seçebilir veya bunu daha sonra yapabilirsiniz</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager ve yamaları güncel tutmak için otomatik güncellemeleri yapılandırın</string>\n  <string name=\"onboarding_updates_note\">Cihazınız internete bağlıysa, ReVanced Manager ilk sürümleri indirmek için %s\\'ye bağlanacaktır.</string>\n  <string name=\"retry\">Tekrar dene</string>\n  <string name=\"onboarding_skip\">Şimdilik atla</string>\n  <string name=\"onboarding_recommended_version\">Önerilen sürüm: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">İzinler atlansın mı?</string>\n  <string name=\"onboarding_permissions_skip_description\">Gerekli izinler olmadan bazı özellikler düzgün çalışmayabilir. Bu izinleri daha sonra uygulama ayarlarında verebilirsiniz.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Yine de atla</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager\\'ın düzgün çalışması için birkaç izne ihtiyacı var</string>\n  <string name=\"permission_install_apps\">Bilinmeyen uygulamaları yükle</string>\n  <string name=\"permission_install_apps_description\">Yamalanmış uygulamaları yüklemek için gerekli</string>\n  <string name=\"permission_notifications\">Bildirimler</string>\n  <string name=\"permission_battery\">Pil optimizasyonu</string>\n  <string name=\"permission_battery_description\">Yamalamanın arka planda kesintiye uğramasını önler</string>\n  <string name=\"permission_grant\">Ver</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager indirici sunucusu</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager indiricilerine erişimi kontrol etmek için kullanılır. Yalnızca ReVanced Manager buna sahiptir.</string>\n  <string name=\"toast_copied_to_clipboard\">Kopyalandı!</string>\n  <string name=\"copy_to_clipboard\">Panoya kopyala</string>\n  <string name=\"dashboard\">Kontrol Paneli</string>\n  <string name=\"settings\">Ayarlar</string>\n  <string name=\"select_app\">Bir uygulama seç</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d seçili</string>\n  <string name=\"fab_patch_app\">Bir uygulama yamala</string>\n  <string name=\"fab_add_patches\">Yamalar ekle</string>\n  <string name=\"new_downloader_notification\">Yeni indirici(ler) mevcut. Yapılandırmak için buraya tıklayın.</string>\n  <string name=\"unsupported_architecture_warning\">Bu cihaz mimarisinde yamalama desteklenmiyor ve büyük olasılıkla başarısız olacaktır.</string>\n  <string name=\"import_\">İçe aktar</string>\n  <string name=\"import_patches\">Yamaları içe aktar</string>\n  <string name=\"file_field_set\">Seçili</string>\n  <string name=\"file_field_not_set\">Seçili değil</string>\n  <string name=\"field_not_set\">Ayarlanmadı</string>\n  <string name=\"patches_missing\">Eksik</string>\n  <string name=\"patches_error\">Hata</string>\n  <string name=\"patches_error_description\">Yamalar yüklenemedi. Hatayı görmek için tıklayın</string>\n  <string name=\"patches_not_downloaded\">Yamalar indirilmedi.</string>\n  <string name=\"patches_name_default\">Yamalar</string>\n  <string name=\"patches_name_fallback\">Adsız</string>\n  <string name=\"android_11_bug_dialog_title\">Android 11 hatası</string>\n  <string name=\"android_11_bug_dialog_description\">Uygulama yükleme izni, Android 11 sistemindeki kullanıcı deneyimini olumsuz etkileyecek bir hatayı önlemek için önceden verilmelidir.</string>\n  <string name=\"no_network_toast\">İnternet bağlantısı yok</string>\n  <string name=\"selected_app_meta_any_version\">Mevcut herhangi bir sürüm</string>\n  <string name=\"app_source_dialog_title\">Kaynak seç</string>\n  <string name=\"app_source_dialog_option_auto\">Otomatik</string>\n  <string name=\"app_source_dialog_option_auto_description\">Yüklü uygulamayı kullan, sonra indirilmiş APK\\'yı, sonra mevcut indiricileri</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Uyumlu uygulama veya indirici bulunamadı</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Bağlanan uygulamalar, root erişimi olmadan tekrar yamalanamaz</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Sürüm %s önerilen sürümle eşleşmiyor</string>\n  <string name=\"patch_item_description\">Uygulamayı yamalamaya başla</string>\n  <string name=\"patch_selector_item\">Yamaları seç</string>\n  <string name=\"patch_selector_item_description\">%d yama seçildi</string>\n  <string name=\"patch_selection_changed_warning\">Yama seçimi değiştirildi</string>\n  <string name=\"no_patches_selected\">Hiç yama seçilmedi</string>\n  <string name=\"network_unavailable_warning\">Cihazınız internete bağlı değil. İndirme işlemi başarısız olacaktır.</string>\n  <string name=\"network_metered_warning\">Şu anda tarifeli bir bağlantıdasınız. Hizmet sağlayıcınızdan veri ücretleri uygulanabilir.</string>\n  <string name=\"apk_source_selector_item\">APK kaynağını seç</string>\n  <string name=\"apk_source_auto\">Otomatik</string>\n  <string name=\"apk_source_auto_installed\">Otomatik · Yüklü APK kullanılıyor</string>\n  <string name=\"apk_source_auto_downloaded\">Otomatik · İndirilmiş APK kullanılıyor</string>\n  <string name=\"apk_source_auto_downloader\">Otomatik · Mevcut indirme yöneticileri kullanılarak</string>\n  <string name=\"apk_source_auto_storage\">Otomatik · Depolamadan seç</string>\n  <string name=\"apk_source_downloader\">%s kullanılıyor</string>\n  <string name=\"apk_source_installed\">Yüklü APK kullanılıyor</string>\n  <string name=\"apk_source_local\">Yerel bir APK dosyası kullanılıyor</string>\n  <string name=\"apk_source_downloaded\">Zaten indirildi</string>\n  <string name=\"legacy_import_failed\">Eski ayarlar içe aktarılamadı</string>\n  <string name=\"auto_updates_dialog_title\">Güncellemeleri yapılandır</string>\n  <string name=\"auto_updates_dialog_description\">ReVanced Manager\\'ın aşağıdaki bileşenler için periyodik olarak güncellemeleri kontrol etmesini ister misiniz?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Yamaları</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: İndiriciler</string>\n  <string name=\"auto_updates_dialog_note\">Bu ayarlar daha sonra değiştirilebilir.\n\n    Cihazınız internete bağlıysa, ReVanced Manager ilk sürümleri indirmek için %s\\'ye bağlanacaktır.</string>\n  <string name=\"announcements_filter_tag\">Etikete göre filtrele</string>\n  <string name=\"announcements_show_archived\">Arşivlenenleri göster</string>\n  <string name=\"general\">Genel</string>\n  <string name=\"general_description\">Dil, tema, dinamik renk</string>\n  <string name=\"updates\">Güncellemeler</string>\n  <string name=\"updates_description\">Güncellemeleri denetle ve değişiklik günlüğünü görüntüle</string>\n  <string name=\"downloads\">İndirilenler</string>\n  <string name=\"downloads_description\">İndiriciler ve indirilen uygulamalar</string>\n  <string name=\"import_export\">İçe &amp; dışa aktar</string>\n  <string name=\"import_export_description\">Anahtar deposu, yama seçenekleri ve seçimi</string>\n  <string name=\"advanced\">Gelişmiş</string>\n  <string name=\"advanced_description\">API URL\\'si, bellek sınırı, hata ayıklama</string>\n  <string name=\"safeguards_toggled_warning\">Koruyucular açılıp kapatıldı</string>\n  <string name=\"about\">Hakkında</string>\n  <string name=\"about_app_name\">%1$s hakkında</string>\n  <string name=\"opensource_licenses\">Açık kaynak lisansları</string>\n  <string name=\"opensource_licenses_description\">Bu uygulamayı yapmak için kullanılan tüm kütüphaneleri görüntüle</string>\n  <string name=\"contributors\">Katkıda bulunanlar</string>\n  <string name=\"contributors_description\">ReVanced\\'a katkıda bulunanları görüntüle</string>\n  <string name=\"dynamic_color\">Dinamik renk</string>\n  <string name=\"dynamic_color_description\">Renkleri duvar kağıdına uyarla</string>\n  <string name=\"pure_black_theme\">Saf siyah tema</string>\n  <string name=\"pure_black_theme_description\">Karanlık tema için saf siyah arka planlar kullan</string>\n  <string name=\"theme\">Tema</string>\n  <string name=\"theme_description\">Aydınlık ve karanlık tema arasında seçim yapın</string>\n  <string name=\"language\">Dil</string>\n  <string name=\"language_description\">Uygulamanın görüntüleme dilini seçin</string>\n  <string name=\"language_system_default\">Sistem varsayılanı</string>\n  <string name=\"search_languages\">Dilleri ara…</string>\n  <string name=\"safeguards\">Güvenlik önlemleri</string>\n  <string name=\"patch_compat_check\">Sürüm uyumluluk kontrolünü devre dışı bırak</string>\n  <string name=\"patch_compat_check_description\">Yamaları uyumlu uygulama sürümleriyle sınırlama</string>\n  <string name=\"patch_compat_check_confirmation\">Uyumsuz yamaları seçmek uygulamanın bozulmasına neden olabilir.\n\nYine de devam etmek istiyor musunuz?</string>\n  <string name=\"suggested_version_safeguard\">Önerilen uygulama sürümünü zorunlu kıl</string>\n  <string name=\"suggested_version_safeguard_description\">Önerilen uygulama sürümünün seçimini zorla</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Önerilen sürüm olmayan bir uygulama seçmek beklenmedik sorunlara neden olabilir.\n\nYine de devam etmek istiyor musunuz?</string>\n  <string name=\"patch_selection_safeguard\">Yama seçimini ve seçeneklerini değiştirmeye izin ver</string>\n  <string name=\"patch_selection_safeguard_description\">Yamaların seçilmesini veya seçiminin kaldırılmasını ve seçeneklerin özelleştirilmesini engelleme</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Yama seçimini değiştirmek beklenmedik sorunlara neden olabilir.\n\nYine de etkinleştirilsin mi?</string>\n  <string name=\"universal_patches_safeguard\">Evrensel yamaların kullanılmasına izin ver</string>\n  <string name=\"universal_patches_safeguard_description\">Evrensel yamaların kullanılmasını engelleme</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Evrensel yamalar, belirli uygulamaları hedefleyen yamalar kadar iyi test edilmemiştir.\n\nYine de etkinleştirilsin mi?</string>\n  <string name=\"keystore\">Anahtar deposu</string>\n  <string name=\"patches_selections\">Yama seçimleri</string>\n  <string name=\"import_keystore\">Anahtar deposunu içe aktar</string>\n  <string name=\"import_keystore_description\">Özel bir anahtar deposunu içe aktar</string>\n  <string name=\"import_keystore_dialog_title\">Anahtar deposu kimlik bilgilerini girin</string>\n  <string name=\"import_keystore_dialog_description\">İçe aktarmak için anahtar deposunun kimlik bilgilerini girmeniz gerekecek.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Kullanıcı adı (Takma ad)</string>\n  <string name=\"import_keystore_dialog_password_field\">Şifre</string>\n  <string name=\"import_keystore_dialog_button\">İçe aktar</string>\n  <string name=\"import_keystore_wrong_credentials\">Yanlış anahtar deposu kimlik bilgileri</string>\n  <string name=\"import_keystore_success\">Anahtar deposu içe aktarıldı</string>\n  <string name=\"export_keystore\">Anahtar deposunu dışa aktar</string>\n  <string name=\"export_keystore_description\">Mevcut anahtar deposunu dışa aktar</string>\n  <string name=\"export_keystore_unavailable\">Dışa aktarılacak anahtar deposu yok</string>\n  <string name=\"export_keystore_success\">Anahtar deposu dışa aktarıldı</string>\n  <string name=\"regenerate_keystore\">Anahtar deposunu yeniden oluştur</string>\n  <string name=\"regenerate_keystore_description\">Yeni bir anahtar deposu oluştur</string>\n  <string name=\"regenerate_keystore_dialog_description\">Manager\\'in yamalama işlemi sırasında kullanacağı anahtar deponuzu yeniden oluşturmak üzeresiniz.\n\nDaha önce bu kaynaktan yüklenmiş uygulamaları güncelleyemeyeceksiniz.</string>\n  <string name=\"regenerate_keystore_success\">Anahtar deposu başarıyla değiştirildi</string>\n  <string name=\"import_patch_selection\">Yama seçimini içe aktar</string>\n  <string name=\"import_patch_selection_description\">Yama seçimini bir JSON dosyasından içe aktar</string>\n  <string name=\"import_patch_selection_fail\">Yama seçimi içe aktarılamadı: %s</string>\n  <string name=\"import_patch_selection_success\">Yama seçimi içe aktarıldı</string>\n  <string name=\"select_bundle_for_import\">İçe aktarılacak paketi seçin</string>\n  <string name=\"export_patch_selection\">Yama seçimini dışa aktar</string>\n  <string name=\"export_patch_selection_description\">Yama seçimini bir JSON dosyasına dışa aktar</string>\n  <string name=\"export_patch_selection_fail\">Yama seçimi dışa aktarılamadı: %s</string>\n  <string name=\"export_patch_selection_success\">Yama seçimi dışa aktarıldı</string>\n  <string name=\"select_bundle_for_export\">Dışa aktarılacak paketi seçin</string>\n  <string name=\"patch_selection_packages\">Kaydedilmiş seçimlere sahip uygulamalar</string>\n  <string name=\"patch_selection_entries\">Toplam seçilen yamalar</string>\n  <string name=\"reset_configuration\">Yapılandırmayı sıfırla</string>\n  <string name=\"reset_patch_selection\">Yama seçimleri</string>\n  <string name=\"reset_patch_selection_description\">Kaydedilmiş yama seçimini sıfırla</string>\n  <string name=\"reset_patch_options\">Yama seçenekleri</string>\n  <string name=\"reset_patch_options_description\">Kaydedilmiş yama seçeneklerini sıfırla</string>\n  <string name=\"reset_patch_selection_success\">Yama seçimi sıfırlandı</string>\n  <string name=\"patch_selection_reset_all\">Yama seçimini küresel olarak sıfırla</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Tüm yama seçimlerini sıfırlamak üzeresiniz. Her yamayı tekrar manuel olarak seçmeniz gerekecek.</string>\n  <string name=\"patch_selection_reset_all_description\">Tüm yama seçimlerini sıfırlar</string>\n  <string name=\"patch_selection_reset_package\">Uygulama için yama seçimini sıfırla</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">\\\"%s\\\" uygulaması için yama seçimini sıfırlamak üzeresiniz. Her yamayı tekrar manuel olarak seçmeniz gerekecek.</string>\n  <string name=\"patch_selection_reset_package_description\">Tek bir uygulama için yama seçimini sıfırlar</string>\n  <string name=\"patch_selection_reset_patches\">Yama seçimini sıfırla (tek)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">\\\"%s\\\" için yama seçimini sıfırlamak üzeresiniz. Her yamayı manuel olarak yeniden seçmeniz gerekecektir.</string>\n  <string name=\"patch_selection_reset_patches_description\">Belirli bir yama koleksiyonu için yama seçimini sıfırlar</string>\n  <string name=\"patch_options_reset_package\">Uygulama için yama seçeneklerini sıfırla</string>\n  <string name=\"patch_options_reset_package_dialog_description\">\\\"%s\\\" uygulaması için yama seçeneklerini sıfırlamak üzeresiniz. Her seçeneği yeniden uygulamanız gerekecektir.</string>\n  <string name=\"patch_options_reset_package_description\">Tek bir uygulama için yama seçeneklerini sıfırlar</string>\n  <string name=\"patch_options_reset_patches\">Yama seçeneklerini sıfırla (tek)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">\\\"%s\\\" için yama seçeneklerini sıfırlamak üzeresiniz. Her seçeneği yeniden uygulamanız gerekecektir.</string>\n  <string name=\"patch_options_reset_patches_description\">Belirli bir yama koleksiyonu için yama seçeneklerini sıfırlar</string>\n  <string name=\"patch_options_reset_all\">Yama seçeneklerini küresel olarak sıfırla</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Tüm yama seçeneklerini sıfırlamak üzeresiniz. Her seçeneği yeniden uygulamanız gerekecektir.</string>\n  <string name=\"patch_options_reset_all_description\">Tüm yama seçeneklerini sıfırlar</string>\n  <string name=\"downloaders\">İndiriciler</string>\n  <string name=\"downloader_prereleases\">Ön sürümleri kullan</string>\n  <string name=\"downloader_prereleases_description\">Ana indiricinin ön sürüm versiyonlarını kullan</string>\n  <string name=\"downloader_state_loaded\">Yüklendi</string>\n  <string name=\"downloader_state_failed\">Yüklenemedi. Daha fazla ayrıntı için tıklayın</string>\n  <string name=\"downloader_state_missing\">Eksik</string>\n  <string name=\"downloader_delete_apps_title\">Seçili uygulamaları sil</string>\n  <string name=\"downloader_delete_apps_description\">Seçili uygulamaları silmek istediğinizden emin misiniz?</string>\n  <string name=\"downloader_delete_single_description\">\\\"%s\\\" silmek istediğinizden emin misiniz?</string>\n  <string name=\"downloader_settings_no_apps\">İndirilmiş uygulama bulunamadı.</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager aracılığıyla indirilen uygulamalar burada görünecektir.</string>\n  <string name=\"downloader_url\">İndirici URL\\'si</string>\n  <string name=\"downloader_add\">İndirici Ekle</string>\n  <string name=\"select_downloader_type_dialog_description\">URL\\'den veya yerel dosyalardan yeni indiriciler ekle</string>\n  <string name=\"local_downloaders_description\">Yerel depolamadan indiriciler ekle.</string>\n  <string name=\"remote_downloaders_description\">URL\\'den indiriciler ekle. Otomatik olarak güncellenebilir.</string>\n  <string name=\"install_revanced_downloaders\">Uygulamaları doğrudan ReVanced Manager içinde almak için indiricileri yükleyin.</string>\n  <string name=\"install_revanced_downloader\">ReVanced İndiricilerini Yükle</string>\n  <string name=\"cancel_downloader_install_title\">İndiriciler kurulumunu iptal et?</string>\n  <string name=\"cancel_downloader_install_description\">İndiriciler kurulumu devam ediyor. Şimdi çıkarsanız indirme iptal edilecektir.</string>\n  <string name=\"downloader_sources_unavailable_title\">Bu indiriciler eksik</string>\n  <string name=\"downloader_sources_unavailable_description\">Düzeltmek için güncelle düğmesine tıklayın.</string>\n  <string name=\"downloader_update_failed\">İndirici güncellenemedi: %s</string>\n  <string name=\"downloader_replace_fail\">İndirici içe aktarılamadı: %s</string>\n  <string name=\"search_apps\">Uygulamaları ara…</string>\n  <string name=\"loading_body\">Yükleniyor…</string>\n  <string name=\"downloading_patches\">Yamalar indiriliyor…</string>\n  <string name=\"options\">Seçenekler</string>\n  <string name=\"ok\">Tamam</string>\n  <string name=\"yes\">Evet</string>\n  <string name=\"no\">Hayır</string>\n  <string name=\"edit\">Düzenle</string>\n  <string name=\"dialog_input_placeholder\">Değer</string>\n  <string name=\"reset\">Sıfırla</string>\n  <string name=\"share\">Paylaş</string>\n  <string name=\"patch\">Yamala</string>\n  <string name=\"select_from_storage\">Depolamadan seç</string>\n  <string name=\"select_from_storage_description\">Dosya seçiciyi kullanarak depolamadan bir APK dosyası seçin</string>\n  <string name=\"suggested_version_info\">Önerilen sürüm: %s</string>\n  <string name=\"type_anything\">Devam etmek için bir şey yazın</string>\n  <string name=\"search\">Yamaları ara…</string>\n  <string name=\"apply\">Uygula</string>\n  <string name=\"help\">Yardım</string>\n  <string name=\"back\">Geri</string>\n  <string name=\"warning\">Uyarı</string>\n  <string name=\"add\">Ekle</string>\n  <string name=\"enable\">Etkinleştir</string>\n  <string name=\"disable\">Devre dışı bırak</string>\n  <string name=\"close\">Kapat</string>\n  <string name=\"clear\">Temizle</string>\n  <string name=\"system\">Sistem</string>\n  <string name=\"light\">Aydınlık</string>\n  <string name=\"dark\">Karanlık</string>\n  <string name=\"appearance\">Görünüm</string>\n  <string name=\"networking\">Ağ</string>\n  <string name=\"allow_metered_networks\">Kısıtlı ağlara izin ver</string>\n  <string name=\"allow_metered_networks_description\">Kısıtlı ağlarda otomatik güncellemelere izin verir.\nUygulama, manuel işlemler için yine de kısıtlı ağlar hakkında uyarıda bulunabilir.</string>\n  <string name=\"downloaded_apps\">İndirilen uygulamalar</string>\n  <string name=\"process_runtime\">Patcher\\'i başka bir işlemde çalıştır (deneysel)</string>\n  <string name=\"process_runtime_description\">Bu daha hızlıdır ve Patcher\\'in daha fazla bellek kullanmasına olanak tanır</string>\n  <string name=\"process_runtime_memory_limit\">Patcher işlemi bellek sınırı</string>\n  <string name=\"process_runtime_memory_limit_description\">Patcher işleminin kullanabileceği maksimum bellek miktarı</string>\n  <string name=\"debug_logs_export\">Hata ayıklama kayıtlarını dışa aktar</string>\n  <string name=\"debug_logs_export_read_failed\">Günlükler okunamadı (çıkış kodu %d)</string>\n  <string name=\"debug_logs_export_failed\">Günlükler dışa aktarılamadı</string>\n  <string name=\"debug_logs_export_success\">Günlükler dışa aktarıldı</string>\n  <string name=\"api_url\">API URL\\'si</string>\n  <string name=\"api_url_description\">Gerekli dosyaları indirmek için kullanılan API</string>\n  <string name=\"api_url_dialog_title\">API URL\\'sini değiştir</string>\n  <string name=\"api_url_dialog_description\">ReVanced Manager API URL\\'sini değiştirin.\nReVanced Manager, yamaları ve güncellemeleri indirmek için API\\'yi kullanır.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager, yamaları ve güncellemeleri indirmek için API\\'ye bağlanır. Güvendiğinizden emin olun.</string>\n  <string name=\"api_url_dialog_save\">Ayarla</string>\n  <string name=\"api_url_dialog_reset\">API URL\\'sini sıfırla</string>\n  <string name=\"device\">Cihaz</string>\n  <string name=\"device_android_version\">Android sürümü</string>\n  <string name=\"device_model\">Model</string>\n  <string name=\"device_architectures\">CPU Mimarileri</string>\n  <string name=\"device_memory_limit\">Bellek sınırları</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Normal) - %2$dMB (Büyük)</string>\n  <string name=\"patches_force_download\">Tüm yamaları indirmeyi zorla</string>\n  <string name=\"patches_reset\">Yamaları sıfırla</string>\n  <string name=\"reset_onboarding\">İlk kurulumu sıfırla</string>\n  <string name=\"reset_onboarding_description\">Bir sonraki uygulama başlatmada ilk kurulum ekranını göster</string>\n  <string name=\"patching\">Yamalama</string>\n  <string name=\"signing\">İmzalama</string>\n  <string name=\"storage\">Depolama</string>\n  <string name=\"no_patch_found\">Yama bulunamadı. Yamalarınızı kontrol edin</string>\n  <string name=\"tab_apps\">Uygulamalar</string>\n  <string name=\"tab_patches\">Yamalar</string>\n  <string name=\"delete\">Sil</string>\n  <string name=\"refresh\">Yenile</string>\n  <string name=\"continue_anyways\">Yine de devam et</string>\n  <string name=\"download_another_version\">Başka bir sürüm indir</string>\n  <string name=\"download_app\">Uygulamayı indir</string>\n  <string name=\"download_apk\">APK dosyasını indir</string>\n  <string name=\"patches_download_fail\">Yamalar indirilemedi: %s</string>\n  <string name=\"api_not_working_title\">API hizmeti şu anda devre dışı</string>\n  <string name=\"api_not_working_description\">Bazı özellikler etkilenebilir. Ayarlardan bağlantınızı veya API URL\\'nizi kontrol edin.</string>\n  <string name=\"patches_replace_fail\">Yamalar içe aktarılamadı: %s</string>\n  <string name=\"no_patched_apps_found\">Yamalanmış uygulama bulunamadı</string>\n  <string name=\"no_patched_apps_description\">Şu anda bildiğimiz kadarıyla yamalanmış uygulamanız yok. İlk uygulamanızı yamalayarak bunu değiştirin!</string>\n  <string name=\"patched_apps_section_title\">Yamalı uygulamalar</string>\n  <string name=\"patchable_apps_section_title\">Yamalanabilecek uygulamalar</string>\n  <string name=\"no_patches_found\">Yama bulunamadı</string>\n  <string name=\"no_patches_description\">Henüz hiç yamanız yok. Aşağıdaki düğmeye dokunarak yama ekleyin!</string>\n  <string name=\"tap_on_patches\">Yamalar hakkında daha fazla bilgi almak için yamalara dokunun</string>\n  <string name=\"patches_selected\">%s seçili</string>\n  <string name=\"incompatible_patches\">Uyumsuz yamalar</string>\n  <string name=\"universal_patches\">Evrensel yamalar</string>\n  <string name=\"patch_selection_reset_toast\">Yama seçimi ve seçenekleri önerilen varsayılanlara sıfırlandı</string>\n  <string name=\"patch_options_reset_toast\">Yama seçenekleri sıfırlandı</string>\n  <string name=\"non_suggested_version_warning_title\">Önerilmeyen sürüm</string>\n  <string name=\"non_suggested_version_warning_description\">Seçtiğiniz uygulamanın sürümü, önerilen sürümle eşleşmiyor.\nLütfen önerilen sürümü kullanın: %s\n\nYine de devam etmek için gelişmiş ayarlarda \\\"Önerilen uygulama sürümünü zorunlu kıl\\\" seçeneğini devre dışı bırakın.</string>\n  <string name=\"selection_warning_title\">Varsayılanları kullanma bırakılsın mı?</string>\n  <string name=\"selection_warning_description\">Varsayılan yama seçimi ve seçeneklerini kullanmanız önerilir. Bunları değiştirmek beklenmedik sorunlara neden olabilir.\n\nYamaları değiştirmeden önce gelişmiş ayarlarda \\\"Yama seçimi ve seçeneklerini değiştirmeye izin ver\\\" seçeneğini açmanız gerekir.</string>\n  <string name=\"universal_patch_warning_description\">Evrensel yamaların daha genel bir kullanımı vardır ve belirli uygulamaları hedefleyen yamalar kadar güvenilir çalışmazlar. Bunları kullanırken sorunlarla karşılaşabilirsiniz.\n\nEvrensel yamaları kullanmadan önce gelişmiş ayarlarda \\\"Evrensel yamaları kullanmaya izin ver\\\" seçeneğini açmanız gerekir.</string>\n  <string name=\"this_version\">Bu sürüm</string>\n  <string name=\"universal\">Herhangi bir uygulama</string>\n  <string name=\"search_patches\">Yamaları ara</string>\n  <string name=\"app_version_not_compatible\">Bu yama, seçilen uygulama sürümüyle (%1$s) uyumlu değil\n\nYalnızca şu sürüm(ler) ile uyumludur: %2$s</string>\n  <string name=\"continue_with_version\">Bu sürümle devam edilsin mi?</string>\n  <string name=\"version_not_compatible\">Bu sürümle (%s) bütün yamalar uyumlu değil. Yine de devam etmek ister misiniz?</string>\n  <string name=\"download_application\">Uygulama indirilsin mi?</string>\n  <string name=\"app_not_installed\">Seçtiğiniz uygulama yüklü değil. İndirmek ister misiniz?</string>\n  <string name=\"failed_to_load_apk\">APK yüklenemedi</string>\n  <string name=\"split_apk_not_supported\">Bölünmüş APK\\'lara yama uygulanamaz</string>\n  <string name=\"loading\">Yükleniyor…</string>\n  <string name=\"not_installed\">Yüklü değil</string>\n  <string name=\"installed\">Yüklü</string>\n  <string name=\"app_info\">Uygulama bilgisi</string>\n  <string name=\"uninstall\">Kaldır</string>\n  <string name=\"unpatch\">Yamayı kaldır</string>\n  <string name=\"repatch\">Yeniden yamala</string>\n  <string name=\"install_type\">Kurulum türü</string>\n  <string name=\"package_name\">Paket adı</string>\n  <string name=\"original_package_name\">Orijinal paket adı</string>\n  <string name=\"applied_patches\">Uygulanan yamalar</string>\n  <string name=\"view_applied_patches\">Uygulanan yamaları görüntüle</string>\n  <string name=\"default_install\">Varsayılan</string>\n  <string name=\"mount_install\">Bağla</string>\n  <string name=\"mounted\">Bağlandı</string>\n  <string name=\"not_mounted\">Bağlanmadı</string>\n  <string name=\"mount\">Bağla</string>\n  <string name=\"unmount\">Bağlamayı kaldır</string>\n  <string name=\"failed_to_mount\">Bağlanamadı: %s</string>\n  <string name=\"failed_to_unmount\">Bağlama kaldırılamadı: %s</string>\n  <string name=\"unpatch_app\">Uygulamanın yaması kaldırılsın mı?</string>\n  <string name=\"unpatch_description\">Bu uygulamanın yamasını kaldırmak istediğinizden emin misiniz?</string>\n  <string name=\"downloader_invalid_version\">İndirici doğru sürümü indirmedi</string>\n  <string name=\"downloader_app_not_found\">İndirici uygulamayı bulmadı</string>\n  <string name=\"downloader_error\">İndirici hatası: %s</string>\n  <string name=\"no_downloaders_installed\">Hiç uygulama indiricisi yüklü değil!</string>\n  <string name=\"no_downloaders_trusted\">Hiçbir uygulama indiricisine güvenilmedi! Lütfen ayarlarınızı kontrol edin.</string>\n  <string name=\"already_patched\">Zaten yamalanmış</string>\n  <string name=\"patch_selector_sheet_filter_title\">Filtre</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Uyumluluk</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paketler</string>\n  <string name=\"patch_selector_sheet_actions_title\">Eylemler</string>\n  <string name=\"restore_default_selection\">Varsayılan seçimi geri yükle</string>\n  <string name=\"deselect_all\">Tüm seçimleri kaldır</string>\n  <string name=\"invert_selection\">Seçimi tersine çevir</string>\n  <string name=\"deselect_all_except\">%s hariç tüm seçimleri kaldır</string>\n  <string name=\"scope_dialog_title\">Şuna uygula</string>\n  <string name=\"scope_all_patches\">Tüm yamalar</string>\n  <string name=\"scope_bundle_patches\">Yalnızca %s</string>\n  <string name=\"string_option_menu_description\">Daha fazla seçenek</string>\n  <string name=\"option_preset_custom_value\">Özel değer</string>\n  <string name=\"path_selector\">Depolamadan seç</string>\n  <string name=\"path_selector_parent_dir\">Önceki dizin</string>\n  <string name=\"path_selector_dirs\">Dizinler</string>\n  <string name=\"path_selector_files\">Dosyalar</string>\n  <string name=\"show_password_field\">Şifreyi göster</string>\n  <string name=\"hide_password_field\">Şifreyi gizle</string>\n  <string name=\"installer\">Yükleyici</string>\n  <string name=\"install_app\">Yükle</string>\n  <string name=\"install_app_success\">Uygulama yüklendi</string>\n  <string name=\"install_app_fail\">Uygulama yüklenemedi: %s</string>\n  <string name=\"reinstall_app_fail\">Uygulama yeniden yüklenemedi: %s</string>\n  <string name=\"uninstall_app_fail\">Uygulama kaldırılamadı: %s</string>\n  <string name=\"open_app\">Aç</string>\n  <string name=\"save_apk\">APK\\'yı kaydet</string>\n  <string name=\"save_apk_success\">APK kaydedildi</string>\n  <string name=\"sign_fail\">APK imzalanamadı: %s</string>\n  <string name=\"save_logs\">Günlükleri kaydet</string>\n  <string name=\"save_as_file\">Dosyalara kaydet</string>\n  <string name=\"export_patcher_logs\">Patcher günlüklerini dışa aktar</string>\n  <string name=\"save_logs_success\">Günlükler kaydedildi</string>\n  <string name=\"downloader_activity_dialog_body\">Bu indiriciyle devam etmek için kullanıcı etkileşimi gereklidir.</string>\n  <string name=\"select_install_type\">Yükleme tipini seçin</string>\n  <string name=\"patcher_step_group_preparing\">Hazırlama</string>\n  <string name=\"patcher_step_load_patches\">Yamaları yükle</string>\n  <string name=\"patcher_step_unpack\">Yamalayıcıyı hazırla</string>\n  <string name=\"patcher_step_group_patching\">Yamalama</string>\n  <string name=\"patcher_step_group_saving\">Kaydetme</string>\n  <string name=\"patcher_step_write_patched\">Yamalanmış APK dosyasını yaz</string>\n  <string name=\"patcher_step_sign_apk\">Yamalanmış APK dosyasını imzala</string>\n  <string name=\"patcher_notification_title\">Yama uygulanıyor…</string>\n  <string name=\"patcher_notification_text\">Yamalayıcıya dönmek için dokunun</string>\n  <string name=\"patcher_stop_confirm_title\">Yamalayıcıyı durdur</string>\n  <string name=\"patcher_stop_confirm_description\">Yama işlemini durdurmak istediğinizden emin misiniz?</string>\n  <string name=\"patcher_install_in_progress\">Kurulum devam ediyor. Lütfen bekleyin</string>\n  <string name=\"execute_patches\">Yamaları uygula</string>\n  <string name=\"executing_patch\">%s uygulanıyor</string>\n  <string name=\"failed_to_execute_patch\">%s yürütülemedi</string>\n  <string name=\"step_completed\">tamamlandı</string>\n  <string name=\"step_failed\">başarısız</string>\n  <string name=\"step_running\">çalışıyor</string>\n  <string name=\"step_waiting\">bekliyor</string>\n  <string name=\"expand_content\">genişlet</string>\n  <string name=\"collapse_content\">daralt</string>\n  <string name=\"drag_handle\">yeniden sırala</string>\n  <string name=\"more\">Daha fazla</string>\n  <string name=\"less\">Daha az</string>\n  <string name=\"continue_\">Devam et</string>\n  <string name=\"dismiss\">Yok say</string>\n  <string name=\"view_announcement\">Duyuruyu görüntüle</string>\n  <string name=\"permanent_dismiss\">Bunu tekrar gösterme</string>\n  <string name=\"donate\">Bağış yap</string>\n  <string name=\"website\">Web sitesi</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">İletişim</string>\n  <string name=\"license\">Lisans</string>\n  <string name=\"source\">Kaynak</string>\n  <string name=\"repository\">Depo</string>\n  <string name=\"bundle_information_by_author\">Yazan: %1$s</string>\n  <string name=\"version\">Sürüm</string>\n  <string name=\"version_compatibility_warning\">Seçilen sürüm, seçilen yamalarla uyumsuz olabilir</string>\n  <string name=\"submit_feedback\">Sorun veya geri bildirim gönder</string>\n  <string name=\"submit_feedback_description\">Bu uygulamayı geliştirmemize yardımcı olun</string>\n  <string name=\"developer_options\">Geliştirici seçenekleri</string>\n  <string name=\"developer_options_description\">Hataları ayıklamak için seçenekler</string>\n  <string name=\"patches_update_success\">Güncelleme başarılı</string>\n  <string name=\"patches_update_unavailable\">Mevcut güncelleme yok</string>\n  <string name=\"view_patches\">Yamaları görüntüle</string>\n  <string name=\"patches_view_any_version\">Herhangi bir sürüm</string>\n  <string name=\"patches_view_any_package\">Herhangi bir paket</string>\n  <string name=\"patches_delete_single_dialog_description\">\\\"%s\\\" silmek istediğinizden emin misiniz?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Seçilen yamaları silmek istediğinizden emin misiniz?</string>\n  <string name=\"announcements\">Duyurular</string>\n  <string name=\"archive\">Arşiv</string>\n  <string name=\"about_revanced_manager\">ReVanced Manager hakkında</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager, Android uygulamalarını yamalamak için ReVanced Patcher kullanan bir Android uygulamasıdır. Özel yamalarla uygulamaları indirmenize ve yamalamanıza, ayrıca yama sürecini yönetmenize olanak tanır.</string>\n  <string name=\"developer_options_taps\">%d dokunuş kaldı</string>\n  <string name=\"developer_options_enabled\">Geliştirici seçenekleri etkinleştirildi</string>\n  <string name=\"developer_options_already_enabled\">Geliştirici seçenekleri zaten etkinleştirilmiş</string>\n  <string name=\"update_available\">Bir güncelleme mevcut</string>\n  <string name=\"current_version\">Mevcut sürüm: %s</string>\n  <string name=\"new_version\">Yeni sürüm: %s</string>\n  <string name=\"ready_to_install_update\">Güncelleme yüklemeye hazır</string>\n  <string name=\"update_completed\">Güncelleme yüklendi</string>\n  <string name=\"install_update_manager_failed\">Güncelleme yüklenemedi</string>\n  <string name=\"manual_update_check\">Güncellemeleri denetle</string>\n  <string name=\"view_update\">Güncellemeyi görüntüle</string>\n  <string name=\"manual_update_check_description\">Güncellemeleri manuel olarak denetle</string>\n  <string name=\"update_checking_manager\">Açılışta güncellemeleri denetle</string>\n  <string name=\"update_checking_manager_description\">Uygulama başladığında ReVanced Manager\\'ın yeni sürümlerini denetle</string>\n  <string name=\"update_checking_downloader\">Başlatmada ReVanced İndiricilerinin güncellemelerini denetle</string>\n  <string name=\"update_checking_downloader_description\">Uygulama başladığında yüklü ReVanced İndiricilerinin güncellemelerini denetle</string>\n  <string name=\"manager_prereleases\">Ön sürümleri kullan</string>\n  <string name=\"manager_prereleases_description\">ReVanced Manager\\'ın ön sürüm versiyonlarını kullan</string>\n  <string name=\"prereleases_warning\">Ön sürüm sürümleri kararsız olabilir ve hatalar içerebilir. Çökmeler, veri kaybı veya diğer beklenmedik sorunlar yaşayabilirsiniz. Yalnızca bu riskleri kabul ediyorsanız etkinleştirin.</string>\n  <string name=\"changelog\">Değişiklik günlüğünü görüntüle</string>\n  <string name=\"changelog_loading\">Değişiklik günlüğü yükleniyor</string>\n  <string name=\"changelog_download_fail\">Değişiklik günlüğü indirilemedi: %s</string>\n  <string name=\"changelog_description\">Bu güncellemedeki son değişikliklere göz atın</string>\n  <string name=\"battery_optimization_notification\">ReVanced Manager\\'in arka planda düzgün çalışabilmesi için pil optimizasyonları kapatılmalıdır. Optimizasyonları kapatmak için buraya tıklayın.</string>\n  <string name=\"installing_manager_update\">Güncelleme yükleniyor…</string>\n  <string name=\"downloading_manager_update\">Güncelleme indiriliyor…</string>\n  <string name=\"download_manager_failed\">Güncelleme indirilemedi: %s</string>\n  <string name=\"cancel\">İptal</string>\n  <string name=\"save\">Kaydet</string>\n  <string name=\"save_with_count\">Kaydet (%1$s)</string>\n  <string name=\"update\">Güncelle</string>\n  <string name=\"empty\">Boş</string>\n  <string name=\"installing_message\">İstendiğinde <b>Güncelle</b>\\'ye dokunun.\nReVanced Manager güncellenirken kapanacaktır.</string>\n  <string name=\"no_changelogs_found\">Değişiklik günlüğü bulunamadı</string>\n  <string name=\"just_now\">Şimdi</string>\n  <string name=\"minutes_ago\">%sdk önce</string>\n  <string name=\"hours_ago\">%ssa önce</string>\n  <string name=\"days_ago\">%sg önce</string>\n  <string name=\"invalid_date\">Geçersiz tarih</string>\n  <string name=\"disable_battery_optimization\">Pil optimizasyonunu devre dışı bırak</string>\n  <string name=\"input_dialog_value_invalid\">Geçersiz değer</string>\n  <string name=\"option_required\">Bu seçenek gereklidir</string>\n  <string name=\"required_options_screen\">Gerekli seçenekler</string>\n  <string name=\"failed_to_check_updates\">Güncellemeler denetlenemedi: %s</string>\n  <string name=\"no_update_available\">Mevcut güncelleme yok</string>\n  <string name=\"no_announcements_found\">Duyuru bulunamadı</string>\n  <string name=\"update_check\">Güncellemeler denetleniyor…</string>\n  <string name=\"dismiss_temporary\">Şimdi değil</string>\n  <string name=\"update_available_dialog_description\">ReVanced Manager\\'in yeni bir sürümü (%s) mevcut.</string>\n  <string name=\"failed_to_download_update\">Güncelleme indirilemedi: %s</string>\n  <string name=\"download\">İndir</string>\n  <string name=\"download_confirmation_metered\">Şu anda tarifeli bir bağlantıdasınız ve hizmet sağlayıcınızdan veri ücretleri uygulanabilir.\n\nYine de devam etmek ister misiniz?</string>\n  <string name=\"download_update_confirmation\">Güncelleme indirilsin mi?</string>\n  <string name=\"no_contributors_found\">Katkıda bulunan bulunamadı</string>\n  <string name=\"select\">Seç</string>\n  <string name=\"select_deselect_all\">Tümünü seç veya tümünün seçimini kaldır</string>\n  <string name=\"select_patches_type_dialog_description\">URL\\'den veya yerel dosyalardan yeni yamalar ekle</string>\n  <string name=\"local_patches_description\">Yerel depolamadan yamalar ekle.</string>\n  <string name=\"remote_patches_description\">URL\\'den yamalar ekle. Yamalar otomatik olarak güncellenebilir.</string>\n  <string name=\"recommended\">Önerilen</string>\n  <string name=\"installation_failed_dialog_title\">Yükleme başarısız oldu</string>\n  <string name=\"installation_cancelled_dialog_title\">Yükleme iptal edildi</string>\n  <string name=\"installation_blocked_dialog_title\">Yükleme engellendi</string>\n  <string name=\"installation_conflict_dialog_title\">Yükleme çakışması</string>\n  <string name=\"installation_incompatible_dialog_title\">Yükleme uyumsuz</string>\n  <string name=\"installation_invalid_dialog_title\">Yükleme geçersiz</string>\n  <string name=\"installation_storage_issue_dialog_title\">Yeterli depolama alanı yok</string>\n  <string name=\"installation_timeout_dialog_title\">Yükleme zaman aşımına uğradı</string>\n  <string name=\"installation_failed_description\">Yükleme bilinmeyen bir nedenden dolayı başarısız oldu. Tekrar denensin mi?</string>\n  <string name=\"installation_aborted_description\">Yükleme manuel olarak iptal edildi. Tekrar denensin mi?</string>\n  <string name=\"installation_blocked_description\">Yükleme engellendi. Cihazınızın güvenlik ayarlarını gözden geçirin ve tekrar deneyin.</string>\n  <string name=\"installation_conflict_description\">Yükleme, uygulamanın mevcut bir kurulumu tarafından engellendi. Yüklü uygulamayı kaldırıp tekrar denemek ister misiniz?</string>\n  <string name=\"installation_incompatible_description\">Uygulama bu cihazla uyumlu değil. Bu cihazla uyumlu bir APK kullanın ve tekrar deneyin.</string>\n  <string name=\"installation_invalid_description\">Uygulama geçersiz. Uygulamayı kaldırıp tekrar denemek ister misiniz?</string>\n  <string name=\"installation_storage_issue_description\">Yetersiz depolama alanı nedeniyle uygulama yüklenemedi. Biraz yer açın ve tekrar deneyin.</string>\n  <string name=\"installation_timeout_description\">Yükleme çok uzun sürdü. Tekrar denensin mi?</string>\n  <string name=\"reinstall\">Yeniden yükle</string>\n  <string name=\"show\">Göster</string>\n  <string name=\"debugging\">Hata ayıklama</string>\n  <string name=\"about_device\">Cihaz hakkında</string>\n  <string name=\"enter_url\">URL girin</string>\n  <string name=\"next\">İleri</string>\n  <string name=\"auto_update\">Otomatik güncelleme</string>\n  <string name=\"add_patches\">Yamaları ekle</string>\n  <string name=\"auto_update_description\">Yeni bir sürüm mevcut olduğunda otomatik olarak güncelle</string>\n  <string name=\"patches_prereleases\">Ön sürümleri kullan</string>\n  <string name=\"patches_prereleases_description\">%s\\'in ön sürüm versiyonlarını kullan</string>\n  <string name=\"patches_url\">Yamalar URL\\'si</string>\n  <string name=\"incompatible_patches_dialog\">Bu yamalar, seçilen uygulama sürümüyle (%1$s) uyumlu değil.\n\nDaha fazla ayrıntı görmek için yamalara tıklayın.</string>\n  <string name=\"incompatible_patch\">Uyumsuz yama</string>\n  <string name=\"any_version\">Herhangi</string>\n  <string name=\"never_show_again\">Bir daha asla gösterme</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Açılışta güncelleme mesajını göster</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Yeni bir güncelleme mevcut olduğunda açılışta bildirim göster</string>\n  <string name=\"failed_to_import_keystore\">Anahtar deposu içe aktarılamadı</string>\n  <string name=\"export\">Dışa aktar</string>\n  <string name=\"confirm\">Onayla</string>\n  <string name=\"new_announcement\">Yeni duyuru:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d yama</item>\n    <item quantity=\"other\">%d yama</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d yama uygula</item>\n    <item quantity=\"other\">%d yama uygula</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d seçili</item>\n    <item quantity=\"other\">%d seçili</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-uk-rUA/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Патчер</string>\n  <string name=\"patches\">Патчі</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Менеджер</string>\n  <string name=\"onboarding_welcome_to\">Ласкаво просимо до</string>\n  <string name=\"onboarding_welcome_back\">Привіт! Це новий</string>\n  <string name=\"onboarding_apps_subtitle\">Ви можете вибрати програму для пропатчування зараз або зробити це пізніше</string>\n  <string name=\"onboarding_updates_subtitle\">Налаштуйте автоматичні оновлення, щоб ReVanced Manager та патчі були актуальними</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager підключиться до %s, щоб завантажити початкові версії, якщо ваш пристрій підключено до інтернету.</string>\n  <string name=\"retry\">Повторити</string>\n  <string name=\"onboarding_skip\">Пропустити зараз</string>\n  <string name=\"onboarding_recommended_version\">Рекомендована версія: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Пропустити дозволи?</string>\n  <string name=\"onboarding_permissions_skip_description\">Без необхідних дозволів деякі функції можуть працювати некоректно. Ви можете надати їх пізніше в налаштуваннях програми.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Все одно пропустити</string>\n  <string name=\"onboarding_permissions_subtitle\">Для коректної роботи ReVanced Manager потрібні деякі дозволи</string>\n  <string name=\"permission_install_apps\">Встановлення невідомих програм</string>\n  <string name=\"permission_install_apps_description\">Потрібно для встановлення пропатчених застосунків</string>\n  <string name=\"permission_notifications\">Сповіщення</string>\n  <string name=\"permission_battery\">Оптимізація батареї</string>\n  <string name=\"permission_battery_description\">Запобігає перериванню патчингу у фоновому режимі</string>\n  <string name=\"permission_grant\">Надати</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager хост завантажувача</string>\n  <string name=\"downloader_host_permission_description\">Використовується для керування доступом до завантажувачів ReVanced Manager. Тільки ReVanced Manager має цю функцію.</string>\n  <string name=\"toast_copied_to_clipboard\">Скопійовано!</string>\n  <string name=\"copy_to_clipboard\">Копіювати до буфера обміну</string>\n  <string name=\"dashboard\">Панель управління</string>\n  <string name=\"settings\">Налаштування</string>\n  <string name=\"select_app\">Виберіть програму</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d вибрано</string>\n  <string name=\"fab_patch_app\">Патчити застосунок</string>\n  <string name=\"fab_add_patches\">Додати патчі</string>\n  <string name=\"new_downloader_notification\">Доступні нові завантажувачі. Натисніть тут, щоб налаштувати їх.</string>\n  <string name=\"unsupported_architecture_warning\">Виправлення на цій архітектурі пристрою не підтримується і, найімовірніше, не спрацює.</string>\n  <string name=\"import_\">Імпорт</string>\n  <string name=\"import_patches\">Імпорт патчів</string>\n  <string name=\"file_field_set\">Вибрано</string>\n  <string name=\"file_field_not_set\">Не вибрано</string>\n  <string name=\"field_not_set\">Не встановлено</string>\n  <string name=\"patches_missing\">Відсутні</string>\n  <string name=\"patches_error\">Помилка</string>\n  <string name=\"patches_error_description\">Не вдалося завантажити патчі. Натисніть, щоб переглянути помилку</string>\n  <string name=\"patches_not_downloaded\">Патчі не завантажено.</string>\n  <string name=\"patches_name_default\">Патчі</string>\n  <string name=\"patches_name_fallback\">Без назви</string>\n  <string name=\"android_11_bug_dialog_title\">Помилка Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">Дозвіл на встановлення програми має бути наданий заздалегідь, щоб уникнути помилки в системі Android 11, яка негативно вплине на взаємодію з користувачем.</string>\n  <string name=\"no_network_toast\">Немає підключення до Інтернету</string>\n  <string name=\"selected_app_meta_any_version\">Будь-яка доступна версія</string>\n  <string name=\"app_source_dialog_title\">Вибрати джерело</string>\n  <string name=\"app_source_dialog_option_auto\">Авто</string>\n  <string name=\"app_source_dialog_option_auto_description\">Використати встановлену програму, потім завантажений APK, потім доступні завантажувачі</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Немає сумісних програм або доступних завантажувачів</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Встановлені програми не можуть бути знову пропатчені без root-доступу</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Версія %s не відповідає рекомендованій версії</string>\n  <string name=\"patch_item_description\">Почати патчінг програми</string>\n  <string name=\"patch_selector_item\">Вибрати патчі</string>\n  <string name=\"patch_selector_item_description\">%d патчів вибрано</string>\n  <string name=\"patch_selection_changed_warning\">Вибір патчів змінено</string>\n  <string name=\"no_patches_selected\">Не вибрано жодного патча</string>\n  <string name=\"network_unavailable_warning\">Ваш пристрій не під\\'єднаний до Інтернету. Завантаження пізніше не вдасться.</string>\n  <string name=\"network_metered_warning\">Ви зараз використовуєте лімітоване підключення. Може стягуватися плата за дані від вашого постачальника послуг.</string>\n  <string name=\"apk_source_selector_item\">Вибрати джерело APK</string>\n  <string name=\"apk_source_auto\">Авто</string>\n  <string name=\"apk_source_auto_installed\">Авто · Використовуючи встановлений APK</string>\n  <string name=\"apk_source_auto_downloaded\">Авто · Використовуючи завантажений APK</string>\n  <string name=\"apk_source_auto_downloader\">Автоматично · Використання доступних завантажувачів</string>\n  <string name=\"apk_source_auto_storage\">Автоматично · Вибрати зі сховища</string>\n  <string name=\"apk_source_downloader\">Використання %s</string>\n  <string name=\"apk_source_installed\">Використання встановленого APK</string>\n  <string name=\"apk_source_local\">Використання локального файлу APK</string>\n  <string name=\"apk_source_downloaded\">Вже завантажено</string>\n  <string name=\"legacy_import_failed\">Не вдалося імпортувати старі налаштування</string>\n  <string name=\"auto_updates_dialog_title\">Налаштувати оновлення</string>\n  <string name=\"auto_updates_dialog_description\">Чи бажаєте, щоб ReVanced Manager періодично перевіряв оновлення для наступних компонентів?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Патчі ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Завантажувачі</string>\n  <string name=\"auto_updates_dialog_note\">Ці налаштування можна змінити пізніше.\n\n    ReVanced Manager підключиться до %s, щоб завантажити початкові версії, якщо ваш пристрій підключено до інтернету.</string>\n  <string name=\"announcements_filter_tag\">Фільтрувати за тегом</string>\n  <string name=\"announcements_show_archived\">Показати архівні</string>\n  <string name=\"general\">Загальні</string>\n  <string name=\"general_description\">Мова, тема, динамічний колір</string>\n  <string name=\"updates\">Оновлення</string>\n  <string name=\"updates_description\">Перевірити наявність оновлень та переглянути журнал змін</string>\n  <string name=\"downloads\">Завантаження</string>\n  <string name=\"downloads_description\">Завантажувачі та завантажені програми</string>\n  <string name=\"import_export\">Імпорт &amp; Експорт</string>\n  <string name=\"import_export_description\">Сховище ключів, параметри та вибір патчів</string>\n  <string name=\"advanced\">Додатково</string>\n  <string name=\"advanced_description\">URL API, обмеження пам\\'яті, налагодження</string>\n  <string name=\"safeguards_toggled_warning\">Запобіжники переключено</string>\n  <string name=\"about\">Про інтеграцію</string>\n  <string name=\"about_app_name\">Про %1$s</string>\n  <string name=\"opensource_licenses\">Ліцензії відкритого коду</string>\n  <string name=\"opensource_licenses_description\">Переглянути всі бібліотеки, використані для створення цієї програми</string>\n  <string name=\"contributors\">Автори</string>\n  <string name=\"contributors_description\">Переглянути авторів ReVanced</string>\n  <string name=\"dynamic_color\">Динамічний колір</string>\n  <string name=\"dynamic_color_description\">Адаптувати кольори до шпалер</string>\n  <string name=\"pure_black_theme\">Суто чорна тема</string>\n  <string name=\"pure_black_theme_description\">Використовувати суто чорні фони для темної теми</string>\n  <string name=\"theme\">Тема</string>\n  <string name=\"theme_description\">Виберіть між світлою або темною темою</string>\n  <string name=\"language\">Мова</string>\n  <string name=\"language_description\">Виберіть мову відображення програми</string>\n  <string name=\"language_system_default\">Системні стандартні</string>\n  <string name=\"search_languages\">Пошук мов…</string>\n  <string name=\"safeguards\">Заходи захисту</string>\n  <string name=\"patch_compat_check\">Вимкнути перевірку сумісності версій</string>\n  <string name=\"patch_compat_check_description\">Не обмежувати патчі сумісними версіями програм</string>\n  <string name=\"patch_compat_check_confirmation\">Вибір несумісних патчів може призвести до збою програми.\n\nВсе одно продовжити?</string>\n  <string name=\"suggested_version_safeguard\">Вимагати рекомендовану версію програми</string>\n  <string name=\"suggested_version_safeguard_description\">Забезпечити вибір рекомендованої версії програми</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Вибір програми, яка не є рекомендованою версією, може спричинити несподівані проблеми.\n\nВсе одно продовжити?</string>\n  <string name=\"patch_selection_safeguard\">Дозволити зміну вибору патчів та опцій</string>\n  <string name=\"patch_selection_safeguard_description\">Не забороняти вибір або зняття вибору патчів та налаштування опцій</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Зміна вибору патчів може спричинити несподівані проблеми.\n\nВсе одно увімкнути?</string>\n  <string name=\"universal_patches_safeguard\">Дозволити використання універсальних патчів</string>\n  <string name=\"universal_patches_safeguard_description\">Не забороняти використання універсальних патчів</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Універсальні патчі не так добре перевірені, як ті, що призначені для конкретних програм.\n\nВсе одно увімкнути?</string>\n  <string name=\"keystore\">Сховище ключів</string>\n  <string name=\"patches_selections\">Вибір патчів</string>\n  <string name=\"import_keystore\">Імпортувати сховище ключів</string>\n  <string name=\"import_keystore_description\">Імпортувати користувацьке сховище ключів</string>\n  <string name=\"import_keystore_dialog_title\">Введіть облікові дані сховища ключів</string>\n  <string name=\"import_keystore_dialog_description\">Вам потрібно буде ввести облікові дані сховища ключів, щоб імпортувати його.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Ім\\'я користувача (Псевдонім)</string>\n  <string name=\"import_keystore_dialog_password_field\">Пароль</string>\n  <string name=\"import_keystore_dialog_button\">Імпорт</string>\n  <string name=\"import_keystore_wrong_credentials\">Неправильні облікові дані сховища ключів</string>\n  <string name=\"import_keystore_success\">Імпортоване сховище ключів</string>\n  <string name=\"export_keystore\">Експортувати сховище ключів</string>\n  <string name=\"export_keystore_description\">Експортувати поточне сховище ключів</string>\n  <string name=\"export_keystore_unavailable\">Немає сховища ключів для експорту</string>\n  <string name=\"export_keystore_success\">Експортоване сховище ключів</string>\n  <string name=\"regenerate_keystore\">Перегенерувати сховище ключів</string>\n  <string name=\"regenerate_keystore_description\">Згенерувати нове сховище ключів</string>\n  <string name=\"regenerate_keystore_dialog_description\">Ви збираєтеся перегенерувати своє сховище ключів, яке менеджер використовуватиме під час процесу патчінгу.\n\nВи не зможете оновлювати раніше встановлені програми з цього джерела.</string>\n  <string name=\"regenerate_keystore_success\">Сховище ключів успішно замінено</string>\n  <string name=\"import_patch_selection\">Імпортувати вибір патчів</string>\n  <string name=\"import_patch_selection_description\">Імпортувати вибір патчів з файлу JSON</string>\n  <string name=\"import_patch_selection_fail\">Не вдалося імпортувати вибір патчів: %s</string>\n  <string name=\"import_patch_selection_success\">Імпортований вибір патчів</string>\n  <string name=\"select_bundle_for_import\">Виберіть пакет для імпорту</string>\n  <string name=\"export_patch_selection\">Експортувати вибір патчів</string>\n  <string name=\"export_patch_selection_description\">Експортувати вибір патчів до файлу JSON</string>\n  <string name=\"export_patch_selection_fail\">Не вдалося експортувати вибір патчів: %s</string>\n  <string name=\"export_patch_selection_success\">Експортований вибір патчів</string>\n  <string name=\"select_bundle_for_export\">Виберіть пакет для експорту</string>\n  <string name=\"patch_selection_packages\">Застосунки зі збереженими виборами</string>\n  <string name=\"patch_selection_entries\">Всього вибраних патчів</string>\n  <string name=\"reset_configuration\">Скинути конфігурацію</string>\n  <string name=\"reset_patch_selection\">Вибір патчів</string>\n  <string name=\"reset_patch_selection_description\">Скинути збережений вибір патчів</string>\n  <string name=\"reset_patch_options\">Опції патчів</string>\n  <string name=\"reset_patch_options_description\">Скинути збережені параметри патчів</string>\n  <string name=\"reset_patch_selection_success\">Вибір патчів було скинуто</string>\n  <string name=\"patch_selection_reset_all\">Скинути вибір патчів глобально</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Ви збираєтеся скинути всі вибори патчів. Вам потрібно буде вручну вибрати кожен патч знову.</string>\n  <string name=\"patch_selection_reset_all_description\">Скидає всі вибори патчів</string>\n  <string name=\"patch_selection_reset_package\">Скинути вибір патчів для програми</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Ви збираєтеся скинути вибір патчів для програми \\\"%s\\\". Вам доведеться вручну вибрати кожен патч знову.</string>\n  <string name=\"patch_selection_reset_package_description\">Скидає вибір патчів для одного застосунку</string>\n  <string name=\"patch_selection_reset_patches\">Скинути вибір патчів (одиничний)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Ви збираєтеся скинути вибір патчів для \\\"%s\\\". Вам доведеться вручну вибрати кожен патч знову.</string>\n  <string name=\"patch_selection_reset_patches_description\">Скидає вибір патчів для певної колекції патчів</string>\n  <string name=\"patch_options_reset_package\">Скинути параметри патчів для застосунку</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Ви збираєтеся скинути параметри патчів для застосунку \\\"%s\\\". Вам доведеться повторно застосувати кожен параметр.</string>\n  <string name=\"patch_options_reset_package_description\">Скидає параметри патчів для одного застосунку</string>\n  <string name=\"patch_options_reset_patches\">Скинути параметри патчів (одиничний)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Ви збираєтеся скинути параметри патчів для \\\"%s\\\". Вам доведеться повторно застосувати кожен параметр.</string>\n  <string name=\"patch_options_reset_patches_description\">Скидає параметри патчів для певної колекції патчів</string>\n  <string name=\"patch_options_reset_all\">Скинути параметри патчів глобально</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Ви збираєтеся скинути всі параметри патчів. Вам доведеться повторно застосувати кожен параметр.</string>\n  <string name=\"patch_options_reset_all_description\">Скидає всі параметри патчів</string>\n  <string name=\"downloaders\">Завантажувачі</string>\n  <string name=\"downloader_prereleases\">Використовувати передрелізи</string>\n  <string name=\"downloader_prereleases_description\">Використовувати передрелізні версії основного завантажувача</string>\n  <string name=\"downloader_state_loaded\">Завантажено</string>\n  <string name=\"downloader_state_failed\">Не вдалося завантажити. Натисніть для отримання додаткової інформації</string>\n  <string name=\"downloader_state_missing\">Відсутній</string>\n  <string name=\"downloader_delete_apps_title\">Видалити вибрані програми</string>\n  <string name=\"downloader_delete_apps_description\">Ви впевнені, що хочете видалити вибрані програми?</string>\n  <string name=\"downloader_delete_single_description\">Ви впевнені, що бажаєте видалити \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps\">Завантажених застосунків не знайдено.</string>\n  <string name=\"downloader_settings_no_apps_description\">Застосунки, завантажені через ReVanced Manager, з\\'являться тут.</string>\n  <string name=\"downloader_url\">URL-адреса завантажувача</string>\n  <string name=\"downloader_add\">Додати завантажувач</string>\n  <string name=\"select_downloader_type_dialog_description\">Додайте нові завантажувачі з URL-адреси або локальних файлів</string>\n  <string name=\"local_downloaders_description\">Додайте завантажувачі з локального сховища.</string>\n  <string name=\"remote_downloaders_description\">Додайте завантажувачі з URL-адреси. Можуть оновлюватися автоматично.</string>\n  <string name=\"install_revanced_downloaders\">Встановіть завантажувачі, щоб отримувати застосунки безпосередньо в ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Встановити завантажувачі ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Скасувати встановлення завантажувачів?</string>\n  <string name=\"cancel_downloader_install_description\">Встановлення завантажувачів триває. Якщо ви зараз підете, завантаження буде скасовано.</string>\n  <string name=\"downloader_sources_unavailable_title\">Ці завантажувачі відсутні</string>\n  <string name=\"downloader_sources_unavailable_description\">Натисніть кнопку оновлення, щоб виправити це.</string>\n  <string name=\"downloader_update_failed\">Не вдалося оновити завантажувач: %s</string>\n  <string name=\"downloader_replace_fail\">Не вдалося імпортувати завантажувач: %s</string>\n  <string name=\"search_apps\">Пошук застосунків…</string>\n  <string name=\"loading_body\">Завантаження…</string>\n  <string name=\"downloading_patches\">Завантаження патчів…</string>\n  <string name=\"options\">Параметри</string>\n  <string name=\"ok\">ОК</string>\n  <string name=\"yes\">Так</string>\n  <string name=\"no\">Ні</string>\n  <string name=\"edit\">Редагувати</string>\n  <string name=\"dialog_input_placeholder\">Значення</string>\n  <string name=\"reset\">Скинути</string>\n  <string name=\"share\">Поділитися</string>\n  <string name=\"patch\">Патч</string>\n  <string name=\"select_from_storage\">Вибрати зі сховища</string>\n  <string name=\"select_from_storage_description\">Виберіть файл APK зі сховища за допомогою файлового менеджера</string>\n  <string name=\"suggested_version_info\">Запропонована версія: %s</string>\n  <string name=\"type_anything\">Введіть щось для продовження</string>\n  <string name=\"search\">Пошук патчів…</string>\n  <string name=\"apply\">Застосувати</string>\n  <string name=\"help\">Довідка</string>\n  <string name=\"back\">Назад</string>\n  <string name=\"warning\">Увага</string>\n  <string name=\"add\">Додати</string>\n  <string name=\"enable\">Увімкнути</string>\n  <string name=\"disable\">Вимкнути</string>\n  <string name=\"close\">Закрити</string>\n  <string name=\"clear\">Очистити</string>\n  <string name=\"system\">Система</string>\n  <string name=\"light\">Світла</string>\n  <string name=\"dark\">Темна</string>\n  <string name=\"appearance\">Зовнішній вигляд</string>\n  <string name=\"networking\">Мережа</string>\n  <string name=\"allow_metered_networks\">Дозволити лімітні мережі</string>\n  <string name=\"allow_metered_networks_description\">Дозволяє автоматичні оновлення в лімітних мережах.\\n    Застосунок все ще може попереджати про лімітні мережі для ручних операцій.</string>\n  <string name=\"downloaded_apps\">Завантажені застосунки</string>\n  <string name=\"process_runtime\">Запустити Patcher в іншому процесі (експериментально)</string>\n  <string name=\"process_runtime_description\">Це швидше та дозволяє Patcher використовувати більше пам\\'яті</string>\n  <string name=\"process_runtime_memory_limit\">Обмеження пам\\'яті процесу Patcher</string>\n  <string name=\"process_runtime_memory_limit_description\">Максимальний обсяг пам\\'яті, який може використовувати процес Patcher</string>\n  <string name=\"debug_logs_export\">Експортувати журнали налагодження</string>\n  <string name=\"debug_logs_export_read_failed\">Не вдалося прочитати журнали (код виходу %d)</string>\n  <string name=\"debug_logs_export_failed\">Не вдалося експортувати журнали</string>\n  <string name=\"debug_logs_export_success\">Експортовані журнали</string>\n  <string name=\"api_url\">URL API</string>\n  <string name=\"api_url_description\">API, що використовується для завантаження необхідних файлів</string>\n  <string name=\"api_url_dialog_title\">Змінити адресу API</string>\n  <string name=\"api_url_dialog_description\">Змінити URL API ReVanced Manager. ReVanced Manager використовує API для завантаження патчів та оновлень.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager підключається до API для завантаження патчів та оновлень. Переконайтеся, що ви йому довіряєте.</string>\n  <string name=\"api_url_dialog_save\">Встановити</string>\n  <string name=\"api_url_dialog_reset\">Скинути URL API</string>\n  <string name=\"device\">Пристрій</string>\n  <string name=\"device_android_version\">Версія Android</string>\n  <string name=\"device_model\">Модель</string>\n  <string name=\"device_architectures\">CPU Архітектури</string>\n  <string name=\"device_memory_limit\">Обмеження пам\\'яті</string>\n  <string name=\"device_memory_limit_format\">%1$dМБ (Звичайний) - %2$dМБ (Великий)</string>\n  <string name=\"patches_force_download\">Примусово завантажити всі патчі</string>\n  <string name=\"patches_reset\">Скинути патчі</string>\n  <string name=\"reset_onboarding\">Скинути ознайомлення</string>\n  <string name=\"reset_onboarding_description\">Показати екран ознайомлення під час наступного запуску програми</string>\n  <string name=\"patching\">Патчинг</string>\n  <string name=\"signing\">Підписання</string>\n  <string name=\"storage\">Сховище</string>\n  <string name=\"no_patch_found\">Патчів не знайдено. Перевірте свої патчі</string>\n  <string name=\"tab_apps\">Застосунки</string>\n  <string name=\"tab_patches\">Патчі</string>\n  <string name=\"delete\">Видалити</string>\n  <string name=\"refresh\">Оновити</string>\n  <string name=\"continue_anyways\">Продовжити все одно</string>\n  <string name=\"download_another_version\">Завантажити іншу версію</string>\n  <string name=\"download_app\">Завантажити застосунок</string>\n  <string name=\"download_apk\">Завантажити файл APK</string>\n  <string name=\"patches_download_fail\">Не вдалося завантажити патчі: %s</string>\n  <string name=\"api_not_working_title\">Сервіс API наразі недоступний</string>\n  <string name=\"api_not_working_description\">Деякі функції можуть бути недоступні. Перевірте своє підключення або URL-адресу API в налаштуваннях.</string>\n  <string name=\"patches_replace_fail\">Не вдалося імпортувати патчі: %s</string>\n  <string name=\"no_patched_apps_found\">Не знайдено пропатчених застосунків</string>\n  <string name=\"no_patched_apps_description\">Наразі у вас немає пропатчених застосунків, про які ми знаємо. Змініть це, пропатчивши свій перший застосунок!</string>\n  <string name=\"patched_apps_section_title\">Пропатчені програми</string>\n  <string name=\"patchable_apps_section_title\">Програми, які можна пропатчити</string>\n  <string name=\"no_patches_found\">Патчі не знайдено</string>\n  <string name=\"no_patches_description\">У вас ще немає патчів. Додайте патчі, натиснувши кнопку нижче!</string>\n  <string name=\"tap_on_patches\">Натисніть на патчі, щоб отримати більше інформації про них</string>\n  <string name=\"patches_selected\">Вибрано %s</string>\n  <string name=\"incompatible_patches\">Несумісні патчі</string>\n  <string name=\"universal_patches\">Універсальні патчі</string>\n  <string name=\"patch_selection_reset_toast\">Вибір патчів та параметри скинуто до рекомендованих значень за замовчуванням</string>\n  <string name=\"patch_options_reset_toast\">Параметри патчів скинуто</string>\n  <string name=\"non_suggested_version_warning_title\">Нерекомендована версія</string>\n  <string name=\"non_suggested_version_warning_description\">Версія застосунку, яку ви вибрали, не відповідає рекомендованій.\\nБудь ласка, використовуйте рекомендовану версію: %s\\n\\nЩоб продовжити все одно, вимкніть \\\"Вимагати рекомендовану версію застосунку\\\" у розширених налаштуваннях.</string>\n  <string name=\"selection_warning_title\">Припинити використання значень за замовчуванням?</string>\n  <string name=\"selection_warning_description\">Рекомендується використовувати вибір патчів та параметри за замовчуванням. Їх зміна може призвести до несподіваних проблем.\\n\\nВам потрібно увімкнути \\\"Дозволити зміну вибору патчів та параметрів\\\" у розширених налаштуваннях перед перемиканням патчів.</string>\n  <string name=\"universal_patch_warning_description\">Універсальні патчі мають більш загальне призначення і працюють не так надійно, як патчі, що призначені для конкретних застосунків. Ви можете зіткнутися з проблемами під час їх використання.\\n\\nВам потрібно увімкнути \\\"Дозволити використання універсальних патчів\\\" у розширених налаштуваннях перед використанням універсальних патчів.</string>\n  <string name=\"this_version\">Ця версія</string>\n  <string name=\"universal\">Будь-який застосунок</string>\n  <string name=\"search_patches\">Пошук патчів</string>\n  <string name=\"app_version_not_compatible\">Цей патч несумісний з вибраною версією застосунку (%1$s)\\n\\nВін сумісний лише з наступною(ими) версією(ями): %2$s</string>\n  <string name=\"continue_with_version\">Продовжити з цією версією?</string>\n  <string name=\"version_not_compatible\">Не всі патчі сумісні з цією версією (%s). Ви хочете продовжити все одно?</string>\n  <string name=\"download_application\">Завантажити застосунок?</string>\n  <string name=\"app_not_installed\">Вибраний застосунок не встановлено. Хочете його завантажити?</string>\n  <string name=\"failed_to_load_apk\">Не вдалося завантажити APK</string>\n  <string name=\"split_apk_not_supported\">Розділені APK неможливо пропатчити</string>\n  <string name=\"loading\">Завантаження…</string>\n  <string name=\"not_installed\">Не встановлено</string>\n  <string name=\"installed\">Встановлено</string>\n  <string name=\"app_info\">Інформація про застосунок</string>\n  <string name=\"uninstall\">Видалити</string>\n  <string name=\"unpatch\">Скасувати патч</string>\n  <string name=\"repatch\">Повторно патчити</string>\n  <string name=\"install_type\">Тип встановлення</string>\n  <string name=\"package_name\">Ім\\'я пакета</string>\n  <string name=\"original_package_name\">Оригінальне ім\\'я пакета</string>\n  <string name=\"applied_patches\">Застосовані патчі</string>\n  <string name=\"view_applied_patches\">Переглянути застосовані патчі</string>\n  <string name=\"default_install\">Стандартний</string>\n  <string name=\"mount_install\">Монтувати</string>\n  <string name=\"mounted\">Змонтовано</string>\n  <string name=\"not_mounted\">Не змонтовано</string>\n  <string name=\"mount\">Монтувати</string>\n  <string name=\"unmount\">Розмонтувати</string>\n  <string name=\"failed_to_mount\">Не вдалося змонтувати: %s</string>\n  <string name=\"failed_to_unmount\">Не вдалося розмонтувати: %s</string>\n  <string name=\"unpatch_app\">Відмінити патчі застосунку?</string>\n  <string name=\"unpatch_description\">Ви впевнені, що хочете відмінити патчі для цього застосунку?</string>\n  <string name=\"downloader_invalid_version\">Завантажувач не завантажив правильну версію</string>\n  <string name=\"downloader_app_not_found\">Завантажувач не знайшов застосунок</string>\n  <string name=\"downloader_error\">Помилка завантажувача: %s</string>\n  <string name=\"no_downloaders_installed\">Завантажувачі застосунків не встановлено!</string>\n  <string name=\"no_downloaders_trusted\">Жодному завантажувачу застосунків не довірено! Будь ласка, перевірте свої налаштування.</string>\n  <string name=\"already_patched\">Вже пропатчено</string>\n  <string name=\"patch_selector_sheet_filter_title\">Фільтр</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Сумісність</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Пакети</string>\n  <string name=\"patch_selector_sheet_actions_title\">Дії</string>\n  <string name=\"restore_default_selection\">Відновити вибір за замовчуванням</string>\n  <string name=\"deselect_all\">Зняти вибір усіх</string>\n  <string name=\"invert_selection\">Інвертувати виділення</string>\n  <string name=\"deselect_all_except\">Зняти вибір з усіх, окрім %s</string>\n  <string name=\"scope_dialog_title\">Застосувати до</string>\n  <string name=\"scope_all_patches\">Усі виправлення</string>\n  <string name=\"scope_bundle_patches\">Тільки %s</string>\n  <string name=\"string_option_menu_description\">Більше опцій</string>\n  <string name=\"option_preset_custom_value\">Користувацьке значення</string>\n  <string name=\"path_selector\">Вибрати зі сховища</string>\n  <string name=\"path_selector_parent_dir\">Попередня директорія</string>\n  <string name=\"path_selector_dirs\">Директорії</string>\n  <string name=\"path_selector_files\">Файли</string>\n  <string name=\"show_password_field\">Показати пароль</string>\n  <string name=\"hide_password_field\">Сховати пароль</string>\n  <string name=\"installer\">Інсталятор</string>\n  <string name=\"install_app\">Встановити</string>\n  <string name=\"install_app_success\">Застосунок встановлено</string>\n  <string name=\"install_app_fail\">Не вдалося встановити застосунок: %s</string>\n  <string name=\"reinstall_app_fail\">Не вдалося перевстановити застосунок: %s</string>\n  <string name=\"uninstall_app_fail\">Не вдалося видалити застосунок: %s</string>\n  <string name=\"open_app\">Відкрити</string>\n  <string name=\"save_apk\">Зберегти APK</string>\n  <string name=\"save_apk_success\">APK збережено</string>\n  <string name=\"sign_fail\">Не вдалося підписати APK: %s</string>\n  <string name=\"save_logs\">Зберегти журнали</string>\n  <string name=\"save_as_file\">Зберегти у файли</string>\n  <string name=\"export_patcher_logs\">Експортувати журнали патчера</string>\n  <string name=\"save_logs_success\">Журнали збережено</string>\n  <string name=\"downloader_activity_dialog_body\">Для продовження роботи з цим завантажувачем потрібна взаємодія з користувачем.</string>\n  <string name=\"select_install_type\">Виберіть тип встановлення</string>\n  <string name=\"patcher_step_group_preparing\">Підготовка</string>\n  <string name=\"patcher_step_load_patches\">Завантажити патчі</string>\n  <string name=\"patcher_step_unpack\">Підготувати оновлювач</string>\n  <string name=\"patcher_step_group_patching\">Патчинг</string>\n  <string name=\"patcher_step_group_saving\">Збереження</string>\n  <string name=\"patcher_step_write_patched\">Записати пропатчений файл APK</string>\n  <string name=\"patcher_step_sign_apk\">Підписати пропатчений файл APK</string>\n  <string name=\"patcher_notification_title\">Виконується патчинг…</string>\n  <string name=\"patcher_notification_text\">Натисніть, щоб повернутися до патчера</string>\n  <string name=\"patcher_stop_confirm_title\">Зупинити патчер</string>\n  <string name=\"patcher_stop_confirm_description\">Ви впевнені, що хочете зупинити процес патчингу?</string>\n  <string name=\"patcher_install_in_progress\">Виконується встановлення. Будь ласка, зачекайте</string>\n  <string name=\"execute_patches\">Виконати патчі</string>\n  <string name=\"executing_patch\">Виконати %s</string>\n  <string name=\"failed_to_execute_patch\">Не вдалося виконати %s</string>\n  <string name=\"step_completed\">завершено</string>\n  <string name=\"step_failed\">невдало</string>\n  <string name=\"step_running\">виконується</string>\n  <string name=\"step_waiting\">очікування</string>\n  <string name=\"expand_content\">розгорнути</string>\n  <string name=\"collapse_content\">згорнути</string>\n  <string name=\"drag_handle\">змінити порядок</string>\n  <string name=\"more\">Більше</string>\n  <string name=\"less\">Менше</string>\n  <string name=\"continue_\">Продовжити</string>\n  <string name=\"dismiss\">Відхилити</string>\n  <string name=\"view_announcement\">Переглянути оголошення</string>\n  <string name=\"permanent_dismiss\">Більше не показувати</string>\n  <string name=\"donate\">Пожертвувати</string>\n  <string name=\"website\">Вебсайт</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Контакти</string>\n  <string name=\"license\">Ліцензія</string>\n  <string name=\"source\">Джерело</string>\n  <string name=\"repository\">Репозиторій</string>\n  <string name=\"bundle_information_by_author\">Від %1$s</string>\n  <string name=\"version\">Версія</string>\n  <string name=\"version_compatibility_warning\">Обрана версія може бути несумісною з обраними патчами</string>\n  <string name=\"submit_feedback\">Надіслати проблему або відгук</string>\n  <string name=\"submit_feedback_description\">Допоможіть нам покращити цей застосунок</string>\n  <string name=\"developer_options\">Параметри розробника</string>\n  <string name=\"developer_options_description\">Параметри для налагодження проблем</string>\n  <string name=\"patches_update_success\">Оновлення успішне</string>\n  <string name=\"patches_update_unavailable\">Оновлення недоступне</string>\n  <string name=\"view_patches\">Переглянути патчі</string>\n  <string name=\"patches_view_any_version\">Будь-яка версія</string>\n  <string name=\"patches_view_any_package\">Будь-який пакет</string>\n  <string name=\"patches_delete_single_dialog_description\">Ви впевнені, що хочете видалити \\\"%s\\\"?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Ви впевнені, що хочете видалити вибрані патчі?</string>\n  <string name=\"announcements\">Оголошення</string>\n  <string name=\"archive\">Архів</string>\n  <string name=\"about_revanced_manager\">Про ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager — це застосунок для Android, який використовує ReVanced Patcher для патчингу застосунків Android. Він дозволяє завантажувати та пропатчувати застосунки за допомогою користувацьких патчів, а також керувати процесом патчингу.</string>\n  <string name=\"developer_options_taps\">%d торкань залишилося</string>\n  <string name=\"developer_options_enabled\">Параметри розробника увімкнено</string>\n  <string name=\"developer_options_already_enabled\">Параметри розробника вже увімкнено</string>\n  <string name=\"update_available\">Доступне оновлення</string>\n  <string name=\"current_version\">Поточна версія: %s</string>\n  <string name=\"new_version\">Нова версія: %s</string>\n  <string name=\"ready_to_install_update\">Готовий до встановлення оновлення</string>\n  <string name=\"update_completed\">Оновлення встановлено</string>\n  <string name=\"install_update_manager_failed\">Не вдалося встановити оновлення</string>\n  <string name=\"manual_update_check\">Перевірити оновлення</string>\n  <string name=\"view_update\">Переглянути оновлення</string>\n  <string name=\"manual_update_check_description\">Вручну перевірити оновлення</string>\n  <string name=\"update_checking_manager\">Перевіряти оновлення під час запуску</string>\n  <string name=\"update_checking_manager_description\">Перевіряти наявність нових версій ReVanced Manager під час запуску застосунку</string>\n  <string name=\"update_checking_downloader\">Перевіряти оновлення завантажувачів ReVanced під час запуску</string>\n  <string name=\"update_checking_downloader_description\">Перевіряти оновлення встановлених завантажувачів ReVanced під час запуску програми</string>\n  <string name=\"manager_prereleases\">Використовувати передрелізи</string>\n  <string name=\"manager_prereleases_description\">Використовувати передрелізні версії ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Передрелізні версії можуть бути нестабільними та містити помилки. Ви можете зіткнутися зі збоями, втратою даних або іншими непередбаченими проблемами. Увімкніть це, лише якщо ви погоджуєтеся з цими ризиками.</string>\n  <string name=\"changelog\">Переглянути журнал змін</string>\n  <string name=\"changelog_loading\">Завантаження списку змін</string>\n  <string name=\"changelog_download_fail\">Не вдалося завантажити список змін: %s</string>\n  <string name=\"changelog_description\">Перегляньте останні зміни в цьому оновленні</string>\n  <string name=\"battery_optimization_notification\">Оптимізацію батареї потрібно вимкнути, щоб ReVanced Manager коректно працював у фоновому режимі. Натисніть тут, щоб вимкнути оптимізацію.</string>\n  <string name=\"installing_manager_update\">Встановлення оновлення…</string>\n  <string name=\"downloading_manager_update\">Завантаження оновлення…</string>\n  <string name=\"download_manager_failed\">Не вдалося завантажити оновлення: %s</string>\n  <string name=\"cancel\">Скасувати</string>\n  <string name=\"save\">Зберегти</string>\n  <string name=\"save_with_count\">Зберегти (%1$s)</string>\n  <string name=\"update\">Оновити</string>\n  <string name=\"empty\">Пусто</string>\n  <string name=\"installing_message\">Натисніть <b>Оновити</b>, коли з\\'явиться запит.\\nReVanced Manager закриється під час оновлення.</string>\n  <string name=\"no_changelogs_found\">Список змін не знайдено</string>\n  <string name=\"just_now\">Щойно</string>\n  <string name=\"minutes_ago\">%s хв тому</string>\n  <string name=\"hours_ago\">%s год тому</string>\n  <string name=\"days_ago\">%s дн. тому</string>\n  <string name=\"invalid_date\">Недійсна дата</string>\n  <string name=\"disable_battery_optimization\">Вимкнути оптимізацію батареї</string>\n  <string name=\"input_dialog_value_invalid\">Недійсне значення</string>\n  <string name=\"option_required\">Ця опція обов\\'язкова</string>\n  <string name=\"required_options_screen\">Обов\\'язкові параметри</string>\n  <string name=\"failed_to_check_updates\">Не вдалося перевірити оновлення: %s</string>\n  <string name=\"no_update_available\">Оновлення недоступне</string>\n  <string name=\"no_announcements_found\">Оголошень не знайдено</string>\n  <string name=\"update_check\">Перевірка оновлень…</string>\n  <string name=\"dismiss_temporary\">Не зараз</string>\n  <string name=\"update_available_dialog_description\">Доступна нова версія ReVanced Manager (%s).</string>\n  <string name=\"failed_to_download_update\">Не вдалося завантажити оновлення: %s</string>\n  <string name=\"download\">Завантажити</string>\n  <string name=\"download_confirmation_metered\">Ви використовуєте лімітоване з\\'єднання, і ваш провайдер може стягувати плату за передачу даних.\\n\\nБажаєте продовжити?</string>\n  <string name=\"download_update_confirmation\">Завантажити оновлення?</string>\n  <string name=\"no_contributors_found\">Співавторів не знайдено</string>\n  <string name=\"select\">Вибрати</string>\n  <string name=\"select_deselect_all\">Вибрати або скасувати вибір усіх</string>\n  <string name=\"select_patches_type_dialog_description\">Додати нові патчі з URL або локальних файлів</string>\n  <string name=\"local_patches_description\">Додати патчі з локального сховища.</string>\n  <string name=\"remote_patches_description\">Додати патчі з URL. Патчі можуть автоматично оновлюватися.</string>\n  <string name=\"recommended\">Рекомендовано</string>\n  <string name=\"installation_failed_dialog_title\">Встановлення не вдалося</string>\n  <string name=\"installation_cancelled_dialog_title\">Встановлення скасовано</string>\n  <string name=\"installation_blocked_dialog_title\">Встановлення заблоковано</string>\n  <string name=\"installation_conflict_dialog_title\">Конфлікт встановлення</string>\n  <string name=\"installation_incompatible_dialog_title\">Встановлення несумісне</string>\n  <string name=\"installation_invalid_dialog_title\">Встановлення недійсне</string>\n  <string name=\"installation_storage_issue_dialog_title\">Недостатньо місця</string>\n  <string name=\"installation_timeout_dialog_title\">Час встановлення вичерпано</string>\n  <string name=\"installation_failed_description\">Встановлення не вдалося через невідому причину. Спробувати ще раз?</string>\n  <string name=\"installation_aborted_description\">Встановлення було скасовано вручну. Спробувати ще раз?</string>\n  <string name=\"installation_blocked_description\">Встановлення заблоковано. Перегляньте налаштування безпеки вашого пристрою та спробуйте ще раз.</string>\n  <string name=\"installation_conflict_description\">Встановленню завадила наявна інсталяція застосунку. Видалити встановлений застосунок та спробувати ще раз?</string>\n  <string name=\"installation_incompatible_description\">Застосунок несумісний з цим пристроєм. Використовуйте APK, сумісний з цим пристроєм, і спробуйте ще раз.</string>\n  <string name=\"installation_invalid_description\">Застосунок недійсний. Видалити застосунок та спробувати ще раз?</string>\n  <string name=\"installation_storage_issue_description\">Застосунок не вдалося встановити через недостатнє місце у сховищі. Звільніть місце та спробуйте ще раз.</string>\n  <string name=\"installation_timeout_description\">Встановлення зайняло занадто багато часу. Спробувати ще раз?</string>\n  <string name=\"reinstall\">Перевстановити</string>\n  <string name=\"show\">Показати</string>\n  <string name=\"debugging\">Налагодження</string>\n  <string name=\"about_device\">Про пристрій</string>\n  <string name=\"enter_url\">Введіть URL</string>\n  <string name=\"next\">Далі</string>\n  <string name=\"auto_update\">Автооновлення</string>\n  <string name=\"add_patches\">Додати патчі</string>\n  <string name=\"auto_update_description\">Автооновлення, коли доступна нова версія</string>\n  <string name=\"patches_prereleases\">Використовувати передрелізи</string>\n  <string name=\"patches_prereleases_description\">Використовувати передрелізні версії %s</string>\n  <string name=\"patches_url\">URL патчів</string>\n  <string name=\"incompatible_patches_dialog\">Ці патчі несумісні з вибраною версією програми (%1$s).\n\nНатисніть на патчі, щоб побачити більше деталей.</string>\n  <string name=\"incompatible_patch\">Несумісний патч</string>\n  <string name=\"any_version\">Будь-який</string>\n  <string name=\"never_show_again\">Ніколи більше не показувати</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Показувати повідомлення про оновлення під час запуску</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Показувати сповіщення що спливає щоразу, коли доступне нове оновлення, під час запуску</string>\n  <string name=\"failed_to_import_keystore\">Не вдалося імпортувати сховище ключів</string>\n  <string name=\"export\">Експорт</string>\n  <string name=\"confirm\">Підтвердити</string>\n  <string name=\"new_announcement\">Нове оголошення:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d виправлення</item>\n    <item quantity=\"few\">%d виправлення</item>\n    <item quantity=\"many\">%d виправлень</item>\n    <item quantity=\"other\">%d виправлень</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Виконати %d виправлення</item>\n    <item quantity=\"few\">Виконати %d виправлення</item>\n    <item quantity=\"many\">Виконати %d виправлень</item>\n    <item quantity=\"other\">Виконати %d виправлень</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">Вибрано %d</item>\n    <item quantity=\"few\">Вибрано %d</item>\n    <item quantity=\"many\">Вибрано %d</item>\n    <item quantity=\"other\">Вибрано %d</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-ur-rIN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">پیکچر</string>\n  <string name=\"onboarding_welcome_to\">خوش آمدید</string>\n  <string name=\"onboarding_welcome_back\">ہیلو! یہ نیا</string>\n  <string name=\"onboarding_apps_subtitle\">آپ ابھی پیچ کرنے کے لیے ایک ایپ منتخب کر سکتے ہیں یا اسے بعد میں کر سکتے ہیں</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager اور پیچ کو تازہ ترین رکھنے کے لیے خودکار اپڈیٹس کنفیگر کریں</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager ابتدائی ورژنز ڈاؤن لوڈ کرنے کے لیے %s سے منسلک ہو گا اگر آپ کا آلہ انٹرنیٹ سے منسلک ہے۔</string>\n  <string name=\"retry\">دوبارہ کوشش کریں</string>\n  <string name=\"onboarding_skip\">فی الحال چھوڑ دیں</string>\n  <string name=\"onboarding_recommended_version\">تجویز کردہ ورژن: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">اجازتیں چھوڑ دیں؟</string>\n  <string name=\"onboarding_permissions_skip_description\">مطلوبہ اجازتوں کے بغیر، کچھ خصوصیات صحیح طریقے سے کام نہیں کر سکتی ہیں۔ آپ انہیں بعد میں ایپ کی سیٹنگز میں دے سکتے ہیں۔</string>\n  <string name=\"onboarding_permissions_skip_anyway\">پھر بھی چھوڑ دیں</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager کو صحیح طریقے سے کام کرنے کے لیے چند اجازتوں کی ضرورت ہے۔</string>\n  <string name=\"permission_install_apps\">نامعلوم ایپس انسٹال کریں</string>\n  <string name=\"permission_install_apps_description\">پیچ کی گئی ایپلیکیشنز کو انسٹال کرنے کے لیے درکار ہے۔</string>\n  <string name=\"permission_notifications\">اطلاعات</string>\n  <string name=\"permission_battery\">بیٹری کی آپٹیمائزیشن</string>\n  <string name=\"permission_battery_description\">بیک گراؤنڈ میں پیچنگ کو منقطع ہونے سے روکتا ہے۔</string>\n  <string name=\"permission_grant\">اجازت دیں</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager ڈاؤنلوڈر ہوسٹ</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager ڈاؤنلوڈرز تک رسائی کو کنٹرول کرنے کے لیے استعمال ہوتا ہے۔ یہ صرف ReVanced Manager کے پاس ہے۔</string>\n  <string name=\"fab_patch_app\">ایک ایپ کو پیچ کریں</string>\n  <string name=\"fab_add_patches\">پیچ شامل کریں</string>\n  <string name=\"new_downloader_notification\">نیا ڈاؤن لوڈر (ز) دستیاب ہے۔ انہیں کنفیگر کرنے کے لیے یہاں کلک کریں۔</string>\n  <string name=\"patches_not_downloaded\">پیچیز ڈاؤن لوڈ نہیں ہوئے ہیں۔</string>\n  <string name=\"app_source_dialog_option_auto_description\">انسٹال کردہ ایپ استعمال کریں، پھر ڈاؤن لوڈ کردہ APK، پھر دستیاب ڈاؤن لوڈرز</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">کوئی مطابقت پذیر ایپ یا ڈاؤنلوڈر دستیاب نہیں ہے۔</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">ماؤنٹ کی گئی ایپس کو روٹ رسائی کے بغیر دوبارہ پیچ نہیں کیا جا سکتا۔</string>\n  <string name=\"patch_selector_item\">پیچ منتخب کریں</string>\n  <string name=\"patch_selector_item_description\">%d پیچ منتخب کیے گئے</string>\n  <string name=\"patch_selection_changed_warning\">پیچیز کا انتخاب تبدیل کر دیا گیا ہے</string>\n  <string name=\"apk_source_selector_item\">APK سورس منتخب کریں</string>\n  <string name=\"apk_source_auto\">خودکار</string>\n  <string name=\"apk_source_auto_installed\">خودکار · انسٹال کردہ APK استعمال کر رہا ہے</string>\n  <string name=\"apk_source_auto_downloaded\">خودکار · ڈاؤن لوڈ کردہ APK استعمال کر رہا ہے</string>\n  <string name=\"apk_source_auto_downloader\">خودکار · دستیاب ڈاؤنلوڈر استعمال کر کے</string>\n  <string name=\"apk_source_auto_storage\">خودکار · اسٹوریج سے منتخب کریں</string>\n  <string name=\"apk_source_downloaded\">پہلے سے ڈاؤن لوڈ شدہ</string>\n  <string name=\"auto_updates_dialog_description\">کیا آپ چاہتے ہیں کہ ReVanced Manager وقتاً فوقتاً درج ذیل اجزاء کے لیے اپ ڈیٹس چیک کرے؟</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced پیچز</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: ڈاؤنلوڈرز</string>\n  <string name=\"auto_updates_dialog_note\">یہ ترتیبات بعد میں تبدیل کی جا سکتی ہیں۔\n\n    ReVanced Manager ابتدائی ورژنز ڈاؤن لوڈ کرنے کے لیے %s سے منسلک ہو گا اگر آپ کا آلہ انٹرنیٹ سے منسلک ہے۔</string>\n  <string name=\"announcements_filter_tag\">ٹیگ کے ذریعے فلٹر کریں</string>\n  <string name=\"announcements_show_archived\">آرکائیو شدہ دکھائیں</string>\n  <string name=\"updates_description\">اپ ڈیٹس چیک کریں اور چینج لاگ دیکھیں</string>\n  <string name=\"downloads_description\">ڈاؤنلوڈر اور ڈاؤن لوڈ کردہ ایپس</string>\n  <string name=\"safeguards_toggled_warning\">تحفظات ٹوگل کر دیے گئے ہیں</string>\n  <string name=\"about_app_name\">%1$s کے بارے میں</string>\n  <string name=\"search_languages\">زبانیں تلاش کریں…</string>\n  <string name=\"keystore\">کی اسٹور</string>\n  <string name=\"patches_selections\">پیچ سلیکشنز</string>\n  <string name=\"select_bundle_for_import\">امپورٹ کرنے کے لیے بنڈل منتخب کریں</string>\n  <string name=\"select_bundle_for_export\">ایکسپورٹ کرنے کے لیے بنڈل منتخب کریں</string>\n  <string name=\"patch_selection_packages\">محفوظ کردہ سلیکشنز والی ایپس</string>\n  <string name=\"patch_selection_entries\">کل منتخب کردہ پیچ</string>\n  <string name=\"reset_configuration\">کنفیگریشن ری سیٹ کریں</string>\n  <string name=\"reset_patch_selection\">پیچ سلیکشنز</string>\n  <string name=\"reset_patch_options\">پیچ کے اختیارات</string>\n  <string name=\"downloaders\">ڈاؤنلوڈرز</string>\n  <string name=\"downloader_prereleases\">پری ریلیزز استعمال کریں</string>\n  <string name=\"downloader_prereleases_description\">مین ڈاؤنلوڈر کے پری ریلیز ورژن استعمال کریں</string>\n  <string name=\"downloader_state_loaded\">لوڈ ہو گیا</string>\n  <string name=\"downloader_state_failed\">لوڈ کرنے میں ناکام۔ مزید تفصیلات کے لیے کلک کریں۔</string>\n  <string name=\"downloader_state_missing\">غائب</string>\n  <string name=\"downloader_delete_apps_title\">منتخب کردہ ایپس حذف کریں</string>\n  <string name=\"downloader_delete_apps_description\">کیا آپ واقعی منتخب کردہ ایپس حذف کرنا چاہتے ہیں؟</string>\n  <string name=\"downloader_delete_single_description\">کیا آپ واقعی \\\"%s\\\" کو حذف کرنا چاہتے ہیں؟</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager کے ذریعے ڈاؤن لوڈ کی گئی ایپس یہاں ظاہر ہوں گی۔</string>\n  <string name=\"downloader_url\">ڈاؤنلوڈر URL</string>\n  <string name=\"downloader_add\">ڈاؤنلوڈر شامل کریں</string>\n  <string name=\"select_downloader_type_dialog_description\">URL یا لوکل فائلوں سے نئے ڈاؤنلوڈر شامل کریں</string>\n  <string name=\"local_downloaders_description\">لوکل سٹوریج سے ڈاؤنلوڈر شامل کریں.</string>\n  <string name=\"remote_downloaders_description\">URL سے ڈاؤنلوڈر شامل کریں۔ یہ خود بخود اپ ڈیٹ ہو سکتے ہیں۔</string>\n  <string name=\"install_revanced_downloaders\">ReVanced Manager کے اندر براہ راست ایپس حاصل کرنے کے لیے ڈاؤن لوڈرز انسٹال کریں۔</string>\n  <string name=\"install_revanced_downloader\">ReVanced ڈاؤن لوڈرز انسٹال کریں</string>\n  <string name=\"cancel_downloader_install_title\">ڈاؤن لوڈرز کی انسٹالیشن منسوخ کریں؟</string>\n  <string name=\"cancel_downloader_install_description\">ڈاؤن لوڈرز کی انسٹالیشن جاری ہے۔ اگر آپ ابھی چلے جاتے ہیں، تو ڈاؤن لوڈ منسوخ کر دیا جائے گا۔</string>\n  <string name=\"downloader_sources_unavailable_title\">یہ ڈاؤنلوڈر غائب ہیں</string>\n  <string name=\"downloader_sources_unavailable_description\">اسے ٹھیک کرنے کے لیے اپ ڈیٹ بٹن پر کلک کریں.</string>\n  <string name=\"downloader_update_failed\">ڈاؤنلوڈر کو اپ ڈیٹ کرنے میں ناکام: %s</string>\n  <string name=\"downloader_replace_fail\">ڈاؤنلوڈر امپورٹ کرنے میں ناکام: %s</string>\n  <string name=\"select_from_storage_description\">فائل پکر کا استعمال کرتے ہوئے اسٹوریج سے ایک APK فائل منتخب کریں</string>\n  <string name=\"enable\">فعال کریں</string>\n  <string name=\"disable\">غیر فعال کریں</string>\n  <string name=\"process_runtime_memory_limit_description\">میموری کی زیادہ سے زیادہ مقدار جو پیچر پروسیس استعمال کر سکتا ہے</string>\n  <string name=\"reset_onboarding\">آن بورڈنگ ری سیٹ کریں</string>\n  <string name=\"reset_onboarding_description\">اگلی ایپ لانچ پر آن بورڈنگ اسکرین دکھائیں</string>\n  <string name=\"api_not_working_title\">API سروس فی الحال بند ہے</string>\n  <string name=\"api_not_working_description\">کچھ خصوصیات متاثر ہو سکتی ہیں۔ اپنی کنکشن یا API URL سیٹنگز میں چیک کریں۔</string>\n  <string name=\"no_patched_apps_found\">کوئی پیچ کردہ ایپس نہیں ملیں</string>\n  <string name=\"no_patched_apps_description\">آپ کے پاس فی الحال کوئی ایسی پیچ کردہ ایپس نہیں ہیں جن کے بارے میں ہمیں معلوم ہے۔ اپنی پہلی ایپ کو پیچ کر کے اسے تبدیل کریں!</string>\n  <string name=\"patched_apps_section_title\">پیچ کردہ ایپس</string>\n  <string name=\"patchable_apps_section_title\">پیچ کی جا سکنے والی ایپس</string>\n  <string name=\"no_patches_found\">کوئی پیچ نہیں ملے</string>\n  <string name=\"no_patches_description\">آپ کے پاس ابھی تک کوئی پیچ نہیں ہے۔ نیچے دیے گئے بٹن کو تھپتھپا کر پیچ شامل کریں!</string>\n  <string name=\"split_apk_not_supported\">اسپلٹ APKs پیچ نہیں کیے جا سکتے</string>\n  <string name=\"no_downloaders_installed\">کوئی ایپ ڈاؤن لوڈرز انسٹال نہیں ہیں!</string>\n  <string name=\"no_downloaders_trusted\">کسی بھی ایپ ڈاؤن لوڈر پر بھروسہ نہیں کیا گیا ہے! براہ کرم اپنی سیٹنگز چیک کریں۔</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">پیکجز</string>\n  <string name=\"patch_selector_sheet_actions_title\">کارروائیاں</string>\n  <string name=\"restore_default_selection\">ڈیفالٹ انتخاب بحال کریں</string>\n  <string name=\"deselect_all\">سب کو غیر منتخب کریں</string>\n  <string name=\"invert_selection\">انتخاب کو الٹائیں</string>\n  <string name=\"deselect_all_except\">%s کے علاوہ سبھی کو منتخب نہ کریں</string>\n  <string name=\"scope_dialog_title\">اس پر لاگو کریں</string>\n  <string name=\"scope_all_patches\">تمام پیچز</string>\n  <string name=\"scope_bundle_patches\">صرف %s</string>\n  <string name=\"save_as_file\">فائلوں میں محفوظ کریں</string>\n  <string name=\"export_patcher_logs\">پیچر لاگز ایکسپورٹ کریں</string>\n  <string name=\"save_logs_success\">لاگز محفوظ ہو گئے</string>\n  <string name=\"downloader_activity_dialog_body\">اس ڈاؤنلوڈر کے ساتھ آگے بڑھنے کے لیے صارف کی مداخلت ضروری ہے۔</string>\n  <string name=\"patcher_step_unpack\">پیچر تیار کریں</string>\n  <string name=\"view_announcement\">اعلان دیکھیں</string>\n  <string name=\"license\">لائسنس</string>\n  <string name=\"source\">ماخذ</string>\n  <string name=\"repository\">ریپوزٹری</string>\n  <string name=\"bundle_information_by_author\">بذریعہ %1$s</string>\n  <string name=\"version_compatibility_warning\">منتخب ورژن منتخب پیچز کے ساتھ مطابقت نہیں رکھتا ہو سکتا ہے</string>\n  <string name=\"announcements\">اعلانات</string>\n  <string name=\"archive\">آرکائیو</string>\n  <string name=\"view_update\">اپ ڈیٹ دیکھیں</string>\n  <string name=\"update_checking_downloader\">لانچ پر ReVanced ڈاؤن لوڈرز کی اپ ڈیٹس چیک کریں</string>\n  <string name=\"update_checking_downloader_description\">جب ایپلیکیشن شروع ہو تو انسٹال کردہ ReVanced ڈاؤن لوڈرز کی اپ ڈیٹس چیک کریں۔</string>\n  <string name=\"prereleases_warning\">پری ریلیز ورژن غیر مستحکم ہو سکتے ہیں اور ان میں کیڑے ہو سکتے ہیں۔ آپ کو کریشز، ڈیٹا کا نقصان، یا دیگر غیر متوقع مسائل کا سامنا کرنا پڑ سکتا ہے۔ اسے صرف اسی صورت میں فعال کریں جب آپ ان خطرات کے ساتھ مطمئن ہوں۔</string>\n  <string name=\"changelog\">چینج لاگ دیکھیں</string>\n  <string name=\"no_announcements_found\">کوئی اعلان نہیں ملا</string>\n  <string name=\"new_announcement\">نیا اعلان:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d پیچ</item>\n    <item quantity=\"other\">%d پیچ</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d پیچ نافذ کریں</item>\n    <item quantity=\"other\">%d پیچ نافذ کریں</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d منتخب</item>\n    <item quantity=\"other\">%d منتخب</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-uz-rUZ/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">Yamalovchi</string>\n  <string name=\"onboarding_welcome_to\">Xush kelibsiz</string>\n  <string name=\"onboarding_welcome_back\">Salom! Bu yangi</string>\n  <string name=\"onboarding_apps_subtitle\">Hozir dasturni tanlab tuzatishingiz yoki buni keyinroq qilishingiz mumkin</string>\n  <string name=\"onboarding_updates_subtitle\">ReVanced Manager va yamalarni yangilab turish uchun avtomatik yangilanishlarni sozlang</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager qurilmangiz internetga ulangan bo\\'lsa, dastlabki versiyalarni yuklab olish uchun %s ga ulanadi.</string>\n  <string name=\"retry\">Qayta urinish</string>\n  <string name=\"onboarding_skip\">Hozircha o\\'tkazib yuborish</string>\n  <string name=\"onboarding_recommended_version\">Tavsiya etilgan versiya: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Ruxsatnomalarni o\\'tkazib yuborish kerakmi?</string>\n  <string name=\"onboarding_permissions_skip_description\">Kerakli ruxsatnomalarsiz ba\\'zi funksiyalar to\\'g\\'ri ishlamasligi mumkin. Ularni keyinchalik ilova sozlamalarida berishingiz mumkin.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Baribir o\\'tkazib yuborish</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager to\\'g\\'ri ishlashi uchun bir nechta ruxsatnomalar kerak.</string>\n  <string name=\"permission_install_apps\">Noma\\'lum ilovalarni o\\'rnatish</string>\n  <string name=\"permission_install_apps_description\">Patch o\\'rnatilgan ilovalarni o\\'rnatish uchun talab qilinadi</string>\n  <string name=\"permission_notifications\">Bildirishnomalar</string>\n  <string name=\"permission_battery\">Batareya optimizatsiyasi</string>\n  <string name=\"permission_battery_description\">Patch o\\'rnatishning fonda to\\'xtatilishini oldini oladi</string>\n  <string name=\"permission_grant\">Ruxsat berish</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager yuklab oluvchi xosti</string>\n  <string name=\"downloader_host_permission_description\">ReVanced Manager yuklab oluvchilarga kirishni nazorat qilish uchun ishlatiladi. Faqat ReVanced Managerda bu mavjud.</string>\n  <string name=\"fab_patch_app\">Ilovaga patch o\\'rnatish</string>\n  <string name=\"fab_add_patches\">Patch qo\\'shish</string>\n  <string name=\"new_downloader_notification\">Yangi yuklab oluvchi(lar) mavjud. Ularni sozlash uchun shu yerni bosing.</string>\n  <string name=\"patches_not_downloaded\">Yamalar yuklab olinmagan.</string>\n  <string name=\"app_source_dialog_option_auto_description\">O\\'rnatilgan ilovadan, keyin yuklab olingan APKdan, keyin mavjud yuklovchilardan foydalaning</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Mos keluvchi ilova yoki yuklab oluvchilar mavjud emas</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">O\\'rnatilgan ilovalarni root huquqlarisiz qayta patchlash mumkin emas</string>\n  <string name=\"patch_selector_item\">Patchlarni tanlash</string>\n  <string name=\"patch_selector_item_description\">%d ta patch tanlandi</string>\n  <string name=\"patch_selection_changed_warning\">Yamalarni tanlash o\\'zgartirildi</string>\n  <string name=\"apk_source_selector_item\">APK manbasini tanlash</string>\n  <string name=\"apk_source_auto\">Avtomatik</string>\n  <string name=\"apk_source_auto_installed\">Avtomatik · O\\'rnatilgan APKdan foydalanish</string>\n  <string name=\"apk_source_auto_downloaded\">Avtomatik · Yuklab olingan APKdan foydalanish</string>\n  <string name=\"apk_source_auto_downloader\">Avto · Mavjud yuklab oluvchilardan foydalangan holda</string>\n  <string name=\"apk_source_auto_storage\">Avto · Xotiradan tanlang</string>\n  <string name=\"apk_source_downloaded\">Allaqachon yuklab olingan</string>\n  <string name=\"auto_updates_dialog_description\">ReVanced Manager quyidagi komponentlar uchun muntazam ravishda yangilanishlarni tekshirishini istaysizmi?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Patchlari</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Yuklab oluvchilar</string>\n  <string name=\"auto_updates_dialog_note\">Bu sozlamalar keyinroq o\\'zgartirilishi mumkin.\n\n    ReVanced Manager qurilmangiz internetga ulangan bo\\'lsa, dastlabki versiyalarni yuklab olish uchun %s ga ulanadi.</string>\n  <string name=\"announcements_filter_tag\">Teg bo\\'yicha filtrlash</string>\n  <string name=\"announcements_show_archived\">Arxivlanganlarni ko\\'rsatish</string>\n  <string name=\"updates_description\">Yangilanishlarni tekshirish va o\\'zgarishlar jurnalini ko\\'rish</string>\n  <string name=\"downloads_description\">Yuklab oluvchilar va yuklab olingan ilovalar</string>\n  <string name=\"safeguards_toggled_warning\">Himoya vositalari almashtirildi</string>\n  <string name=\"about_app_name\">%1$s haqida</string>\n  <string name=\"search_languages\">Tillar qidirish…</string>\n  <string name=\"keystore\">Kalit ombori</string>\n  <string name=\"patches_selections\">Patch tanlovlari</string>\n  <string name=\"select_bundle_for_import\">Import qilish uchun to\\'plamni tanlash</string>\n  <string name=\"select_bundle_for_export\">Eksport qilish uchun to\\'plamni tanlash</string>\n  <string name=\"patch_selection_packages\">Saqlangan tanlovlarga ega ilovalar</string>\n  <string name=\"patch_selection_entries\">Jami tanlangan patchlar</string>\n  <string name=\"reset_configuration\">Konfiguratsiyani tiklash</string>\n  <string name=\"reset_patch_selection\">Patch tanlovlari</string>\n  <string name=\"reset_patch_options\">Patch opsiyalari</string>\n  <string name=\"downloaders\">Yuklab oluvchilar</string>\n  <string name=\"downloader_prereleases\">Oldindan chiqarilgan versiyalardan foydalanish</string>\n  <string name=\"downloader_prereleases_description\">Asosiy yuklab oluvchining oldindan chiqarilgan versiyalaridan foydalanish</string>\n  <string name=\"downloader_state_loaded\">Yuklandi</string>\n  <string name=\"downloader_state_failed\">Yuklab bo‘lmadi. Batafsil ma‘lumot olish uchun bosing</string>\n  <string name=\"downloader_state_missing\">Mavjud emas</string>\n  <string name=\"downloader_delete_apps_title\">Tanlangan ilovalarni o‘chirish</string>\n  <string name=\"downloader_delete_apps_description\">Tanlangan ilovalarni o‘chirishga ishonchingiz komilmi?</string>\n  <string name=\"downloader_delete_single_description\">\\\"%s\\\" ni o\\'chirib tashlashni xohlaysizmi?</string>\n  <string name=\"downloader_settings_no_apps_description\">ReVanced Manager orqali yuklab olingan ilovalar bu yerda ko\\'rinadi.</string>\n  <string name=\"downloader_url\">Yuklovchi URL manzili</string>\n  <string name=\"downloader_add\">Yuklovchini qo\\'shish</string>\n  <string name=\"select_downloader_type_dialog_description\">Yangi yuklovchilarni URL manzilidan yoki mahalliy fayllardan qo\\'shing</string>\n  <string name=\"local_downloaders_description\">Yuklovchilarni mahalliy xotiradan qo\\'shish.</string>\n  <string name=\"remote_downloaders_description\">Yuklovchilarni URL manzilidan qo\\'shish. Avtomatik yangilanishi mumkin.</string>\n  <string name=\"install_revanced_downloaders\">Ilovalarni to\\'g\\'ridan-to\\'g\\'ri ReVanced Manager ichida olish uchun yuklab oluvchilarni o\\'rnating.</string>\n  <string name=\"install_revanced_downloader\">ReVanced Yuklab Oluvchilarini o\\'rnatish</string>\n  <string name=\"cancel_downloader_install_title\">Yuklab oluvchilarni o\\'rnatishni bekor qilish kerakmi?</string>\n  <string name=\"cancel_downloader_install_description\">Yuklab oluvchilar o\\'rnatilmoqda. Agar hozir chiqib ketsangiz, yuklab olish bekor qilinadi.</string>\n  <string name=\"downloader_sources_unavailable_title\">Bu yuklovchilar topilmadi</string>\n  <string name=\"downloader_sources_unavailable_description\">Uni tuzatish uchun yangilash tugmasini bosing.</string>\n  <string name=\"downloader_update_failed\">Yuklovchini yangilash muvaffaqiyatsiz tugadi: %s</string>\n  <string name=\"downloader_replace_fail\">Yuklovchini import qilish muvaffaqiyatsiz tugadi: %s</string>\n  <string name=\"select_from_storage_description\">Fayl tanlash vositasidan foydalanib xotiradan APK faylini tanlash</string>\n  <string name=\"enable\">Yoqish</string>\n  <string name=\"disable\">O\\'chirish</string>\n  <string name=\"process_runtime_memory_limit_description\">Patchlovchi jarayon foydalanishi mumkin bo\\'lgan maksimal xotira hajmi</string>\n  <string name=\"reset_onboarding\">Birinchi ishga tushirishni tiklash</string>\n  <string name=\"reset_onboarding_description\">Keyingi ilova ishga tushirilganda birinchi ishga tushirish ekranini ko\\'rsatish</string>\n  <string name=\"api_not_working_title\">API xizmati hozirda ishlamayapti</string>\n  <string name=\"api_not_working_description\">Ba\\'zi funksiyalar ta\\'sirga uchrashi mumkin. Ulanishingizni yoki sozlamalardagi API URL manzilini tekshiring.</string>\n  <string name=\"no_patched_apps_found\">Patch o\\'rnatilgan ilovalar topilmadi</string>\n  <string name=\"no_patched_apps_description\">Hozirda sizda biz bilgan patch o\\'rnatilgan ilovalar yo\\'q. Birinchi ilovangizga patch o\\'rnatish orqali buni o\\'zgartiring!</string>\n  <string name=\"patched_apps_section_title\">Yamalgan ilovalar</string>\n  <string name=\"patchable_apps_section_title\">Yamalishi mumkin bo\\'lgan ilovalar</string>\n  <string name=\"no_patches_found\">Patchlar topilmadi</string>\n  <string name=\"no_patches_description\">Sizda hali hech qanday patch yo\\'q. Quyidagi tugmani bosish orqali patchlar qo\\'shing!</string>\n  <string name=\"split_apk_not_supported\">Ajratilgan APK\\'lar yamalmaydi</string>\n  <string name=\"no_downloaders_installed\">Hech qanday ilova yuklab oluvchilar o\\'rnatilmagan!</string>\n  <string name=\"no_downloaders_trusted\">Hech qanday ilova yuklab oluvchilarga ishonch bildirilmagan! Iltimos, sozlamalaringizni tekshiring.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Paketlar</string>\n  <string name=\"patch_selector_sheet_actions_title\">Amallar</string>\n  <string name=\"restore_default_selection\">Standart tanlovni tiklash</string>\n  <string name=\"deselect_all\">Barchasini tanlovdan chiqarish</string>\n  <string name=\"invert_selection\">Tanlovni teskariga o\\'girish</string>\n  <string name=\"deselect_all_except\">%s dan tashqari barchasini tanlashni bekor qilish</string>\n  <string name=\"scope_dialog_title\">Qo\\'llash</string>\n  <string name=\"scope_all_patches\">Barcha yamalar</string>\n  <string name=\"scope_bundle_patches\">Faqat %s</string>\n  <string name=\"save_as_file\">Fayllarga saqlash</string>\n  <string name=\"export_patcher_logs\">Patchlovchi jurnallarini eksport qilish</string>\n  <string name=\"save_logs_success\">Jurnallar saqlandi</string>\n  <string name=\"downloader_activity_dialog_body\">Ushbu yuklab oluvchi bilan davom etish uchun foydalanuvchi aralashuvi talab qilinadi.</string>\n  <string name=\"patcher_step_unpack\">Patcher tayyorlash</string>\n  <string name=\"view_announcement\">E\\'lonni ko\\'rish</string>\n  <string name=\"license\">Litsenziya</string>\n  <string name=\"source\">Manba</string>\n  <string name=\"repository\">Ombor</string>\n  <string name=\"bundle_information_by_author\">%1$s tomonidan</string>\n  <string name=\"version_compatibility_warning\">Tanlangan versiya tanlangan yamalar bilan mos kelmasligi mumkin.</string>\n  <string name=\"announcements\">E\\'lonlar</string>\n  <string name=\"archive\">Arxiv</string>\n  <string name=\"view_update\">Yangilanishni ko\\'rish</string>\n  <string name=\"update_checking_downloader\">Ishga tushirishda ReVanced Yuklab Oluvchilari yangilanishlarini tekshirish</string>\n  <string name=\"update_checking_downloader_description\">Ilova ishga tushganda o\\'rnatilgan ReVanced Yuklab Oluvchilarining yangilanishlarini tekshirish</string>\n  <string name=\"prereleases_warning\">Dastlabki (pre-release) versiyalar beqaror bo\\'lishi va xatoliklarni o\\'z ichiga olishi mumkin. Siz ilova qotib qolishi, ma\\'lumotlar yo\\'qolishi yoki boshqa kutilmagan muammolarga duch kelishingiz mumkin. Faqat bu xavflar bilan rozi bo\\'lsangizgina buni yoqing.</string>\n  <string name=\"changelog\">O\\'zgarishlar jurnalini ko\\'rish</string>\n  <string name=\"no_announcements_found\">E\\'lonlar topilmadi</string>\n  <string name=\"new_announcement\">Yangi e\\'lon:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">%d yamg\\'oq</item>\n    <item quantity=\"other\">%d yamg\\'oq</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">%d yamg\\'oqni ijro etish</item>\n    <item quantity=\"other\">%d yamg\\'oqni ijro etish</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">%d ta tanlandi</item>\n    <item quantity=\"other\">%d ta tanlandi</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-vi-rVN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">Trình vá</string>\n  <string name=\"patches\">Các bản vá</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">Trình quản lý</string>\n  <string name=\"onboarding_welcome_to\">Chào mừng đến với</string>\n  <string name=\"onboarding_welcome_back\">Chào! Đây là phiên bản mới của</string>\n  <string name=\"onboarding_apps_subtitle\">Bạn có thể chọn một ứng dụng để vá ngay bây giờ hoặc làm điều đó sau</string>\n  <string name=\"onboarding_updates_subtitle\">Cấu hình cập nhật tự động để giữ cho ReVanced Manager và các bản vá luôn được cập nhật</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager sẽ kết nối với %s để tải xuống các phiên bản ban đầu nếu thiết bị của bạn được kết nối internet.</string>\n  <string name=\"retry\">Thử lại</string>\n  <string name=\"onboarding_skip\">Bỏ qua bây giờ</string>\n  <string name=\"onboarding_recommended_version\">Phiên bản được đề xuất: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Bỏ qua quyền?</string>\n  <string name=\"onboarding_permissions_skip_description\">Nếu không có các quyền cần thiết, một số tính năng có thể không hoạt động chính xác. Bạn có thể cấp chúng sau trong cài đặt ứng dụng.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Bỏ qua dù sao</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager cần một vài quyền để hoạt động đúng cách</string>\n  <string name=\"permission_install_apps\">Cài đặt ứng dụng không rõ nguồn gốc</string>\n  <string name=\"permission_install_apps_description\">Bắt buộc để cài đặt các ứng dụng đã vá</string>\n  <string name=\"permission_notifications\">Thông báo</string>\n  <string name=\"permission_battery\">Tối ưu hóa pin</string>\n  <string name=\"permission_battery_description\">Ngăn chặn quá trình vá bị gián đoạn ở chế độ nền</string>\n  <string name=\"permission_grant\">Cấp</string>\n  <string name=\"downloader_host_permission_label\">Máy chủ tải xuống ReVanced Manager</string>\n  <string name=\"downloader_host_permission_description\">Dùng để kiểm soát quyền truy cập vào các trình tải xuống ReVanced Manager. Chỉ ReVanced Manager mới có tính năng này.</string>\n  <string name=\"toast_copied_to_clipboard\">Đã sao chép!</string>\n  <string name=\"copy_to_clipboard\">Sao chép vào bảng nhớ tạm</string>\n  <string name=\"dashboard\">Tổng quan</string>\n  <string name=\"settings\">Cài đặt</string>\n  <string name=\"select_app\">Chọn một ứng dụng</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d đã chọn</string>\n  <string name=\"fab_patch_app\">Vá ứng dụng</string>\n  <string name=\"fab_add_patches\">Thêm bản vá</string>\n  <string name=\"new_downloader_notification\">Có trình tải xuống mới. Nhấn vào đây để thiết lập.</string>\n  <string name=\"unsupported_architecture_warning\">Việc vá trên kiến trúc thiết bị này không được hỗ trợ và rất có thể sẽ thất bại.</string>\n  <string name=\"import_\">Nhập</string>\n  <string name=\"import_patches\">Nhập bản vá</string>\n  <string name=\"file_field_set\">Đã chọn</string>\n  <string name=\"file_field_not_set\">Chưa chọn</string>\n  <string name=\"field_not_set\">Chưa đặt</string>\n  <string name=\"patches_missing\">Thiếu</string>\n  <string name=\"patches_error\">Lỗi</string>\n  <string name=\"patches_error_description\">Không thể tải các bản vá. Nhấn để xem lỗi</string>\n  <string name=\"patches_not_downloaded\">Các bản vá chưa được tải xuống.</string>\n  <string name=\"patches_name_default\">Các bản vá</string>\n  <string name=\"patches_name_fallback\">Chưa đặt tên</string>\n  <string name=\"android_11_bug_dialog_title\">Lỗi Android 11</string>\n  <string name=\"android_11_bug_dialog_description\">Phải cấp quyền cài đặt ứng dụng trước để tránh lỗi trong hệ thống Android 11, vốn sẽ ảnh hưởng tiêu cực đến trải nghiệm người dùng.</string>\n  <string name=\"no_network_toast\">Không có kết nối internet khả dụng</string>\n  <string name=\"selected_app_meta_any_version\">Mọi phiên bản khả dụng</string>\n  <string name=\"app_source_dialog_title\">Chọn nguồn</string>\n  <string name=\"app_source_dialog_option_auto\">Tự động</string>\n  <string name=\"app_source_dialog_option_auto_description\">Sử dụng ứng dụng đã cài đặt, sau đó APK đã tải xuống, sau đó trình tải xuống có sẵn</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Không tìm thấy ứng dụng tương thích hoặc trình tải xuống nào khả dụng</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Ứng dụng đã gắn không thể vá lại nếu không có quyền truy cập root</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">Phiên bản %s không khớp với phiên bản được đề xuất</string>\n  <string name=\"patch_item_description\">Bắt đầu vá ứng dụng</string>\n  <string name=\"patch_selector_item\">Chọn bản vá</string>\n  <string name=\"patch_selector_item_description\">Đã chọn %d bản vá</string>\n  <string name=\"patch_selection_changed_warning\">Việc lựa chọn các bản vá đã thay đổi.</string>\n  <string name=\"no_patches_selected\">Chưa chọn bản vá</string>\n  <string name=\"network_unavailable_warning\">Thiết bị của bạn không được kết nối internet. Việc tải xuống sẽ thất bại sau này.</string>\n  <string name=\"network_metered_warning\">Bạn hiện đang sử dụng kết nối có giới hạn dữ liệu. Có thể áp dụng phí dữ liệu từ nhà cung cấp dịch vụ của bạn.</string>\n  <string name=\"apk_source_selector_item\">Chọn nguồn APK</string>\n  <string name=\"apk_source_auto\">Tự động</string>\n  <string name=\"apk_source_auto_installed\">Tự động · Sử dụng APK đã cài đặt</string>\n  <string name=\"apk_source_auto_downloaded\">Tự động · Sử dụng APK đã tải xuống</string>\n  <string name=\"apk_source_auto_downloader\">Tự động · Sử dụng các trình tải xuống có sẵn</string>\n  <string name=\"apk_source_auto_storage\">Tự động · Chọn từ bộ nhớ</string>\n  <string name=\"apk_source_downloader\">Sử dụng %s</string>\n  <string name=\"apk_source_installed\">Sử dụng APK đã cài đặt</string>\n  <string name=\"apk_source_local\">Sử dụng tệp APK cục bộ</string>\n  <string name=\"apk_source_downloaded\">Đã tải xuống</string>\n  <string name=\"legacy_import_failed\">Không thể nhập cài đặt cũ</string>\n  <string name=\"auto_updates_dialog_title\">Cấu hình cập nhật</string>\n  <string name=\"auto_updates_dialog_description\">Bạn có muốn ReVanced Manager kiểm tra cập nhật định kỳ cho các thành phần sau không?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced Patches</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Trình tải xuống</string>\n  <string name=\"auto_updates_dialog_note\">Các cài đặt này có thể được thay đổi sau.\n\n    ReVanced Manager sẽ kết nối với %s để tải xuống các phiên bản ban đầu nếu thiết bị của bạn được kết nối internet.</string>\n  <string name=\"announcements_filter_tag\">Lọc theo thẻ</string>\n  <string name=\"announcements_show_archived\">Hiển thị đã lưu trữ</string>\n  <string name=\"general\">Chung</string>\n  <string name=\"general_description\">Ngôn ngữ, chủ đề, màu động</string>\n  <string name=\"updates\">Cập nhật</string>\n  <string name=\"updates_description\">Kiểm tra cập nhật và xem nhật ký thay đổi</string>\n  <string name=\"downloads\">Tải xuống</string>\n  <string name=\"downloads_description\">Trình tải xuống và ứng dụng đã tải xuống</string>\n  <string name=\"import_export\">Nhập &amp; xuất</string>\n  <string name=\"import_export_description\">Kho khóa, tùy chọn bản vá và lựa chọn</string>\n  <string name=\"advanced\">Nâng cao</string>\n  <string name=\"advanced_description\">URL API, giới hạn bộ nhớ, gỡ lỗi</string>\n  <string name=\"safeguards_toggled_warning\">Các biện pháp bảo vệ đã được bật/tắt.</string>\n  <string name=\"about\">Giới thiệu</string>\n  <string name=\"about_app_name\">Giới thiệu về %1$s</string>\n  <string name=\"opensource_licenses\">Giấy phép nguồn mở</string>\n  <string name=\"opensource_licenses_description\">Xem tất cả các thư viện được sử dụng để tạo ứng dụng này</string>\n  <string name=\"contributors\">Những người đóng góp</string>\n  <string name=\"contributors_description\">Xem những người đóng góp của ReVanced</string>\n  <string name=\"dynamic_color\">Màu động</string>\n  <string name=\"dynamic_color_description\">Điều chỉnh màu sắc theo hình nền</string>\n  <string name=\"pure_black_theme\">Chủ đề đen tuyền</string>\n  <string name=\"pure_black_theme_description\">Sử dụng nền đen tuyền cho chủ đề tối</string>\n  <string name=\"theme\">Chủ đề</string>\n  <string name=\"theme_description\">Chọn giữa chủ đề sáng hoặc tối</string>\n  <string name=\"language\">Ngôn ngữ</string>\n  <string name=\"language_description\">Chọn ngôn ngữ hiển thị ứng dụng</string>\n  <string name=\"language_system_default\">Mặc định hệ thống</string>\n  <string name=\"search_languages\">Tìm kiếm ngôn ngữ…</string>\n  <string name=\"safeguards\">Bảo vệ</string>\n  <string name=\"patch_compat_check\">Tắt kiểm tra khả năng tương thích phiên bản</string>\n  <string name=\"patch_compat_check_description\">Không giới hạn bản vá cho các phiên bản ứng dụng tương thích</string>\n  <string name=\"patch_compat_check_confirmation\">Việc chọn bản vá không tương thích có thể dẫn đến ứng dụng bị hỏng.\\n\\nBạn vẫn muốn tiếp tục chứ?</string>\n  <string name=\"suggested_version_safeguard\">Yêu cầu phiên bản ứng dụng được đề xuất</string>\n  <string name=\"suggested_version_safeguard_description\">Buộc chọn phiên bản ứng dụng được đề xuất</string>\n  <string name=\"suggested_version_safeguard_confirmation\">Lựa chọn một ứng dụng không khớp với phiên bản được đề xuất có thể dẫn đến sự cố không mong muốn.\n\nBạn vẫn muốn tiếp tục?</string>\n  <string name=\"patch_selection_safeguard\">Cho phép thay đổi lựa chọn và tùy chọn bản vá</string>\n  <string name=\"patch_selection_safeguard_description\">Không ngăn chặn việc chọn hoặc bỏ chọn các bản vá và tùy chỉnh các tùy chọn</string>\n  <string name=\"patch_selection_safeguard_confirmation\">Thay đổi các bản vá (patch) có thể gây ra lỗi không mong muốn.\n\nVẫn tiếp tục kích hoạt?</string>\n  <string name=\"universal_patches_safeguard\">Cho phép sử dụng bản vá phổ quát</string>\n  <string name=\"universal_patches_safeguard_description\">Không ngăn chặn việc sử dụng bản vá phổ quát</string>\n  <string name=\"universal_patches_safeguard_confirmation\">Các bản vá phổ quát không được thử nghiệm kỹ lưỡng như những bản vá dành cho các ứng dụng cụ thể.\\n\\nBạn vẫn muốn bật chứ?</string>\n  <string name=\"keystore\">Kho khóa</string>\n  <string name=\"patches_selections\">Lựa chọn bản vá</string>\n  <string name=\"import_keystore\">Nhập kho khóa</string>\n  <string name=\"import_keystore_description\">Nhập một kho khóa tùy chỉnh</string>\n  <string name=\"import_keystore_dialog_title\">Nhập thông tin xác thực kho khóa</string>\n  <string name=\"import_keystore_dialog_description\">Bạn cần nhập thông tin xác thực của kho khóa để nhập nó.</string>\n  <string name=\"import_keystore_dialog_alias_field\">Tên người dùng (Bí danh)</string>\n  <string name=\"import_keystore_dialog_password_field\">Mật khẩu</string>\n  <string name=\"import_keystore_dialog_button\">Nhập</string>\n  <string name=\"import_keystore_wrong_credentials\">Thông tin xác thực kho khóa không chính xác</string>\n  <string name=\"import_keystore_success\">Kho khóa đã nhập</string>\n  <string name=\"export_keystore\">Xuất kho khóa</string>\n  <string name=\"export_keystore_description\">Xuất kho khóa hiện tại</string>\n  <string name=\"export_keystore_unavailable\">Không có kho khóa để xuất</string>\n  <string name=\"export_keystore_success\">Kho khóa đã xuất</string>\n  <string name=\"regenerate_keystore\">Tạo lại kho khoá</string>\n  <string name=\"regenerate_keystore_description\">Tạo một kho khóa mới</string>\n  <string name=\"regenerate_keystore_dialog_description\">Bạn sắp tạo lại kho khóa mà trình quản lý sẽ sử dụng trong quá trình vá.\\n\\nBạn sẽ không thể cập nhật các ứng dụng đã cài đặt trước đó từ nguồn này.</string>\n  <string name=\"regenerate_keystore_success\">Kho khóa đã được thay thế thành công</string>\n  <string name=\"import_patch_selection\">Nhập lựa chọn bản vá</string>\n  <string name=\"import_patch_selection_description\">Nhập lựa chọn bản vá từ tệp JSON</string>\n  <string name=\"import_patch_selection_fail\">Không thể nhập lựa chọn bản vá: %s</string>\n  <string name=\"import_patch_selection_success\">Lựa chọn bản vá đã nhập</string>\n  <string name=\"select_bundle_for_import\">Chọn gói để nhập vào</string>\n  <string name=\"export_patch_selection\">Xuất lựa chọn bản vá</string>\n  <string name=\"export_patch_selection_description\">Xuất lựa chọn bản vá thành tệp JSON</string>\n  <string name=\"export_patch_selection_fail\">Không thể xuất lựa chọn bản vá: %s</string>\n  <string name=\"export_patch_selection_success\">Lựa chọn bản vá đã xuất</string>\n  <string name=\"select_bundle_for_export\">Chọn gói để xuất ra</string>\n  <string name=\"patch_selection_packages\">Ứng dụng có lựa chọn đã lưu</string>\n  <string name=\"patch_selection_entries\">Tổng số bản vá đã chọn</string>\n  <string name=\"reset_configuration\">Đặt lại cấu hình</string>\n  <string name=\"reset_patch_selection\">Lựa chọn bản vá</string>\n  <string name=\"reset_patch_selection_description\">Đặt lại lựa chọn bản vá đã lưu</string>\n  <string name=\"reset_patch_options\">Tùy chọn bản vá</string>\n  <string name=\"reset_patch_options_description\">Đặt lại các tùy chọn bản vá đã lưu</string>\n  <string name=\"reset_patch_selection_success\">Đã đặt lại lựa chọn bản vá</string>\n  <string name=\"patch_selection_reset_all\">Đặt lại lựa chọn bản vá trên toàn cầu</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">Bạn sắp đặt lại tất cả các lựa chọn bản vá. Bạn sẽ cần chọn thủ công từng bản vá lại.</string>\n  <string name=\"patch_selection_reset_all_description\">Đặt lại tất cả các lựa chọn bản vá</string>\n  <string name=\"patch_selection_reset_package\">Đặt lại lựa chọn bản vá cho ứng dụng</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">Bạn sắp đặt lại lựa chọn bản vá cho ứng dụng \\\"%s\\\". Bạn sẽ phải chọn thủ công từng bản vá lại.</string>\n  <string name=\"patch_selection_reset_package_description\">Đặt lại lựa chọn bản vá cho một ứng dụng duy nhất</string>\n  <string name=\"patch_selection_reset_patches\">Đặt lại lựa chọn bản vá (đơn)</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">Bạn sắp đặt lại lựa chọn bản vá cho \\\"%s\\\". Bạn sẽ phải tự chọn lại từng bản vá.</string>\n  <string name=\"patch_selection_reset_patches_description\">Đặt lại lựa chọn bản vá cho một bộ sưu tập bản vá cụ thể</string>\n  <string name=\"patch_options_reset_package\">Đặt lại tùy chọn bản vá cho ứng dụng</string>\n  <string name=\"patch_options_reset_package_dialog_description\">Bạn sắp đặt lại tùy chọn bản vá cho ứng dụng \\\"%s\\\". Bạn sẽ phải áp dụng lại từng tùy chọn.</string>\n  <string name=\"patch_options_reset_package_description\">Đặt lại tùy chọn bản vá cho một ứng dụng duy nhất</string>\n  <string name=\"patch_options_reset_patches\">Đặt lại tùy chọn bản vá (đơn)</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">Bạn sắp đặt lại tùy chọn bản vá cho \\\"%s\\\". Bạn sẽ phải áp dụng lại từng tùy chọn.</string>\n  <string name=\"patch_options_reset_patches_description\">Đặt lại tùy chọn bản vá cho một bộ sưu tập bản vá cụ thể</string>\n  <string name=\"patch_options_reset_all\">Đặt lại tất cả tùy chọn bản vá</string>\n  <string name=\"patch_options_reset_all_dialog_description\">Bạn sắp đặt lại tất cả tùy chọn bản vá. Bạn sẽ phải áp dụng lại từng tùy chọn.</string>\n  <string name=\"patch_options_reset_all_description\">Đặt lại tất cả tùy chọn bản vá</string>\n  <string name=\"downloaders\">Trình tải xuống</string>\n  <string name=\"downloader_prereleases\">Dùng bản phát hành trước</string>\n  <string name=\"downloader_prereleases_description\">Dùng các phiên bản phát hành trước của trình tải xuống chính</string>\n  <string name=\"downloader_state_loaded\">Đã tải</string>\n  <string name=\"downloader_state_failed\">Tải không thành công. Nhấp để xem chi tiết</string>\n  <string name=\"downloader_state_missing\">Thiếu</string>\n  <string name=\"downloader_delete_apps_title\">Xóa các ứng dụng đã chọn</string>\n  <string name=\"downloader_delete_apps_description\">Bạn có chắc chắn muốn xóa các ứng dụng đã chọn không?</string>\n  <string name=\"downloader_delete_single_description\">Bạn có chắc chắn muốn xóa \\\"%s\\\" không?</string>\n  <string name=\"downloader_settings_no_apps\">Không tìm thấy ứng dụng đã tải xuống.</string>\n  <string name=\"downloader_settings_no_apps_description\">Các ứng dụng được tải xuống thông qua ReVanced Manager sẽ xuất hiện tại đây.</string>\n  <string name=\"downloader_url\">URL trình tải xuống</string>\n  <string name=\"downloader_add\">Thêm trình tải xuống</string>\n  <string name=\"select_downloader_type_dialog_description\">Thêm trình tải xuống mới từ URL hoặc tệp cục bộ</string>\n  <string name=\"local_downloaders_description\">Thêm trình tải xuống từ bộ nhớ cục bộ.</string>\n  <string name=\"remote_downloaders_description\">Thêm trình tải xuống từ URL. Có thể tự động cập nhật.</string>\n  <string name=\"install_revanced_downloaders\">Cài đặt trình tải xuống để nhận ứng dụng trực tiếp trong ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Cài đặt ReVanced Downloaders</string>\n  <string name=\"cancel_downloader_install_title\">Hủy cài đặt trình tải xuống?</string>\n  <string name=\"cancel_downloader_install_description\">Quá trình cài đặt trình tải xuống đang diễn ra. Nếu bạn rời đi bây giờ, quá trình tải xuống sẽ bị hủy.</string>\n  <string name=\"downloader_sources_unavailable_title\">Những trình tải xuống này bị thiếu</string>\n  <string name=\"downloader_sources_unavailable_description\">Nhấp vào nút cập nhật để sửa lỗi.</string>\n  <string name=\"downloader_update_failed\">Cập nhật trình tải xuống thất bại: %s</string>\n  <string name=\"downloader_replace_fail\">Nhập trình tải xuống thất bại: %s</string>\n  <string name=\"search_apps\">Tìm ứng dụng…</string>\n  <string name=\"loading_body\">Đang tải…</string>\n  <string name=\"downloading_patches\">Đang tải xuống các bản vá…</string>\n  <string name=\"options\">Tùy chọn</string>\n  <string name=\"ok\">Đồng ý</string>\n  <string name=\"yes\">Có</string>\n  <string name=\"no\">Không</string>\n  <string name=\"edit\">Chỉnh sửa</string>\n  <string name=\"dialog_input_placeholder\">Giá trị</string>\n  <string name=\"reset\">Đặt lại</string>\n  <string name=\"share\">Chia sẻ</string>\n  <string name=\"patch\">Vá</string>\n  <string name=\"select_from_storage\">Chọn từ bộ nhớ</string>\n  <string name=\"select_from_storage_description\">Chọn một tệp APK từ bộ nhớ bằng công cụ chọn tệp</string>\n  <string name=\"suggested_version_info\">Phiên bản đề xuất: %s</string>\n  <string name=\"type_anything\">Nhập bất cứ thứ gì để tiếp tục</string>\n  <string name=\"search\">Tìm kiếm bản vá…</string>\n  <string name=\"apply\">Áp dụng</string>\n  <string name=\"help\">Trợ giúp</string>\n  <string name=\"back\">Quay lại</string>\n  <string name=\"warning\">Cảnh báo</string>\n  <string name=\"add\">Thêm</string>\n  <string name=\"enable\">Bật</string>\n  <string name=\"disable\">Tắt</string>\n  <string name=\"close\">Đóng</string>\n  <string name=\"clear\">Xóa</string>\n  <string name=\"system\">Hệ thống</string>\n  <string name=\"light\">Sáng</string>\n  <string name=\"dark\">Tối</string>\n  <string name=\"appearance\">Giao diện</string>\n  <string name=\"networking\">Mạng</string>\n  <string name=\"allow_metered_networks\">Cho phép mạng có giới hạn dữ liệu</string>\n  <string name=\"allow_metered_networks_description\">Cho phép cập nhật tự động trên mạng có giới hạn dữ liệu.\n    Ứng dụng vẫn có thể cảnh báo về mạng có giới hạn dữ liệu cho các thao tác thủ công.</string>\n  <string name=\"downloaded_apps\">Ứng dụng đã tải xuống</string>\n  <string name=\"process_runtime\">Chạy Patcher trong một tiến trình khác (thử nghiệm)</string>\n  <string name=\"process_runtime_description\">Điều này nhanh hơn và cho phép Patcher sử dụng nhiều bộ nhớ hơn</string>\n  <string name=\"process_runtime_memory_limit\">Giới hạn bộ nhớ tiến trình Patcher</string>\n  <string name=\"process_runtime_memory_limit_description\">Lượng bộ nhớ tối đa mà tiến trình vá có thể sử dụng</string>\n  <string name=\"debug_logs_export\">Xuất nhật ký gỡ lỗi</string>\n  <string name=\"debug_logs_export_read_failed\">Không đọc được nhật ký (mã thoát %d)</string>\n  <string name=\"debug_logs_export_failed\">Không xuất được nhật ký</string>\n  <string name=\"debug_logs_export_success\">Đã xuất nhật ký</string>\n  <string name=\"api_url\">Địa chỉ URL của API</string>\n  <string name=\"api_url_description\">API được sử dụng để tải xuống các tệp cần thiết</string>\n  <string name=\"api_url_dialog_title\">Thay đổi URL API</string>\n  <string name=\"api_url_dialog_description\">Thay đổi URL API của ReVanced Manager. ReVanced Manager sử dụng API để tải xuống các bản vá và cập nhật.</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager kết nối với API để tải xuống các bản vá và cập nhật. Hãy đảm bảo rằng bạn tin tưởng nó.</string>\n  <string name=\"api_url_dialog_save\">Đặt</string>\n  <string name=\"api_url_dialog_reset\">Đặt lại URL API</string>\n  <string name=\"device\">Thiết bị</string>\n  <string name=\"device_android_version\">Phiên bản Android</string>\n  <string name=\"device_model\">Mẫu</string>\n  <string name=\"device_architectures\">Kiến trúc CPU</string>\n  <string name=\"device_memory_limit\">Giới hạn bộ nhớ</string>\n  <string name=\"device_memory_limit_format\">%1$dMB (Bình thường) - %2$dMB (Lớn)</string>\n  <string name=\"patches_force_download\">Buộc tải xuống tất cả bản vá</string>\n  <string name=\"patches_reset\">Đặt lại bản vá</string>\n  <string name=\"reset_onboarding\">Đặt lại hướng dẫn</string>\n  <string name=\"reset_onboarding_description\">Hiển thị màn hình hướng dẫn khi khởi chạy ứng dụng lần tới</string>\n  <string name=\"patching\">Đang vá</string>\n  <string name=\"signing\">Đang ký</string>\n  <string name=\"storage\">Bộ nhớ</string>\n  <string name=\"no_patch_found\">Không tìm thấy bản vá nào. Kiểm tra các bản vá của bạn</string>\n  <string name=\"tab_apps\">Ứng dụng</string>\n  <string name=\"tab_patches\">Các bản vá</string>\n  <string name=\"delete\">Xoá</string>\n  <string name=\"refresh\">Làm mới</string>\n  <string name=\"continue_anyways\">Tiếp tục dù sao</string>\n  <string name=\"download_another_version\">Tải xuống phiên bản khác</string>\n  <string name=\"download_app\">Tải xuống ứng dụng</string>\n  <string name=\"download_apk\">Tải xuống tệp APK</string>\n  <string name=\"patches_download_fail\">Không tải xuống được bản vá: %s</string>\n  <string name=\"api_not_working_title\">Dịch vụ API hiện đang ngừng hoạt động</string>\n  <string name=\"api_not_working_description\">Một số tính năng có thể bị ảnh hưởng. Vui lòng kiểm tra kết nối hoặc URL API của bạn trong cài đặt.</string>\n  <string name=\"patches_replace_fail\">Không nhập được bản vá: %s</string>\n  <string name=\"no_patched_apps_found\">Không tìm thấy ứng dụng đã vá nào</string>\n  <string name=\"no_patched_apps_description\">Hiện tại bạn không có bất kỳ ứng dụng đã vá nào mà chúng tôi biết. Hãy thay đổi điều đó bằng cách vá ứng dụng đầu tiên của bạn!</string>\n  <string name=\"patched_apps_section_title\">Ứng dụng đã vá</string>\n  <string name=\"patchable_apps_section_title\">Ứng dụng có thể vá</string>\n  <string name=\"no_patches_found\">Không tìm thấy bản vá nào</string>\n  <string name=\"no_patches_description\">Bạn chưa có bản vá nào. Hãy thêm bản vá bằng cách chạm vào nút bên dưới!</string>\n  <string name=\"tap_on_patches\">Nhấn vào các bản vá để biết thêm thông tin về chúng</string>\n  <string name=\"patches_selected\">Đã chọn %s</string>\n  <string name=\"incompatible_patches\">Các bản vá không tương thích</string>\n  <string name=\"universal_patches\">Các bản vá phổ quát</string>\n  <string name=\"patch_selection_reset_toast\">Lựa chọn bản vá và tùy chọn đã được đặt lại về mặc định được đề xuất</string>\n  <string name=\"patch_options_reset_toast\">Tùy chọn bản vá đã được đặt lại</string>\n  <string name=\"non_suggested_version_warning_title\">Phiên bản không được đề xuất</string>\n  <string name=\"non_suggested_version_warning_description\">Phiên bản của ứng dụng bạn đã chọn không khớp với phiên bản được đề xuất.\nVui lòng sử dụng phiên bản được đề xuất: %s\n\nĐể tiếp tục dù sao, hãy tắt \\\"Yêu cầu phiên bản ứng dụng được đề xuất\\\" trong cài đặt nâng cao.</string>\n  <string name=\"selection_warning_title\">Ngừng sử dụng mặc định?</string>\n  <string name=\"selection_warning_description\">Bạn nên sử dụng lựa chọn bản vá và các tùy chọn mặc định. Thay đổi chúng có thể dẫn đến các sự cố không mong muốn.\n\nBạn cần bật \\\"Cho phép thay đổi lựa chọn bản vá và tùy chọn\\\" trong cài đặt nâng cao trước khi bật/tắt bản vá.</string>\n  <string name=\"universal_patch_warning_description\">Các bản vá chung có công dụng tổng quát hơn và không hoạt động đáng tin cậy như các bản vá nhắm mục tiêu vào các ứng dụng cụ thể. Bạn có thể gặp sự cố khi sử dụng chúng.\n\nBạn cần bật \\\"Cho phép sử dụng các bản vá chung\\\" trong cài đặt nâng cao trước khi sử dụng các bản vá chung.</string>\n  <string name=\"this_version\">Phiên bản này</string>\n  <string name=\"universal\">Bất kỳ ứng dụng nào</string>\n  <string name=\"search_patches\">Tìm kiếm bản vá</string>\n  <string name=\"app_version_not_compatible\">Bản vá này không tương thích với phiên bản ứng dụng đã chọn (%1$s)\n\nNó chỉ tương thích với các phiên bản sau: %2$s</string>\n  <string name=\"continue_with_version\">Tiếp tục với phiên bản này?</string>\n  <string name=\"version_not_compatible\">Không phải tất cả các bản vá đều tương thích với phiên bản này (%s). Bạn có muốn tiếp tục dù sao không?</string>\n  <string name=\"download_application\">Tải xuống ứng dụng?</string>\n  <string name=\"app_not_installed\">Ứng dụng bạn đã chọn chưa được cài đặt. Bạn có muốn tải xuống không?</string>\n  <string name=\"failed_to_load_apk\">Không tải được APK</string>\n  <string name=\"split_apk_not_supported\">Các APK tách không thể vá</string>\n  <string name=\"loading\">Đang tải…</string>\n  <string name=\"not_installed\">Chưa cài đặt</string>\n  <string name=\"installed\">Đã cài đặt</string>\n  <string name=\"app_info\">Thông tin ứng dụng</string>\n  <string name=\"uninstall\">Gỡ cài đặt</string>\n  <string name=\"unpatch\">Gỡ bản vá</string>\n  <string name=\"repatch\">Vá lại</string>\n  <string name=\"install_type\">Kiểu cài đặt</string>\n  <string name=\"package_name\">Tên gói</string>\n  <string name=\"original_package_name\">Tên gói gốc</string>\n  <string name=\"applied_patches\">Các bản vá đã áp dụng</string>\n  <string name=\"view_applied_patches\">Xem các bản vá đã áp dụng</string>\n  <string name=\"default_install\">Mặc định</string>\n  <string name=\"mount_install\">Gắn kết</string>\n  <string name=\"mounted\">Đã gắn kết</string>\n  <string name=\"not_mounted\">Chưa gắn kết</string>\n  <string name=\"mount\">Gắn kết</string>\n  <string name=\"unmount\">Gỡ gắn kết</string>\n  <string name=\"failed_to_mount\">Không thể gắn kết: %s</string>\n  <string name=\"failed_to_unmount\">Không thể gỡ gắn kết: %s</string>\n  <string name=\"unpatch_app\">Gỡ bản vá ứng dụng?</string>\n  <string name=\"unpatch_description\">Bạn có chắc muốn gỡ bản vá ứng dụng này không?</string>\n  <string name=\"downloader_invalid_version\">Trình tải xuống không tìm nạp được phiên bản chính xác</string>\n  <string name=\"downloader_app_not_found\">Trình tải xuống không tìm thấy ứng dụng</string>\n  <string name=\"downloader_error\">Lỗi trình tải xuống: %s</string>\n  <string name=\"no_downloaders_installed\">Chưa có trình tải xuống ứng dụng nào được cài đặt!</string>\n  <string name=\"no_downloaders_trusted\">Chưa có trình tải xuống ứng dụng nào được tin cậy! Vui lòng kiểm tra cài đặt của bạn.</string>\n  <string name=\"already_patched\">Đã vá</string>\n  <string name=\"patch_selector_sheet_filter_title\">Lọc</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">Tương thích</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Gói</string>\n  <string name=\"patch_selector_sheet_actions_title\">Hành động</string>\n  <string name=\"restore_default_selection\">Khôi phục lựa chọn mặc định</string>\n  <string name=\"deselect_all\">Bỏ chọn tất cả</string>\n  <string name=\"invert_selection\">Đảo ngược vùng chọn</string>\n  <string name=\"deselect_all_except\">Bỏ chọn tất cả ngoại trừ %s</string>\n  <string name=\"scope_dialog_title\">Áp dụng cho</string>\n  <string name=\"scope_all_patches\">Tất cả bản vá</string>\n  <string name=\"scope_bundle_patches\">Chỉ %s</string>\n  <string name=\"string_option_menu_description\">Thêm tùy chọn</string>\n  <string name=\"option_preset_custom_value\">Giá trị tùy chỉnh</string>\n  <string name=\"path_selector\">Chọn từ bộ nhớ</string>\n  <string name=\"path_selector_parent_dir\">Thư mục trước</string>\n  <string name=\"path_selector_dirs\">Thư mục</string>\n  <string name=\"path_selector_files\">Tệp</string>\n  <string name=\"show_password_field\">Hiển thị mật khẩu</string>\n  <string name=\"hide_password_field\">Ẩn mật khẩu</string>\n  <string name=\"installer\">Trình cài đặt</string>\n  <string name=\"install_app\">Cài đặt</string>\n  <string name=\"install_app_success\">Ứng dụng đã cài đặt</string>\n  <string name=\"install_app_fail\">Không thể cài đặt ứng dụng: %s</string>\n  <string name=\"reinstall_app_fail\">Không thể cài đặt lại ứng dụng: %s</string>\n  <string name=\"uninstall_app_fail\">Không thể gỡ cài đặt ứng dụng: %s</string>\n  <string name=\"open_app\">Mở</string>\n  <string name=\"save_apk\">Lưu APK</string>\n  <string name=\"save_apk_success\">Đã lưu APK</string>\n  <string name=\"sign_fail\">Không thể ký APK: %s</string>\n  <string name=\"save_logs\">Lưu nhật ký</string>\n  <string name=\"save_as_file\">Lưu vào tệp</string>\n  <string name=\"export_patcher_logs\">Xuất nhật ký vá</string>\n  <string name=\"save_logs_success\">Đã lưu nhật ký</string>\n  <string name=\"downloader_activity_dialog_body\">Cần có sự tương tác của người dùng để tiếp tục với trình tải xuống này.</string>\n  <string name=\"select_install_type\">Chọn loại cài đặt</string>\n  <string name=\"patcher_step_group_preparing\">Đang chuẩn bị</string>\n  <string name=\"patcher_step_load_patches\">Tải bản vá</string>\n  <string name=\"patcher_step_unpack\">Chuẩn bị trình vá lỗi</string>\n  <string name=\"patcher_step_group_patching\">Đang vá</string>\n  <string name=\"patcher_step_group_saving\">Đang lưu</string>\n  <string name=\"patcher_step_write_patched\">Ghi tệp APK đã vá</string>\n  <string name=\"patcher_step_sign_apk\">Ký tệp APK đã vá</string>\n  <string name=\"patcher_notification_title\">Đang vá…</string>\n  <string name=\"patcher_notification_text\">Nhấn để trở lại trình vá</string>\n  <string name=\"patcher_stop_confirm_title\">Dừng trình vá</string>\n  <string name=\"patcher_stop_confirm_description\">Bạn có chắc chắn muốn dừng quá trình vá không?</string>\n  <string name=\"patcher_install_in_progress\">Quá trình cài đặt đang diễn ra. Vui lòng đợi</string>\n  <string name=\"execute_patches\">Thực thi bản vá</string>\n  <string name=\"executing_patch\">Thực thi %s</string>\n  <string name=\"failed_to_execute_patch\">Không thể thực thi %s</string>\n  <string name=\"step_completed\">đã hoàn thành</string>\n  <string name=\"step_failed\">đã thất bại</string>\n  <string name=\"step_running\">đang chạy</string>\n  <string name=\"step_waiting\">đang chờ</string>\n  <string name=\"expand_content\">mở rộng</string>\n  <string name=\"collapse_content\">thu gọn</string>\n  <string name=\"drag_handle\">sắp xếp lại</string>\n  <string name=\"more\">Thêm</string>\n  <string name=\"less\">Ít hơn</string>\n  <string name=\"continue_\">Tiếp tục</string>\n  <string name=\"dismiss\">Đóng</string>\n  <string name=\"view_announcement\">Xem thông báo</string>\n  <string name=\"permanent_dismiss\">Không hiện lại</string>\n  <string name=\"donate\">Quyên góp</string>\n  <string name=\"website\">Trang web</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">Liên hệ</string>\n  <string name=\"license\">Giấy phép</string>\n  <string name=\"source\">Nguồn</string>\n  <string name=\"repository\">Kho lưu trữ</string>\n  <string name=\"bundle_information_by_author\">Bởi %1$s</string>\n  <string name=\"version\">Phiên bản</string>\n  <string name=\"version_compatibility_warning\">Phiên bản đã chọn có thể không tương thích với các bản vá đã chọn</string>\n  <string name=\"submit_feedback\">Gửi vấn đề hoặc phản hồi</string>\n  <string name=\"submit_feedback_description\">Giúp chúng tôi cải thiện ứng dụng này</string>\n  <string name=\"developer_options\">Tùy chọn nhà phát triển</string>\n  <string name=\"developer_options_description\">Tùy chọn để gỡ lỗi</string>\n  <string name=\"patches_update_success\">Cập nhật thành công</string>\n  <string name=\"patches_update_unavailable\">Không có bản cập nhật</string>\n  <string name=\"view_patches\">Xem bản vá</string>\n  <string name=\"patches_view_any_version\">Phiên bản bất kỳ</string>\n  <string name=\"patches_view_any_package\">Bất kỳ gói nào</string>\n  <string name=\"patches_delete_single_dialog_description\">Bạn có chắc chắn muốn xóa \\\"%s\\\" không?</string>\n  <string name=\"patches_delete_multiple_dialog_description\">Bạn có chắc chắn muốn xóa các bản vá đã chọn không?</string>\n  <string name=\"announcements\">Thông báo</string>\n  <string name=\"archive\">Lưu trữ</string>\n  <string name=\"about_revanced_manager\">Giới thiệu về ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager là một ứng dụng Android sử dụng ReVanced Patcher để vá các ứng dụng Android. Nó cho phép bạn tải xuống và vá các ứng dụng bằng các bản vá tùy chỉnh, cũng như quản lý quá trình vá.</string>\n  <string name=\"developer_options_taps\">Còn %d lần chạm</string>\n  <string name=\"developer_options_enabled\">Đã bật tùy chọn nhà phát triển</string>\n  <string name=\"developer_options_already_enabled\">Tùy chọn nhà phát triển đã được bật</string>\n  <string name=\"update_available\">Có một bản cập nhật</string>\n  <string name=\"current_version\">Phiên bản hiện tại: %s</string>\n  <string name=\"new_version\">Phiên bản mới: %s</string>\n  <string name=\"ready_to_install_update\">Sẵn sàng cài đặt bản cập nhật</string>\n  <string name=\"update_completed\">Đã cài đặt bản cập nhật</string>\n  <string name=\"install_update_manager_failed\">Không thể cài đặt bản cập nhật</string>\n  <string name=\"manual_update_check\">Kiểm tra bản cập nhật</string>\n  <string name=\"view_update\">Xem cập nhật</string>\n  <string name=\"manual_update_check_description\">Kiểm tra bản cập nhật thủ công</string>\n  <string name=\"update_checking_manager\">Kiểm tra bản cập nhật khi khởi chạy</string>\n  <string name=\"update_checking_manager_description\">Kiểm tra các phiên bản mới của ReVanced Manager khi ứng dụng khởi chạy</string>\n  <string name=\"update_checking_downloader\">Kiểm tra cập nhật ReVanced Downloaders khi khởi chạy</string>\n  <string name=\"update_checking_downloader_description\">Kiểm tra các bản cập nhật cho ReVanced Downloaders đã cài đặt khi ứng dụng khởi động</string>\n  <string name=\"manager_prereleases\">Dùng bản phát hành trước</string>\n  <string name=\"manager_prereleases_description\">Sử dụng các phiên bản phát hành trước của ReVanced Manager</string>\n  <string name=\"prereleases_warning\">Các phiên bản tiền phát hành có thể không ổn định và chứa lỗi. Bạn có thể gặp sự cố, mất dữ liệu hoặc các vấn đề không mong muốn khác. Chỉ bật tính năng này nếu bạn chấp nhận các rủi ro này.</string>\n  <string name=\"changelog\">Xem nhật ký thay đổi</string>\n  <string name=\"changelog_loading\">Đang tải nhật ký thay đổi</string>\n  <string name=\"changelog_download_fail\">Không thể tải xuống nhật ký thay đổi: %s</string>\n  <string name=\"changelog_description\">Kiểm tra các thay đổi mới nhất trong bản cập nhật này</string>\n  <string name=\"battery_optimization_notification\">Phải tắt tối ưu hóa pin để ReVanced Manager hoạt động chính xác trong nền. Nhấn vào đây để tắt tối ưu hóa.</string>\n  <string name=\"installing_manager_update\">Đang cài đặt bản cập nhật…</string>\n  <string name=\"downloading_manager_update\">Đang tải xuống bản cập nhật…</string>\n  <string name=\"download_manager_failed\">Không thể tải xuống bản cập nhật: %s</string>\n  <string name=\"cancel\">Hủy</string>\n  <string name=\"save\">Lưu</string>\n  <string name=\"save_with_count\">Lưu (%1$s)</string>\n  <string name=\"update\">Cập nhật</string>\n  <string name=\"empty\">Trống</string>\n  <string name=\"installing_message\">Nhấn vào <b>Cập nhật</b> khi được nhắc.\\nReVanced Manager sẽ đóng khi cập nhật.</string>\n  <string name=\"no_changelogs_found\">Không tìm thấy nhật ký thay đổi</string>\n  <string name=\"just_now\">Vừa xong</string>\n  <string name=\"minutes_ago\">%s phút trước</string>\n  <string name=\"hours_ago\">%s giờ trước</string>\n  <string name=\"days_ago\">%s ngày trước</string>\n  <string name=\"invalid_date\">Ngày không hợp lệ</string>\n  <string name=\"disable_battery_optimization\">Tắt tối ưu hóa pin</string>\n  <string name=\"input_dialog_value_invalid\">Giá trị không hợp lệ</string>\n  <string name=\"option_required\">Tùy chọn này là bắt buộc</string>\n  <string name=\"required_options_screen\">Tùy chọn bắt buộc</string>\n  <string name=\"failed_to_check_updates\">Không thể kiểm tra bản cập nhật: %s</string>\n  <string name=\"no_update_available\">Không có bản cập nhật</string>\n  <string name=\"no_announcements_found\">Không tìm thấy thông báo nào</string>\n  <string name=\"update_check\">Đang kiểm tra bản cập nhật…</string>\n  <string name=\"dismiss_temporary\">Không phải bây giờ</string>\n  <string name=\"update_available_dialog_description\">Một phiên bản mới của ReVanced Manager (%s) hiện đã có sẵn.</string>\n  <string name=\"failed_to_download_update\">Không thể tải xuống bản cập nhật: %s</string>\n  <string name=\"download\">Tải xuống</string>\n  <string name=\"download_confirmation_metered\">Bạn đang sử dụng kết nối tính phí theo dung lượng, và có thể phát sinh phí dữ liệu từ nhà cung cấp dịch vụ của bạn.\\n\\nBạn vẫn muốn tiếp tục?</string>\n  <string name=\"download_update_confirmation\">Tải xuống bản cập nhật?</string>\n  <string name=\"no_contributors_found\">Không tìm thấy người đóng góp nào</string>\n  <string name=\"select\">Chọn</string>\n  <string name=\"select_deselect_all\">Chọn hoặc bỏ chọn tất cả</string>\n  <string name=\"select_patches_type_dialog_description\">Thêm bản vá mới từ URL hoặc tệp cục bộ</string>\n  <string name=\"local_patches_description\">Thêm bản vá từ bộ nhớ cục bộ.</string>\n  <string name=\"remote_patches_description\">Thêm bản vá từ URL. Các bản vá có thể tự động cập nhật.</string>\n  <string name=\"recommended\">Đề xuất</string>\n  <string name=\"installation_failed_dialog_title\">Cài đặt thất bại</string>\n  <string name=\"installation_cancelled_dialog_title\">Đã hủy cài đặt</string>\n  <string name=\"installation_blocked_dialog_title\">Cài đặt bị chặn</string>\n  <string name=\"installation_conflict_dialog_title\">Xung đột cài đặt</string>\n  <string name=\"installation_incompatible_dialog_title\">Cài đặt không tương thích</string>\n  <string name=\"installation_invalid_dialog_title\">Cài đặt không hợp lệ</string>\n  <string name=\"installation_storage_issue_dialog_title\">Không đủ dung lượng bộ nhớ</string>\n  <string name=\"installation_timeout_dialog_title\">Quá thời gian cài đặt</string>\n  <string name=\"installation_failed_description\">Cài đặt thất bại vì lý do không xác định. Thử lại?</string>\n  <string name=\"installation_aborted_description\">Quá trình cài đặt đã bị hủy thủ công. Thử lại?</string>\n  <string name=\"installation_blocked_description\">Quá trình cài đặt đã bị chặn. Xem lại cài đặt bảo mật thiết bị của bạn và thử lại.</string>\n  <string name=\"installation_conflict_description\">Quá trình cài đặt đã bị ngăn chặn bởi một cài đặt ứng dụng hiện có. Gỡ cài đặt ứng dụng đã cài đặt và thử lại?</string>\n  <string name=\"installation_incompatible_description\">Ứng dụng không tương thích với thiết bị này. Sử dụng một APK tương thích với thiết bị này và thử lại.</string>\n  <string name=\"installation_invalid_description\">Ứng dụng không hợp lệ. Gỡ cài đặt ứng dụng và thử lại?</string>\n  <string name=\"installation_storage_issue_description\">Không thể cài đặt ứng dụng do không đủ dung lượng lưu trữ. Giải phóng một ít dung lượng và thử lại.</string>\n  <string name=\"installation_timeout_description\">Quá trình cài đặt mất quá nhiều thời gian. Thử lại?</string>\n  <string name=\"reinstall\">Cài đặt lại</string>\n  <string name=\"show\">Hiển thị</string>\n  <string name=\"debugging\">Gỡ Lỗi</string>\n  <string name=\"about_device\">Thông tin thiết bị</string>\n  <string name=\"enter_url\">Nhập URL</string>\n  <string name=\"next\">Tiếp theo</string>\n  <string name=\"auto_update\">Tự động cập nhật</string>\n  <string name=\"add_patches\">Thêm bản vá</string>\n  <string name=\"auto_update_description\">Tự động cập nhật khi có phiên bản mới</string>\n  <string name=\"patches_prereleases\">Dùng bản phát hành trước</string>\n  <string name=\"patches_prereleases_description\">Sử dụng các phiên bản phát hành trước của %s</string>\n  <string name=\"patches_url\">URL bản vá</string>\n  <string name=\"incompatible_patches_dialog\">Các bản vá này không tương thích với phiên bản ứng dụng đã chọn (%1$s).\\n\\nNhấn vào các bản vá để xem chi tiết hơn.</string>\n  <string name=\"incompatible_patch\">Bản vá không tương thích</string>\n  <string name=\"any_version\">Bất kỳ</string>\n  <string name=\"never_show_again\">Không bao giờ hiển thị lại</string>\n  <string name=\"show_manager_update_dialog_on_launch\">Hiển thị thông báo cập nhật khi khởi chạy</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">Hiển thị thông báo bật lên bất cứ khi nào có bản cập nhật mới khi khởi chạy</string>\n  <string name=\"failed_to_import_keystore\">Không thể nhập kho khóa</string>\n  <string name=\"export\">Xuất</string>\n  <string name=\"confirm\">Xác nhận</string>\n  <string name=\"new_announcement\">Thông báo mới:\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"other\">%d bản vá</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"other\">Thực thi %d bản vá</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"other\">%d đã chọn</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rCN/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">修补程序</string>\n  <string name=\"patches\">补丁</string>\n  <string name=\"cli\">CLI</string>\n  <string name=\"manager\">管理器</string>\n  <string name=\"onboarding_welcome_to\">欢迎来到</string>\n  <string name=\"onboarding_welcome_back\">你好！这是新的</string>\n  <string name=\"onboarding_apps_subtitle\">您可以现在选择要修补的应用程序，或稍后再进行</string>\n  <string name=\"onboarding_updates_subtitle\">配置自动更新，以使 ReVanced Manager 和补丁保持最新</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager 将连接到 %s 以便下载初始版本，如果您的设备已连接到互联网。</string>\n  <string name=\"retry\">重试</string>\n  <string name=\"onboarding_skip\">暂时跳过</string>\n  <string name=\"onboarding_recommended_version\">推荐版本：%s</string>\n  <string name=\"onboarding_permissions_skip_title\">跳过权限？</string>\n  <string name=\"onboarding_permissions_skip_description\">如果没有所需的权限，某些功能可能无法正常工作。您可以在应用设置中稍后授予它们。</string>\n  <string name=\"onboarding_permissions_skip_anyway\">仍然跳过</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager 需要一些权限才能正常工作</string>\n  <string name=\"permission_install_apps\">安装未知应用</string>\n  <string name=\"permission_install_apps_description\">安装修补后的应用所需</string>\n  <string name=\"permission_notifications\">通知</string>\n  <string name=\"permission_battery\">电池优化</string>\n  <string name=\"permission_battery_description\">防止在后台修补被中断</string>\n  <string name=\"permission_grant\">授予</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager 下载器主机</string>\n  <string name=\"downloader_host_permission_description\">用于控制对 ReVanced Manager 下载器的访问。只有 ReVanced Manager 拥有此权限。</string>\n  <string name=\"toast_copied_to_clipboard\">已复制！</string>\n  <string name=\"copy_to_clipboard\">复制到剪贴板</string>\n  <string name=\"dashboard\">仪表盘</string>\n  <string name=\"settings\">设置</string>\n  <string name=\"select_app\">选择应用</string>\n  <string name=\"patches_count_selected\">已选择 %1$d/%2$d</string>\n  <string name=\"fab_patch_app\">修补应用</string>\n  <string name=\"fab_add_patches\">添加补丁</string>\n  <string name=\"new_downloader_notification\">有新的下载器可用。点击此处进行配置。</string>\n  <string name=\"unsupported_architecture_warning\">此设备架构不支持打补丁，很可能会失败。</string>\n  <string name=\"import_\">导入</string>\n  <string name=\"import_patches\">导入补丁</string>\n  <string name=\"file_field_set\">已选择</string>\n  <string name=\"file_field_not_set\">未选择</string>\n  <string name=\"field_not_set\">未设置</string>\n  <string name=\"patches_missing\">缺失</string>\n  <string name=\"patches_error\">错误</string>\n  <string name=\"patches_error_description\">无法加载补丁。点击查看错误。</string>\n  <string name=\"patches_not_downloaded\">补丁尚未下载。</string>\n  <string name=\"patches_name_default\">补丁</string>\n  <string name=\"patches_name_fallback\">未命名</string>\n  <string name=\"android_11_bug_dialog_title\">Android 11 错误</string>\n  <string name=\"android_11_bug_dialog_description\">必须提前授予应用安装权限，以避免 Android 11 系统中的一个错误，该错误将对用户体验产生负面影响。</string>\n  <string name=\"no_network_toast\">无可用互联网连接</string>\n  <string name=\"selected_app_meta_any_version\">任何可用版本</string>\n  <string name=\"app_source_dialog_title\">选择来源</string>\n  <string name=\"app_source_dialog_option_auto\">自动</string>\n  <string name=\"app_source_dialog_option_auto_description\">使用已安装的应用程序，然后下载的 APK，然后可用的下载器</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">没有找到兼容的应用程序或下载器</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">已挂载的应用程序在没有root权限的情况下无法再次修补</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">版本 %s 与建议版本不匹配</string>\n  <string name=\"patch_item_description\">开始修补应用程序</string>\n  <string name=\"patch_selector_item\">选择补丁</string>\n  <string name=\"patch_selector_item_description\">已选择 %d 个补丁</string>\n  <string name=\"patch_selection_changed_warning\">补丁选择已更改</string>\n  <string name=\"no_patches_selected\">未选择补丁</string>\n  <string name=\"network_unavailable_warning\">您的设备未连接到互联网。稍后下载将失败。</string>\n  <string name=\"network_metered_warning\">您目前使用的是按流量计费的网络连接。您的服务提供商可能会收取数据费用。</string>\n  <string name=\"apk_source_selector_item\">选择 APK 来源</string>\n  <string name=\"apk_source_auto\">自动</string>\n  <string name=\"apk_source_auto_installed\">自动 · 使用已安装的 APK</string>\n  <string name=\"apk_source_auto_downloaded\">自动 · 使用已下载的 APK</string>\n  <string name=\"apk_source_auto_downloader\">自动 · 使用可用的下载器</string>\n  <string name=\"apk_source_auto_storage\">自动 · 从存储中选择</string>\n  <string name=\"apk_source_downloader\">正在使用 %s</string>\n  <string name=\"apk_source_installed\">使用已安装的 APK</string>\n  <string name=\"apk_source_local\">使用本地 APK 文件</string>\n  <string name=\"apk_source_downloaded\">已下载</string>\n  <string name=\"legacy_import_failed\">无法导入旧版设置</string>\n  <string name=\"auto_updates_dialog_title\">配置更新</string>\n  <string name=\"auto_updates_dialog_description\">您希望 ReVanced Manager 定期检查以下组件的更新吗？</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced 补丁</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: 下载器</string>\n  <string name=\"auto_updates_dialog_note\">这些设置稍后可以更改。\n\n    ReVanced Manager 将连接到 %s 以便下载初始版本，如果您的设备已连接到互联网。</string>\n  <string name=\"announcements_filter_tag\">按标签筛选</string>\n  <string name=\"announcements_show_archived\">显示已存档</string>\n  <string name=\"general\">通用</string>\n  <string name=\"general_description\">语言、主题、动态颜色</string>\n  <string name=\"updates\">更新</string>\n  <string name=\"updates_description\">检查更新并查看更新日志</string>\n  <string name=\"downloads\">下载</string>\n  <string name=\"downloads_description\">下载器和已下载的应用</string>\n  <string name=\"import_export\">导入 &amp; 导出</string>\n  <string name=\"import_export_description\">密钥库、补丁选项和选择</string>\n  <string name=\"advanced\">高级</string>\n  <string name=\"advanced_description\">API URL、内存限制、调试</string>\n  <string name=\"safeguards_toggled_warning\">安全防护已切换</string>\n  <string name=\"about\">关于</string>\n  <string name=\"about_app_name\">关于 %1$s</string>\n  <string name=\"opensource_licenses\">开源许可证</string>\n  <string name=\"opensource_licenses_description\">查看用于制作此应用程序的所有库</string>\n  <string name=\"contributors\">贡献者</string>\n  <string name=\"contributors_description\">查看 ReVanced 的贡献者</string>\n  <string name=\"dynamic_color\">动态颜色</string>\n  <string name=\"dynamic_color_description\">根据壁纸调整颜色</string>\n  <string name=\"pure_black_theme\">纯黑主题</string>\n  <string name=\"pure_black_theme_description\">深色主题使用纯黑背景</string>\n  <string name=\"theme\">主题</string>\n  <string name=\"theme_description\">选择亮色或深色主题</string>\n  <string name=\"language\">语言</string>\n  <string name=\"language_description\">选择应用显示语言</string>\n  <string name=\"language_system_default\">系统默认</string>\n  <string name=\"search_languages\">搜索语言…</string>\n  <string name=\"safeguards\">防护措施</string>\n  <string name=\"patch_compat_check\">禁用版本兼容性检查</string>\n  <string name=\"patch_compat_check_description\">不将补丁限制到兼容的应用版本</string>\n  <string name=\"patch_compat_check_confirmation\">选择不兼容的补丁可能会导致应用损坏。\n\n您确定要继续吗？</string>\n  <string name=\"suggested_version_safeguard\">需要建议的应用版本</string>\n  <string name=\"suggested_version_safeguard_description\">强制选择建议的应用版本</string>\n  <string name=\"suggested_version_safeguard_confirmation\">选择非建议版本的应用可能会导致意外问题。\n\n您确定要继续吗？</string>\n  <string name=\"patch_selection_safeguard\">允许更改补丁选择和选项</string>\n  <string name=\"patch_selection_safeguard_description\">不阻止选择或取消选择补丁以及自定义选项</string>\n  <string name=\"patch_selection_safeguard_confirmation\">更改补丁选择可能会导致意外问题。\n\n仍要启用吗？</string>\n  <string name=\"universal_patches_safeguard\">允许使用通用补丁</string>\n  <string name=\"universal_patches_safeguard_description\">不阻止使用通用补丁</string>\n  <string name=\"universal_patches_safeguard_confirmation\">通用补丁不如针对特定应用的补丁经过充分测试。\n\n仍要启用吗？</string>\n  <string name=\"keystore\">密钥库</string>\n  <string name=\"patches_selections\">补丁选择</string>\n  <string name=\"import_keystore\">导入密钥库</string>\n  <string name=\"import_keystore_description\">导入自定义密钥库</string>\n  <string name=\"import_keystore_dialog_title\">输入密钥库凭据</string>\n  <string name=\"import_keystore_dialog_description\">您需要输入密钥库的凭据才能导入它。</string>\n  <string name=\"import_keystore_dialog_alias_field\">用户名 (别名)</string>\n  <string name=\"import_keystore_dialog_password_field\">密码</string>\n  <string name=\"import_keystore_dialog_button\">导入</string>\n  <string name=\"import_keystore_wrong_credentials\">错误的密钥库凭据</string>\n  <string name=\"import_keystore_success\">已导入密钥库</string>\n  <string name=\"export_keystore\">导出密钥库</string>\n  <string name=\"export_keystore_description\">导出当前密钥库</string>\n  <string name=\"export_keystore_unavailable\">没有可导出的密钥库</string>\n  <string name=\"export_keystore_success\">已导出密钥库</string>\n  <string name=\"regenerate_keystore\">重新生成密钥库</string>\n  <string name=\"regenerate_keystore_description\">生成新密钥库</string>\n  <string name=\"regenerate_keystore_dialog_description\">您将重新生成管理器在打补丁过程中使用的密钥库。\n\n您将无法从此源更新之前安装的应用。</string>\n  <string name=\"regenerate_keystore_success\">密钥库已成功替换</string>\n  <string name=\"import_patch_selection\">导入补丁选择</string>\n  <string name=\"import_patch_selection_description\">从 JSON 文件导入补丁选择</string>\n  <string name=\"import_patch_selection_fail\">无法导入补丁选择：%s</string>\n  <string name=\"import_patch_selection_success\">已导入补丁选择</string>\n  <string name=\"select_bundle_for_import\">选择要导入的捆绑包</string>\n  <string name=\"export_patch_selection\">导出补丁选择</string>\n  <string name=\"export_patch_selection_description\">将补丁选择导出到 JSON 文件</string>\n  <string name=\"export_patch_selection_fail\">无法导出补丁选择：%s</string>\n  <string name=\"export_patch_selection_success\">已导出补丁选择</string>\n  <string name=\"select_bundle_for_export\">选择要导出的捆绑包</string>\n  <string name=\"patch_selection_packages\">具有已保存选择的应用</string>\n  <string name=\"patch_selection_entries\">已选择的补丁总数</string>\n  <string name=\"reset_configuration\">重置配置</string>\n  <string name=\"reset_patch_selection\">补丁选择</string>\n  <string name=\"reset_patch_selection_description\">重置存储的补丁选择</string>\n  <string name=\"reset_patch_options\">补丁选项</string>\n  <string name=\"reset_patch_options_description\">重置存储的补丁选项</string>\n  <string name=\"reset_patch_selection_success\">补丁选择已重置</string>\n  <string name=\"patch_selection_reset_all\">全局重置补丁选择</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">您将重置所有补丁选择。您需要再次手动选择每个补丁。</string>\n  <string name=\"patch_selection_reset_all_description\">重置所有补丁选择</string>\n  <string name=\"patch_selection_reset_package\">重置应用的补丁选择</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">您将重置应用“%s”的补丁选择。您需要再次手动选择每个补丁。</string>\n  <string name=\"patch_selection_reset_package_description\">重置单个应用的补丁选择</string>\n  <string name=\"patch_selection_reset_patches\">重置补丁选择（单个）</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">您即将重置“%s”的补丁选择。您需要再次手动选择每个补丁。</string>\n  <string name=\"patch_selection_reset_patches_description\">重置特定补丁集的补丁选择</string>\n  <string name=\"patch_options_reset_package\">重置应用的补丁选项</string>\n  <string name=\"patch_options_reset_package_dialog_description\">您即将重置应用“%s”的补丁选项。您需要再次重新应用每个选项。</string>\n  <string name=\"patch_options_reset_package_description\">重置单个应用的补丁选项</string>\n  <string name=\"patch_options_reset_patches\">重置补丁选项（单个）</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">您即将重置“%s”的补丁选项。您需要再次重新应用每个选项。</string>\n  <string name=\"patch_options_reset_patches_description\">重置特定补丁集的补丁选项</string>\n  <string name=\"patch_options_reset_all\">全局重置补丁选项</string>\n  <string name=\"patch_options_reset_all_dialog_description\">您即将重置所有补丁选项。您需要再次重新应用每个选项。</string>\n  <string name=\"patch_options_reset_all_description\">重置所有补丁选项</string>\n  <string name=\"downloaders\">下载器</string>\n  <string name=\"downloader_prereleases\">使用预发布版本</string>\n  <string name=\"downloader_prereleases_description\">使用主下载器的预发布版本</string>\n  <string name=\"downloader_state_loaded\">已加载</string>\n  <string name=\"downloader_state_failed\">加载失败。点击查看更多详情</string>\n  <string name=\"downloader_state_missing\">缺失</string>\n  <string name=\"downloader_delete_apps_title\">删除选定的应用</string>\n  <string name=\"downloader_delete_apps_description\">您确定要删除选定的应用吗？</string>\n  <string name=\"downloader_delete_single_description\">您确定要删除“%s”吗？</string>\n  <string name=\"downloader_settings_no_apps\">未找到已下载的应用。</string>\n  <string name=\"downloader_settings_no_apps_description\">通过 ReVanced Manager 下载的应用将显示在此处。</string>\n  <string name=\"downloader_url\">下载器URL</string>\n  <string name=\"downloader_add\">添加下载器</string>\n  <string name=\"select_downloader_type_dialog_description\">从URL或本地文件添加新的下载器</string>\n  <string name=\"local_downloaders_description\">从本地存储添加下载器。</string>\n  <string name=\"remote_downloaders_description\">从URL添加下载器。可自动更新。</string>\n  <string name=\"install_revanced_downloaders\">安装下载器以便直接在 ReVanced Manager 中获取应用。</string>\n  <string name=\"install_revanced_downloader\">安装 ReVanced 下载器</string>\n  <string name=\"cancel_downloader_install_title\">取消下载器安装？</string>\n  <string name=\"cancel_downloader_install_description\">正在进行下载器安装。如果您现在离开，下载将被取消。</string>\n  <string name=\"downloader_sources_unavailable_title\">这些下载器缺失</string>\n  <string name=\"downloader_sources_unavailable_description\">点击更新按钮修复。</string>\n  <string name=\"downloader_update_failed\">更新下载器失败：%s</string>\n  <string name=\"downloader_replace_fail\">导入下载器失败：%s</string>\n  <string name=\"search_apps\">搜索应用…</string>\n  <string name=\"loading_body\">正在加载…</string>\n  <string name=\"downloading_patches\">正在下载补丁…</string>\n  <string name=\"options\">选项</string>\n  <string name=\"ok\">确定</string>\n  <string name=\"yes\">是</string>\n  <string name=\"no\">否</string>\n  <string name=\"edit\">编辑</string>\n  <string name=\"dialog_input_placeholder\">值</string>\n  <string name=\"reset\">重置</string>\n  <string name=\"share\">分享</string>\n  <string name=\"patch\">补丁</string>\n  <string name=\"select_from_storage\">从存储中选择</string>\n  <string name=\"select_from_storage_description\">使用文件选择器从存储中选择一个 APK 文件</string>\n  <string name=\"suggested_version_info\">建议版本：%s</string>\n  <string name=\"type_anything\">输入任意内容以继续</string>\n  <string name=\"search\">搜索补丁…</string>\n  <string name=\"apply\">应用</string>\n  <string name=\"help\">帮助</string>\n  <string name=\"back\">返回</string>\n  <string name=\"warning\">警告</string>\n  <string name=\"add\">添加</string>\n  <string name=\"enable\">启用</string>\n  <string name=\"disable\">禁用</string>\n  <string name=\"close\">关闭</string>\n  <string name=\"clear\">清除</string>\n  <string name=\"system\">系统</string>\n  <string name=\"light\">浅色</string>\n  <string name=\"dark\">深色</string>\n  <string name=\"appearance\">外观</string>\n  <string name=\"networking\">网络</string>\n  <string name=\"allow_metered_networks\">允许按流量计费的网络</string>\n  <string name=\"allow_metered_networks_description\">允许在按流量计费的网络上自动更新。\\n    应用程序在手动操作时仍可能警告按流量计费的网络。</string>\n  <string name=\"downloaded_apps\">已下载的应用</string>\n  <string name=\"process_runtime\">在另一个进程中运行补丁程序（实验性）</string>\n  <string name=\"process_runtime_description\">这更快，并允许补丁程序使用更多内存</string>\n  <string name=\"process_runtime_memory_limit\">补丁程序进程内存限制</string>\n  <string name=\"process_runtime_memory_limit_description\">修补程序进程可使用的最大内存量</string>\n  <string name=\"debug_logs_export\">导出调试日志</string>\n  <string name=\"debug_logs_export_read_failed\">读取日志失败（退出代码：%d）</string>\n  <string name=\"debug_logs_export_failed\">导出日志失败</string>\n  <string name=\"debug_logs_export_success\">已导出日志</string>\n  <string name=\"api_url\">API URL</string>\n  <string name=\"api_url_description\">用于下载必要文件的 API</string>\n  <string name=\"api_url_dialog_title\">更改 API URL</string>\n  <string name=\"api_url_dialog_description\">更改 ReVanced Manager 的 API URL。ReVanced Manager 使用 API 下载补丁和更新。</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager 连接到 API 下载补丁和更新。请确保您信任它。</string>\n  <string name=\"api_url_dialog_save\">设置</string>\n  <string name=\"api_url_dialog_reset\">重置 API URL</string>\n  <string name=\"device\">设备</string>\n  <string name=\"device_android_version\">Android 版本</string>\n  <string name=\"device_model\">型号</string>\n  <string name=\"device_architectures\">CPU 架构</string>\n  <string name=\"device_memory_limit\">内存限制</string>\n  <string name=\"device_memory_limit_format\">%1$dMB（正常）- %2$dMB（大）</string>\n  <string name=\"patches_force_download\">强制下载所有补丁</string>\n  <string name=\"patches_reset\">重置补丁</string>\n  <string name=\"reset_onboarding\">重置新手引导</string>\n  <string name=\"reset_onboarding_description\">在下次应用启动时显示新手引导屏幕</string>\n  <string name=\"patching\">打补丁</string>\n  <string name=\"signing\">签名</string>\n  <string name=\"storage\">存储</string>\n  <string name=\"no_patch_found\">未找到补丁。请检查您的补丁</string>\n  <string name=\"tab_apps\">应用</string>\n  <string name=\"tab_patches\">补丁</string>\n  <string name=\"delete\">删除</string>\n  <string name=\"refresh\">刷新</string>\n  <string name=\"continue_anyways\">无论如何都继续</string>\n  <string name=\"download_another_version\">下载其他版本</string>\n  <string name=\"download_app\">下载应用</string>\n  <string name=\"download_apk\">下载 APK 文件</string>\n  <string name=\"patches_download_fail\">下载补丁失败：%s</string>\n  <string name=\"api_not_working_title\">API 服务当前不可用</string>\n  <string name=\"api_not_working_description\">部分功能可能会受影响。请检查您的连接或设置中的 API URL。</string>\n  <string name=\"patches_replace_fail\">导入补丁失败：%s</string>\n  <string name=\"no_patched_apps_found\">未找到已修补应用</string>\n  <string name=\"no_patched_apps_description\">您目前没有我们所知的任何已修补应用。通过修补您的第一个应用来改变这种情况！</string>\n  <string name=\"patched_apps_section_title\">已打补丁的应用</string>\n  <string name=\"patchable_apps_section_title\">可打补丁的应用</string>\n  <string name=\"no_patches_found\">未找到补丁</string>\n  <string name=\"no_patches_description\">您还没有任何补丁。点击下面的按钮添加补丁！</string>\n  <string name=\"tap_on_patches\">点击补丁以获取更多信息</string>\n  <string name=\"patches_selected\">已选择 %s</string>\n  <string name=\"incompatible_patches\">不兼容的补丁</string>\n  <string name=\"universal_patches\">通用补丁</string>\n  <string name=\"patch_selection_reset_toast\">补丁选择和选项已重置为推荐默认值</string>\n  <string name=\"patch_options_reset_toast\">补丁选项已重置</string>\n  <string name=\"non_suggested_version_warning_title\">非建议版本</string>\n  <string name=\"non_suggested_version_warning_description\">您选择的应用版本与建议版本不匹配。\\n请使用建议版本：%s\\n\\n若要继续，请在高级设置中禁用“要求建议应用版本”。</string>\n  <string name=\"selection_warning_title\">停止使用默认值？</string>\n  <string name=\"selection_warning_description\">建议使用默认补丁选择和选项。更改它们可能会导致意外问题。\\n\\n在切换补丁之前，您需要在高级设置中开启“允许更改补丁选择和选项”。</string>\n  <string name=\"universal_patch_warning_description\">通用补丁用途更广，但不如针对特定应用的补丁可靠。使用它们时可能会遇到问题。\\n\\n在使用通用补丁之前，您需要在高级设置中开启“允许使用通用补丁”。</string>\n  <string name=\"this_version\">此版本</string>\n  <string name=\"universal\">任何应用</string>\n  <string name=\"search_patches\">搜索补丁</string>\n  <string name=\"app_version_not_compatible\">此补丁与所选应用版本 (%1$s) 不兼容\\n\\n它仅与以下版本兼容：%2$s</string>\n  <string name=\"continue_with_version\">继续使用此版本？</string>\n  <string name=\"version_not_compatible\">并非所有补丁都与此版本 (%s) 兼容。您确定要继续吗？</string>\n  <string name=\"download_application\">下载应用程序？</string>\n  <string name=\"app_not_installed\">您选择的应用未安装。您要下载它吗？</string>\n  <string name=\"failed_to_load_apk\">加载 APK 失败</string>\n  <string name=\"split_apk_not_supported\">分体式 APK 无法修补</string>\n  <string name=\"loading\">正在加载…</string>\n  <string name=\"not_installed\">未安装</string>\n  <string name=\"installed\">已安装</string>\n  <string name=\"app_info\">应用信息</string>\n  <string name=\"uninstall\">卸载</string>\n  <string name=\"unpatch\">取消打补丁</string>\n  <string name=\"repatch\">重新打补丁</string>\n  <string name=\"install_type\">安装类型</string>\n  <string name=\"package_name\">包名</string>\n  <string name=\"original_package_name\">原始包名</string>\n  <string name=\"applied_patches\">已应用补丁</string>\n  <string name=\"view_applied_patches\">查看已应用补丁</string>\n  <string name=\"default_install\">默认</string>\n  <string name=\"mount_install\">挂载</string>\n  <string name=\"mounted\">已挂载</string>\n  <string name=\"not_mounted\">未挂载</string>\n  <string name=\"mount\">挂载</string>\n  <string name=\"unmount\">卸载</string>\n  <string name=\"failed_to_mount\">挂载失败：%s</string>\n  <string name=\"failed_to_unmount\">卸载失败：%s</string>\n  <string name=\"unpatch_app\">卸载应用补丁？</string>\n  <string name=\"unpatch_description\">您确定要卸载此应用的补丁吗？</string>\n  <string name=\"downloader_invalid_version\">下载器未获取到正确版本</string>\n  <string name=\"downloader_app_not_found\">下载器未找到应用</string>\n  <string name=\"downloader_error\">下载器错误：%s</string>\n  <string name=\"no_downloaders_installed\">未安装任何应用下载器！</string>\n  <string name=\"no_downloaders_trusted\">没有应用下载器受到信任！请检查您的设置。</string>\n  <string name=\"already_patched\">已打补丁</string>\n  <string name=\"patch_selector_sheet_filter_title\">筛选</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">兼容性</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">软件包</string>\n  <string name=\"patch_selector_sheet_actions_title\">操作</string>\n  <string name=\"restore_default_selection\">恢复默认选择</string>\n  <string name=\"deselect_all\">取消全选</string>\n  <string name=\"invert_selection\">反选</string>\n  <string name=\"deselect_all_except\">除了 %s，全部取消选择</string>\n  <string name=\"scope_dialog_title\">应用于</string>\n  <string name=\"scope_all_patches\">所有补丁</string>\n  <string name=\"scope_bundle_patches\">仅限 %s</string>\n  <string name=\"string_option_menu_description\">更多选项</string>\n  <string name=\"option_preset_custom_value\">自定义值</string>\n  <string name=\"path_selector\">从存储中选择</string>\n  <string name=\"path_selector_parent_dir\">上级目录</string>\n  <string name=\"path_selector_dirs\">目录</string>\n  <string name=\"path_selector_files\">文件</string>\n  <string name=\"show_password_field\">显示密码</string>\n  <string name=\"hide_password_field\">隐藏密码</string>\n  <string name=\"installer\">安装器</string>\n  <string name=\"install_app\">安装</string>\n  <string name=\"install_app_success\">应用已安装</string>\n  <string name=\"install_app_fail\">安装应用失败：%s</string>\n  <string name=\"reinstall_app_fail\">重新安装应用失败：%s</string>\n  <string name=\"uninstall_app_fail\">卸载应用失败：%s</string>\n  <string name=\"open_app\">打开</string>\n  <string name=\"save_apk\">保存 APK</string>\n  <string name=\"save_apk_success\">APK 已保存</string>\n  <string name=\"sign_fail\">签名 APK 失败：%s</string>\n  <string name=\"save_logs\">保存日志</string>\n  <string name=\"save_as_file\">保存到文件</string>\n  <string name=\"export_patcher_logs\">导出修补器日志</string>\n  <string name=\"save_logs_success\">日志已保存</string>\n  <string name=\"downloader_activity_dialog_body\">需要用户交互才能继续使用此下载器。</string>\n  <string name=\"select_install_type\">选择安装类型</string>\n  <string name=\"patcher_step_group_preparing\">准备中</string>\n  <string name=\"patcher_step_load_patches\">加载补丁</string>\n  <string name=\"patcher_step_unpack\">准备补丁程序</string>\n  <string name=\"patcher_step_group_patching\">打补丁</string>\n  <string name=\"patcher_step_group_saving\">保存中</string>\n  <string name=\"patcher_step_write_patched\">写入已打补丁的 APK 文件</string>\n  <string name=\"patcher_step_sign_apk\">签名已打补丁的 APK 文件</string>\n  <string name=\"patcher_notification_title\">补丁处理进行中…</string>\n  <string name=\"patcher_notification_text\">轻触返回补丁器</string>\n  <string name=\"patcher_stop_confirm_title\">停止补丁器</string>\n  <string name=\"patcher_stop_confirm_description\">您确定要停止补丁处理吗？</string>\n  <string name=\"patcher_install_in_progress\">安装正在进行中。请稍候</string>\n  <string name=\"execute_patches\">执行补丁</string>\n  <string name=\"executing_patch\">执行 %s</string>\n  <string name=\"failed_to_execute_patch\">执行 %s 失败</string>\n  <string name=\"step_completed\">已完成</string>\n  <string name=\"step_failed\">失败</string>\n  <string name=\"step_running\">运行中</string>\n  <string name=\"step_waiting\">等待中</string>\n  <string name=\"expand_content\">展开</string>\n  <string name=\"collapse_content\">折叠</string>\n  <string name=\"drag_handle\">重新排序</string>\n  <string name=\"more\">更多</string>\n  <string name=\"less\">更少</string>\n  <string name=\"continue_\">继续</string>\n  <string name=\"dismiss\">忽略</string>\n  <string name=\"view_announcement\">查看公告</string>\n  <string name=\"permanent_dismiss\">不再显示</string>\n  <string name=\"donate\">捐赠</string>\n  <string name=\"website\">网站</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">联系我们</string>\n  <string name=\"license\">许可证</string>\n  <string name=\"source\">来源</string>\n  <string name=\"repository\">仓库</string>\n  <string name=\"bundle_information_by_author\">作者：%1$s</string>\n  <string name=\"version\">版本</string>\n  <string name=\"version_compatibility_warning\">所选版本可能与所选补丁不兼容</string>\n  <string name=\"submit_feedback\">提交问题或反馈</string>\n  <string name=\"submit_feedback_description\">帮助我们改进此应用程序</string>\n  <string name=\"developer_options\">开发者选项</string>\n  <string name=\"developer_options_description\">调试问题的选项</string>\n  <string name=\"patches_update_success\">更新成功</string>\n  <string name=\"patches_update_unavailable\">无可用更新</string>\n  <string name=\"view_patches\">查看补丁</string>\n  <string name=\"patches_view_any_version\">任何版本</string>\n  <string name=\"patches_view_any_package\">任何包</string>\n  <string name=\"patches_delete_single_dialog_description\">您确定要删除“%s”吗？</string>\n  <string name=\"patches_delete_multiple_dialog_description\">您确定要删除选定的补丁吗？</string>\n  <string name=\"announcements\">公告</string>\n  <string name=\"archive\">归档</string>\n  <string name=\"about_revanced_manager\">关于 ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager 是一款 Android 应用程序，它使用 ReVanced Patcher 为 Android 应用程序打补丁。它允许您下载并使用自定义补丁为应用程序打补丁，并管理打补丁的过程。</string>\n  <string name=\"developer_options_taps\">剩余 %d 次点击</string>\n  <string name=\"developer_options_enabled\">开发者选项已启用</string>\n  <string name=\"developer_options_already_enabled\">开发者选项已启用</string>\n  <string name=\"update_available\">有可用更新</string>\n  <string name=\"current_version\">当前版本：%s</string>\n  <string name=\"new_version\">新版本：%s</string>\n  <string name=\"ready_to_install_update\">准备安装更新</string>\n  <string name=\"update_completed\">更新已安装</string>\n  <string name=\"install_update_manager_failed\">安装更新失败</string>\n  <string name=\"manual_update_check\">检查更新</string>\n  <string name=\"view_update\">查看更新</string>\n  <string name=\"manual_update_check_description\">手动检查更新</string>\n  <string name=\"update_checking_manager\">启动时检查更新</string>\n  <string name=\"update_checking_manager_description\">应用程序启动时检查 ReVanced Manager 的新版本</string>\n  <string name=\"update_checking_downloader\">启动时检查 ReVanced 下载器更新</string>\n  <string name=\"update_checking_downloader_description\">应用启动时检查已安装的 ReVanced 下载器更新</string>\n  <string name=\"manager_prereleases\">使用预发布版本</string>\n  <string name=\"manager_prereleases_description\">使用 ReVanced Manager 的预发布版本</string>\n  <string name=\"prereleases_warning\">预发布版本可能不稳定并包含错误。您可能会遇到崩溃、数据丢失或其他意外问题。如果您能接受这些风险，才启用此功能。</string>\n  <string name=\"changelog\">查看更新日志</string>\n  <string name=\"changelog_loading\">正在加载更新日志</string>\n  <string name=\"changelog_download_fail\">下载更新日志失败：%s</string>\n  <string name=\"changelog_description\">查看此更新中的最新更改</string>\n  <string name=\"battery_optimization_notification\">必须关闭电池优化，ReVanced Manager 才能在后台正常工作。点击此处关闭优化。</string>\n  <string name=\"installing_manager_update\">正在安装更新…</string>\n  <string name=\"downloading_manager_update\">正在下载更新…</string>\n  <string name=\"download_manager_failed\">下载更新失败：%s</string>\n  <string name=\"cancel\">取消</string>\n  <string name=\"save\">保存</string>\n  <string name=\"save_with_count\">保存 (%1$s)</string>\n  <string name=\"update\">更新</string>\n  <string name=\"empty\">空</string>\n  <string name=\"installing_message\">出现提示时，轻触<b>更新</b>。\nReVanced Manager 更新时将关闭。</string>\n  <string name=\"no_changelogs_found\">未找到更新日志</string>\n  <string name=\"just_now\">刚刚</string>\n  <string name=\"minutes_ago\">%s分钟前</string>\n  <string name=\"hours_ago\">%s小时前</string>\n  <string name=\"days_ago\">%s天前</string>\n  <string name=\"invalid_date\">无效日期</string>\n  <string name=\"disable_battery_optimization\">禁用电池优化</string>\n  <string name=\"input_dialog_value_invalid\">无效值</string>\n  <string name=\"option_required\">此选项为必填项</string>\n  <string name=\"required_options_screen\">必填选项</string>\n  <string name=\"failed_to_check_updates\">检查更新失败：%s</string>\n  <string name=\"no_update_available\">无可用更新</string>\n  <string name=\"no_announcements_found\">未找到任何公告</string>\n  <string name=\"update_check\">正在检查更新…</string>\n  <string name=\"dismiss_temporary\">暂不</string>\n  <string name=\"update_available_dialog_description\">ReVanced Manager (%s) 的新版本可用。</string>\n  <string name=\"failed_to_download_update\">下载更新失败：%s</string>\n  <string name=\"download\">下载</string>\n  <string name=\"download_confirmation_metered\">您当前使用的是按流量计费的网络连接，您的服务提供商可能会收取流量费用。\n\n您是否仍要继续？</string>\n  <string name=\"download_update_confirmation\">下载更新？</string>\n  <string name=\"no_contributors_found\">未找到贡献者</string>\n  <string name=\"select\">选择</string>\n  <string name=\"select_deselect_all\">全选或全不选</string>\n  <string name=\"select_patches_type_dialog_description\">从 URL 或本地文件添加新补丁</string>\n  <string name=\"local_patches_description\">从本地存储添加补丁。</string>\n  <string name=\"remote_patches_description\">从 URL 添加补丁。补丁可以自动更新。</string>\n  <string name=\"recommended\">推荐</string>\n  <string name=\"installation_failed_dialog_title\">安装失败</string>\n  <string name=\"installation_cancelled_dialog_title\">安装已取消</string>\n  <string name=\"installation_blocked_dialog_title\">安装被阻止</string>\n  <string name=\"installation_conflict_dialog_title\">安装冲突</string>\n  <string name=\"installation_incompatible_dialog_title\">安装不兼容</string>\n  <string name=\"installation_invalid_dialog_title\">安装无效</string>\n  <string name=\"installation_storage_issue_dialog_title\">存储空间不足</string>\n  <string name=\"installation_timeout_dialog_title\">安装超时</string>\n  <string name=\"installation_failed_description\">安装因未知原因失败。要重试吗？</string>\n  <string name=\"installation_aborted_description\">安装已手动取消。要重试吗？</string>\n  <string name=\"installation_blocked_description\">安装被阻止。请检查您的设备安全设置并重试。</string>\n  <string name=\"installation_conflict_description\">现有应用安装阻止了此安装。要卸载已安装的应用并重试吗？</string>\n  <string name=\"installation_incompatible_description\">此应用与此设备不兼容。请使用与此设备兼容的 APK 并重试。</string>\n  <string name=\"installation_invalid_description\">此应用无效。要卸载应用并重试吗？</string>\n  <string name=\"installation_storage_issue_description\">由于存储空间不足，无法安装此应用。请释放一些空间并重试。</string>\n  <string name=\"installation_timeout_description\">安装时间过长。要重试吗？</string>\n  <string name=\"reinstall\">重新安装</string>\n  <string name=\"show\">显示</string>\n  <string name=\"debugging\">调试</string>\n  <string name=\"about_device\">关于设备</string>\n  <string name=\"enter_url\">输入 URL</string>\n  <string name=\"next\">下一步</string>\n  <string name=\"auto_update\">自动更新</string>\n  <string name=\"add_patches\">添加补丁</string>\n  <string name=\"auto_update_description\">有新版本可用时自动更新</string>\n  <string name=\"patches_prereleases\">使用预发布版本</string>\n  <string name=\"patches_prereleases_description\">使用 %s 的预发布版本</string>\n  <string name=\"patches_url\">补丁 URL</string>\n  <string name=\"incompatible_patches_dialog\">这些补丁与所选应用版本 (%1$s) 不兼容。\n\n点击补丁以查看更多详情。</string>\n  <string name=\"incompatible_patch\">不兼容的补丁</string>\n  <string name=\"any_version\">任意</string>\n  <string name=\"never_show_again\">不再显示</string>\n  <string name=\"show_manager_update_dialog_on_launch\">启动时显示更新消息</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">启动时有新更新可用时，显示弹窗通知</string>\n  <string name=\"failed_to_import_keystore\">导入密钥库失败</string>\n  <string name=\"export\">导出</string>\n  <string name=\"confirm\">确认</string>\n  <string name=\"new_announcement\">新公告:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"other\">%d 个补丁</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"other\">执行 %d 个补丁</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"other\">已选择 %d 项</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zh-rTW/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"app_name\">ReVanced Manager</string>\n  <string name=\"patcher\">修補程式</string>\n  <string name=\"patches\">修補</string>\n  <string name=\"cli\">命令列介面</string>\n  <string name=\"manager\">Manager</string>\n  <string name=\"onboarding_welcome_to\">歡迎使用</string>\n  <string name=\"onboarding_welcome_back\">您好！這是全新的</string>\n  <string name=\"onboarding_apps_subtitle\">您可以立即選擇要修補的應用程式，或稍後再進行</string>\n  <string name=\"onboarding_updates_subtitle\">設定自動更新，以保持 ReVanced Manager 和修補程式為最新版本</string>\n  <string name=\"onboarding_updates_note\">ReVanced Manager 將連接到 %s 以下載初始版本，如果您的裝置已連接到網際網路。</string>\n  <string name=\"retry\">重試</string>\n  <string name=\"onboarding_skip\">暫時跳過</string>\n  <string name=\"onboarding_recommended_version\">建議版本：%s</string>\n  <string name=\"onboarding_permissions_skip_title\">跳過權限嗎？</string>\n  <string name=\"onboarding_permissions_skip_description\">如果沒有所需的權限，某些功能可能無法正常運作。您稍後可以在應用程式設定中授予它們。</string>\n  <string name=\"onboarding_permissions_skip_anyway\">仍然跳過</string>\n  <string name=\"onboarding_permissions_subtitle\">ReVanced Manager 需要一些權限才能正常運作</string>\n  <string name=\"permission_install_apps\">安裝不明應用程式</string>\n  <string name=\"permission_install_apps_description\">安裝已修補應用程式所需</string>\n  <string name=\"permission_notifications\">通知</string>\n  <string name=\"permission_battery\">電池最佳化</string>\n  <string name=\"permission_battery_description\">防止修補在背景中斷</string>\n  <string name=\"permission_grant\">授予</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager 下載器主機</string>\n  <string name=\"downloader_host_permission_description\">用於控制對 ReVanced Manager 下載器的存取。只有 ReVanced Manager 擁有這個權限。</string>\n  <string name=\"toast_copied_to_clipboard\">已複製！</string>\n  <string name=\"copy_to_clipboard\">複製到剪貼簿</string>\n  <string name=\"dashboard\">儀表板</string>\n  <string name=\"settings\">設定</string>\n  <string name=\"select_app\">選擇應用程式</string>\n  <string name=\"patches_count_selected\">%1$d/%2$d 已選取</string>\n  <string name=\"fab_patch_app\">修補應用程式</string>\n  <string name=\"fab_add_patches\">新增修補</string>\n  <string name=\"new_downloader_notification\">有新的下載器可用。按這裡設定。</string>\n  <string name=\"unsupported_architecture_warning\">此裝置架構不支援修補，且極有可能失敗。</string>\n  <string name=\"import_\">匯入</string>\n  <string name=\"import_patches\">匯入修補程式</string>\n  <string name=\"file_field_set\">已選取</string>\n  <string name=\"file_field_not_set\">未選取</string>\n  <string name=\"field_not_set\">未設定</string>\n  <string name=\"patches_missing\">遺失</string>\n  <string name=\"patches_error\">錯誤</string>\n  <string name=\"patches_error_description\">無法載入修補程式。按一下以檢視錯誤</string>\n  <string name=\"patches_not_downloaded\">修補程式尚未下載。</string>\n  <string name=\"patches_name_default\">修補程式</string>\n  <string name=\"patches_name_fallback\">未命名</string>\n  <string name=\"android_11_bug_dialog_title\">Android 11 錯誤</string>\n  <string name=\"android_11_bug_dialog_description\">必須提前授予應用程式安裝權限，以避免 Android 11 系統中的錯誤對使用者體驗產生負面影響。</string>\n  <string name=\"no_network_toast\">無可用的網際網路連線</string>\n  <string name=\"selected_app_meta_any_version\">任何可用版本</string>\n  <string name=\"app_source_dialog_title\">選取來源</string>\n  <string name=\"app_source_dialog_option_auto\">自動</string>\n  <string name=\"app_source_dialog_option_auto_description\">使用已安裝的應用程式，然後是下載的 APK，然後是可用的下載器</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">沒有相容的應用程式或下載器可用</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">沒有 Root 權限無法再次修補已掛載的應用程式</string>\n  <string name=\"app_source_dialog_option_installed_version_not_suggested\">版本 %s 與建議版本不符</string>\n  <string name=\"patch_item_description\">開始修補應用程式</string>\n  <string name=\"patch_selector_item\">選取修補</string>\n  <string name=\"patch_selector_item_description\">已選取 %d 個修補</string>\n  <string name=\"patch_selection_changed_warning\">修補程式選擇已變更</string>\n  <string name=\"no_patches_selected\">未選取任何修補程式</string>\n  <string name=\"network_unavailable_warning\">您的裝置未連線到網際網路。稍後下載將會失敗。</string>\n  <string name=\"network_metered_warning\">您目前使用計量付費連線。您的服務供應商可能會收取數據費用。</string>\n  <string name=\"apk_source_selector_item\">選取 APK 來源</string>\n  <string name=\"apk_source_auto\">自動</string>\n  <string name=\"apk_source_auto_installed\">自動 · 使用已安裝的 APK</string>\n  <string name=\"apk_source_auto_downloaded\">自動 · 使用已下載的 APK</string>\n  <string name=\"apk_source_auto_downloader\">自動 · 使用可用的下載器</string>\n  <string name=\"apk_source_auto_storage\">自動 · 從儲存空間選取</string>\n  <string name=\"apk_source_downloader\">使用 %s</string>\n  <string name=\"apk_source_installed\">使用已安裝的 APK</string>\n  <string name=\"apk_source_local\">使用本機 APK 檔案</string>\n  <string name=\"apk_source_downloaded\">已下載</string>\n  <string name=\"legacy_import_failed\">無法匯入舊版設定</string>\n  <string name=\"auto_updates_dialog_title\">設定更新</string>\n  <string name=\"auto_updates_dialog_description\">您是否希望 ReVanced Manager 定期檢查以下元件的更新？</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">ReVanced 修補</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager：下載器</string>\n  <string name=\"auto_updates_dialog_note\">這些設定稍後可以更改。\n\n    ReVanced Manager 將連接到 %s 以下載初始版本，如果您的裝置已連接到網際網路。</string>\n  <string name=\"announcements_filter_tag\">依標籤篩選</string>\n  <string name=\"announcements_show_archived\">顯示已封存</string>\n  <string name=\"general\">一般</string>\n  <string name=\"general_description\">語言、主題、動態顏色</string>\n  <string name=\"updates\">更新</string>\n  <string name=\"updates_description\">檢查更新並檢視變更記錄</string>\n  <string name=\"downloads\">下載</string>\n  <string name=\"downloads_description\">下載器和已下載的應用程式</string>\n  <string name=\"import_export\">匯入 &amp; 匯出</string>\n  <string name=\"import_export_description\">金鑰儲存庫、修補程式選項和選取</string>\n  <string name=\"advanced\">進階</string>\n  <string name=\"advanced_description\">API 網址、記憶體限制、偵錯</string>\n  <string name=\"safeguards_toggled_warning\">防護措施已切換</string>\n  <string name=\"about\">關於</string>\n  <string name=\"about_app_name\">關於 %1$s</string>\n  <string name=\"opensource_licenses\">開放原始碼授權</string>\n  <string name=\"opensource_licenses_description\">檢視所有用於製作此應用程式的程式庫</string>\n  <string name=\"contributors\">貢獻者</string>\n  <string name=\"contributors_description\">檢視 ReVanced 的貢獻者</string>\n  <string name=\"dynamic_color\">動態顏色</string>\n  <string name=\"dynamic_color_description\">將顏色調整為符合桌布</string>\n  <string name=\"pure_black_theme\">純黑主題</string>\n  <string name=\"pure_black_theme_description\">在深色主題下使用純黑背景</string>\n  <string name=\"theme\">主題</string>\n  <string name=\"theme_description\">選擇淺色或深色主題</string>\n  <string name=\"language\">語言</string>\n  <string name=\"language_description\">選擇應用程式顯示語言</string>\n  <string name=\"language_system_default\">系統預設</string>\n  <string name=\"search_languages\">搜尋語言…</string>\n  <string name=\"safeguards\">安全措施</string>\n  <string name=\"patch_compat_check\">停用版本相容性檢查</string>\n  <string name=\"patch_compat_check_description\">不將修補程式限制在相容的應用程式版本</string>\n  <string name=\"patch_compat_check_confirmation\">選取不相容的修補程式可能導致應用程式損壞。\n\n仍要繼續嗎？</string>\n  <string name=\"suggested_version_safeguard\">要求建議的應用程式版本</string>\n  <string name=\"suggested_version_safeguard_description\">強制選取建議的應用程式版本</string>\n  <string name=\"suggested_version_safeguard_confirmation\">選取非建議版本的應用程式可能導致非預期的問題。\n\n仍要繼續嗎？</string>\n  <string name=\"patch_selection_safeguard\">允許變更修補程式選取和選項</string>\n  <string name=\"patch_selection_safeguard_description\">不阻擋選取或取消選取修補程式及自訂選項</string>\n  <string name=\"patch_selection_safeguard_confirmation\">變更修補程式選取可能導致非預期的問題。\n\n仍要啟用嗎？</string>\n  <string name=\"universal_patches_safeguard\">允許使用通用修補程式</string>\n  <string name=\"universal_patches_safeguard_description\">不阻擋使用通用修補程式</string>\n  <string name=\"universal_patches_safeguard_confirmation\">通用修補程式不如針對特定應用程式的修補程式經過充分測試。\n\n仍要啟用嗎？</string>\n  <string name=\"keystore\">金鑰儲存區</string>\n  <string name=\"patches_selections\">修補選取項目</string>\n  <string name=\"import_keystore\">匯入金鑰儲存庫</string>\n  <string name=\"import_keystore_description\">匯入自訂金鑰儲存庫</string>\n  <string name=\"import_keystore_dialog_title\">輸入金鑰儲存庫憑證</string>\n  <string name=\"import_keystore_dialog_description\">您需要輸入金鑰儲存庫的憑證才能匯入。</string>\n  <string name=\"import_keystore_dialog_alias_field\">使用者名稱（別名）</string>\n  <string name=\"import_keystore_dialog_password_field\">密碼</string>\n  <string name=\"import_keystore_dialog_button\">匯入</string>\n  <string name=\"import_keystore_wrong_credentials\">金鑰儲存庫憑證錯誤</string>\n  <string name=\"import_keystore_success\">已匯入金鑰儲存庫</string>\n  <string name=\"export_keystore\">匯出金鑰儲存庫</string>\n  <string name=\"export_keystore_description\">匯出目前的金鑰儲存庫</string>\n  <string name=\"export_keystore_unavailable\">無可匯出的金鑰儲存庫</string>\n  <string name=\"export_keystore_success\">已匯出金鑰儲存庫</string>\n  <string name=\"regenerate_keystore\">重新產生金鑰儲存庫</string>\n  <string name=\"regenerate_keystore_description\">產生新的金鑰儲存庫</string>\n  <string name=\"regenerate_keystore_dialog_description\">您即將重新產生管理員將在修補程序期間使用的金鑰儲存庫。\n\n您將無法從此來源更新先前安裝的應用程式。</string>\n  <string name=\"regenerate_keystore_success\">金鑰儲存庫已成功替換</string>\n  <string name=\"import_patch_selection\">匯入修補程式選取</string>\n  <string name=\"import_patch_selection_description\">從 JSON 檔案匯入修補程式選取</string>\n  <string name=\"import_patch_selection_fail\">無法匯入修補程式選取：%s</string>\n  <string name=\"import_patch_selection_success\">已匯入修補程式選取</string>\n  <string name=\"select_bundle_for_import\">選取要匯入的捆綁包</string>\n  <string name=\"export_patch_selection\">匯出修補程式選取</string>\n  <string name=\"export_patch_selection_description\">將修補程式選取匯出到 JSON 檔案</string>\n  <string name=\"export_patch_selection_fail\">無法匯出修補程式選取：%s</string>\n  <string name=\"export_patch_selection_success\">已匯出修補程式選取</string>\n  <string name=\"select_bundle_for_export\">選取要匯出的捆綁包</string>\n  <string name=\"patch_selection_packages\">已儲存選取項目的應用程式</string>\n  <string name=\"patch_selection_entries\">總共選取的修補</string>\n  <string name=\"reset_configuration\">重設設定</string>\n  <string name=\"reset_patch_selection\">修補選取項目</string>\n  <string name=\"reset_patch_selection_description\">重設儲存的修補程式選取</string>\n  <string name=\"reset_patch_options\">修補選項</string>\n  <string name=\"reset_patch_options_description\">重設儲存的修補程式選項</string>\n  <string name=\"reset_patch_selection_success\">修補程式選取已重設</string>\n  <string name=\"patch_selection_reset_all\">全域重設修補程式選取</string>\n  <string name=\"patch_selection_reset_all_dialog_description\">您即將重設所有修補程式選取。您將需要再次手動選取每個修補程式。</string>\n  <string name=\"patch_selection_reset_all_description\">重設所有修補程式選取</string>\n  <string name=\"patch_selection_reset_package\">重設應用程式的修補程式選取</string>\n  <string name=\"patch_selection_reset_package_dialog_description\">您即將重設應用程式 \\\"%s\\\" 的修補程式選取。您將需要再次手動選取每個修補程式。</string>\n  <string name=\"patch_selection_reset_package_description\">重設單一應用程式的修補程式選擇</string>\n  <string name=\"patch_selection_reset_patches\">重設修補程式選擇（單一）</string>\n  <string name=\"patch_selection_reset_patches_dialog_description\">您即將重設「%s」的修補程式選擇。您將必須再次手動選擇每個修補程式。</string>\n  <string name=\"patch_selection_reset_patches_description\">重設特定修補程式集合的修補程式選擇</string>\n  <string name=\"patch_options_reset_package\">重設應用程式的修補程式選項</string>\n  <string name=\"patch_options_reset_package_dialog_description\">您即將重設應用程式「%s」的修補程式選項。您將必須再次重新套用每個選項。</string>\n  <string name=\"patch_options_reset_package_description\">重設單一應用程式的修補程式選項</string>\n  <string name=\"patch_options_reset_patches\">重設修補程式選項（單一）</string>\n  <string name=\"patch_options_reset_patches_dialog_description\">您即將重設「%s」的修補程式選項。您將必須再次重新套用每個選項。</string>\n  <string name=\"patch_options_reset_patches_description\">重設特定修補程式集合的修補程式選項</string>\n  <string name=\"patch_options_reset_all\">全域重設修補程式選項</string>\n  <string name=\"patch_options_reset_all_dialog_description\">您即將重設所有修補程式選項。您將必須再次重新套用每個選項。</string>\n  <string name=\"patch_options_reset_all_description\">重設所有修補程式選項</string>\n  <string name=\"downloaders\">下載器</string>\n  <string name=\"downloader_prereleases\">使用預先發布版</string>\n  <string name=\"downloader_prereleases_description\">使用主要下載器的預先發布版</string>\n  <string name=\"downloader_state_loaded\">已載入</string>\n  <string name=\"downloader_state_failed\">載入失敗。按一下以取得更多詳細資料</string>\n  <string name=\"downloader_state_missing\">遺失</string>\n  <string name=\"downloader_delete_apps_title\">刪除所選應用程式</string>\n  <string name=\"downloader_delete_apps_description\">確定要刪除所選的應用程式嗎？</string>\n  <string name=\"downloader_delete_single_description\">您確定要刪除「%s」嗎？</string>\n  <string name=\"downloader_settings_no_apps\">找不到已下載的應用程式。</string>\n  <string name=\"downloader_settings_no_apps_description\">透過 ReVanced Manager 下載的應用程式將會顯示在這裡。</string>\n  <string name=\"downloader_url\">下載器網址</string>\n  <string name=\"downloader_add\">新增下載器</string>\n  <string name=\"select_downloader_type_dialog_description\">從網址或本機檔案新增下載器</string>\n  <string name=\"local_downloaders_description\">從本機儲存空間新增下載器。</string>\n  <string name=\"remote_downloaders_description\">從網址新增下載器。可自動更新。</string>\n  <string name=\"install_revanced_downloaders\">安裝下載器以直接在 ReVanced Manager 內取得應用程式。</string>\n  <string name=\"install_revanced_downloader\">安裝 ReVanced 下載器</string>\n  <string name=\"cancel_downloader_install_title\">取消下載器安裝？</string>\n  <string name=\"cancel_downloader_install_description\">下載器安裝正在進行中。如果您現在離開，下載將會取消。</string>\n  <string name=\"downloader_sources_unavailable_title\">這些下載器遺失了</string>\n  <string name=\"downloader_sources_unavailable_description\">按一下更新按鈕以修正。</string>\n  <string name=\"downloader_update_failed\">更新下載器失敗：%s</string>\n  <string name=\"downloader_replace_fail\">匯入下載器失敗：%s</string>\n  <string name=\"search_apps\">搜尋應用程式…</string>\n  <string name=\"loading_body\">載入中…</string>\n  <string name=\"downloading_patches\">正在下載修補程式…</string>\n  <string name=\"options\">選項</string>\n  <string name=\"ok\">確定</string>\n  <string name=\"yes\">是</string>\n  <string name=\"no\">否</string>\n  <string name=\"edit\">編輯</string>\n  <string name=\"dialog_input_placeholder\">值</string>\n  <string name=\"reset\">重設</string>\n  <string name=\"share\">分享</string>\n  <string name=\"patch\">修補</string>\n  <string name=\"select_from_storage\">從儲存空間選取</string>\n  <string name=\"select_from_storage_description\">使用檔案選擇器從儲存空間選取一個 APK 檔案</string>\n  <string name=\"suggested_version_info\">建議版本：%s</string>\n  <string name=\"type_anything\">輸入任何內容以繼續</string>\n  <string name=\"search\">搜尋修補程式…</string>\n  <string name=\"apply\">套用</string>\n  <string name=\"help\">說明</string>\n  <string name=\"back\">返回</string>\n  <string name=\"warning\">警告</string>\n  <string name=\"add\">新增</string>\n  <string name=\"enable\">啟用</string>\n  <string name=\"disable\">停用</string>\n  <string name=\"close\">關閉</string>\n  <string name=\"clear\">清除</string>\n  <string name=\"system\">系統</string>\n  <string name=\"light\">淺色</string>\n  <string name=\"dark\">深色</string>\n  <string name=\"appearance\">外觀</string>\n  <string name=\"networking\">網路</string>\n  <string name=\"allow_metered_networks\">允許計量網路</string>\n  <string name=\"allow_metered_networks_description\">允許在計量網路上自動更新。\n    應用程式仍可能會針對手動操作發出計量網路的警告。</string>\n  <string name=\"downloaded_apps\">已下載的應用程式</string>\n  <string name=\"process_runtime\">在另一個程序中執行修補程式（實驗性）</string>\n  <string name=\"process_runtime_description\">這更快，並允許修補程式使用更多記憶體</string>\n  <string name=\"process_runtime_memory_limit\">修補程式程序記憶體限制</string>\n  <string name=\"process_runtime_memory_limit_description\">修補程式程序可使用的最大記憶體量</string>\n  <string name=\"debug_logs_export\">匯出偵錯記錄</string>\n  <string name=\"debug_logs_export_read_failed\">讀取記錄失敗（結束代碼 %d）</string>\n  <string name=\"debug_logs_export_failed\">匯出記錄失敗</string>\n  <string name=\"debug_logs_export_success\">已匯出記錄</string>\n  <string name=\"api_url\">API 網址</string>\n  <string name=\"api_url_description\">用於下載必要檔案的 API</string>\n  <string name=\"api_url_dialog_title\">變更 API 網址</string>\n  <string name=\"api_url_dialog_description\">變更 ReVanced Manager 的 API 網址。ReVanced Manager 使用 API 下載修補程式和更新。</string>\n  <string name=\"api_url_dialog_warning\">ReVanced Manager 連線到 API 以下載修補程式和更新。請確保您信任它。</string>\n  <string name=\"api_url_dialog_save\">設定</string>\n  <string name=\"api_url_dialog_reset\">重設 API 網址</string>\n  <string name=\"device\">裝置</string>\n  <string name=\"device_android_version\">Android 版本</string>\n  <string name=\"device_model\">型號</string>\n  <string name=\"device_architectures\">CPU 架構</string>\n  <string name=\"device_memory_limit\">記憶體限制</string>\n  <string name=\"device_memory_limit_format\">%1$d MB（正常）- %2$d MB（大）</string>\n  <string name=\"patches_force_download\">強制下載所有修補程式</string>\n  <string name=\"patches_reset\">重設修補程式</string>\n  <string name=\"reset_onboarding\">重設新手引導</string>\n  <string name=\"reset_onboarding_description\">在下次啟動應用程式時顯示新手引導畫面</string>\n  <string name=\"patching\">修補中</string>\n  <string name=\"signing\">簽署中</string>\n  <string name=\"storage\">儲存空間</string>\n  <string name=\"no_patch_found\">找不到修補程式。請檢查您的修補程式</string>\n  <string name=\"tab_apps\">應用程式</string>\n  <string name=\"tab_patches\">修補程式</string>\n  <string name=\"delete\">刪除</string>\n  <string name=\"refresh\">重新整理</string>\n  <string name=\"continue_anyways\">無論如何都繼續</string>\n  <string name=\"download_another_version\">下載其他版本</string>\n  <string name=\"download_app\">下載應用程式</string>\n  <string name=\"download_apk\">下載 APK 檔案</string>\n  <string name=\"patches_download_fail\">下載修補程式失敗：%s</string>\n  <string name=\"api_not_working_title\">API 服務目前已停機</string>\n  <string name=\"api_not_working_description\">部分功能可能會受到影響。請檢查您的連線或設定中的 API URL。</string>\n  <string name=\"patches_replace_fail\">匯入修補程式失敗：%s</string>\n  <string name=\"no_patched_apps_found\">找不到已修補的應用程式</string>\n  <string name=\"no_patched_apps_description\">目前沒有任何已知已修補的應用程式。修補您的第一個應用程式來改變這個現狀！</string>\n  <string name=\"patched_apps_section_title\">已修補的應用程式</string>\n  <string name=\"patchable_apps_section_title\">可修補的應用程式</string>\n  <string name=\"no_patches_found\">找不到修補</string>\n  <string name=\"no_patches_description\">您還沒有任何修補。點擊下方按鈕來新增修補！</string>\n  <string name=\"tap_on_patches\">輕觸修補程式以取得更多資訊</string>\n  <string name=\"patches_selected\">已選取 %s</string>\n  <string name=\"incompatible_patches\">不相容的修補程式</string>\n  <string name=\"universal_patches\">通用修補程式</string>\n  <string name=\"patch_selection_reset_toast\">修補程式選擇和選項已重設為建議的預設值</string>\n  <string name=\"patch_options_reset_toast\">修補程式選項已重設</string>\n  <string name=\"non_suggested_version_warning_title\">非建議版本</string>\n  <string name=\"non_suggested_version_warning_description\">您選擇的應用程式版本與建議版本不符。\n請使用建議版本：%s\n\n若要無論如何都繼續，請在進階設定中停用「要求建議的應用程式版本」。</string>\n  <string name=\"selection_warning_title\">停止使用預設值？</string>\n  <string name=\"selection_warning_description\">建議使用預設的修補程式選擇和選項。更改它們可能會導致意外問題。\n\n在切換修補程式之前，您需要在進階設定中開啟「允許變更修補程式選擇和選項」。</string>\n  <string name=\"universal_patch_warning_description\">通用修補程式具有更廣泛的用途，但不如針對特定應用程式的修補程式可靠。使用它們時可能會遇到問題。\n\n在您使用通用修補程式之前，需要開啟進階設定中的「允許使用通用修補程式」。</string>\n  <string name=\"this_version\">此版本</string>\n  <string name=\"universal\">任何應用程式</string>\n  <string name=\"search_patches\">搜尋修補程式</string>\n  <string name=\"app_version_not_compatible\">此修補程式與選取的應用程式版本 (%1$s) 不相容。\n\n它僅與以下版本相容：%2$s</string>\n  <string name=\"continue_with_version\">繼續使用此版本？</string>\n  <string name=\"version_not_compatible\">並非所有修補程式都與此版本 (%s) 相容。您仍然要繼續嗎？</string>\n  <string name=\"download_application\">下載應用程式？</string>\n  <string name=\"app_not_installed\">您選擇的應用程式未安裝。您要下載它嗎？</string>\n  <string name=\"failed_to_load_apk\">載入 APK 失敗</string>\n  <string name=\"split_apk_not_supported\">分割的 APK 無法修補</string>\n  <string name=\"loading\">載入中…</string>\n  <string name=\"not_installed\">未安裝</string>\n  <string name=\"installed\">已安裝</string>\n  <string name=\"app_info\">應用程式資訊</string>\n  <string name=\"uninstall\">解除安裝</string>\n  <string name=\"unpatch\">解除修補</string>\n  <string name=\"repatch\">重新修補</string>\n  <string name=\"install_type\">安裝類型</string>\n  <string name=\"package_name\">套件名稱</string>\n  <string name=\"original_package_name\">原始套件名稱</string>\n  <string name=\"applied_patches\">已套用的修補程式</string>\n  <string name=\"view_applied_patches\">檢視已套用的修補程式</string>\n  <string name=\"default_install\">預設</string>\n  <string name=\"mount_install\">掛載</string>\n  <string name=\"mounted\">已掛載</string>\n  <string name=\"not_mounted\">未掛載</string>\n  <string name=\"mount\">掛載</string>\n  <string name=\"unmount\">卸載</string>\n  <string name=\"failed_to_mount\">掛載失敗：%s</string>\n  <string name=\"failed_to_unmount\">卸載失敗：%s</string>\n  <string name=\"unpatch_app\">解除應用程式修補？</string>\n  <string name=\"unpatch_description\">確定要解除此應用程式修補嗎？</string>\n  <string name=\"downloader_invalid_version\">下載器未抓取到正確版本</string>\n  <string name=\"downloader_app_not_found\">下載器未找到應用程式</string>\n  <string name=\"downloader_error\">下載器錯誤：%s</string>\n  <string name=\"no_downloaders_installed\">未安裝任何應用程式下載器！</string>\n  <string name=\"no_downloaders_trusted\">沒有任何應用程式下載器被信任！請檢查您的設定。</string>\n  <string name=\"already_patched\">已修補</string>\n  <string name=\"patch_selector_sheet_filter_title\">篩選</string>\n  <string name=\"patch_selector_sheet_filter_compat_title\">相容性</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">套件</string>\n  <string name=\"patch_selector_sheet_actions_title\">行動</string>\n  <string name=\"restore_default_selection\">還原預設選取</string>\n  <string name=\"deselect_all\">取消全選</string>\n  <string name=\"invert_selection\">反向選取</string>\n  <string name=\"deselect_all_except\">取消選擇除 %s 之外的所有項目</string>\n  <string name=\"scope_dialog_title\">套用至</string>\n  <string name=\"scope_all_patches\">所有補丁</string>\n  <string name=\"scope_bundle_patches\">僅限 %s</string>\n  <string name=\"string_option_menu_description\">更多選項</string>\n  <string name=\"option_preset_custom_value\">自訂值</string>\n  <string name=\"path_selector\">從儲存空間選取</string>\n  <string name=\"path_selector_parent_dir\">上一個目錄</string>\n  <string name=\"path_selector_dirs\">目錄</string>\n  <string name=\"path_selector_files\">檔案</string>\n  <string name=\"show_password_field\">顯示密碼</string>\n  <string name=\"hide_password_field\">隱藏密碼</string>\n  <string name=\"installer\">安裝程式</string>\n  <string name=\"install_app\">安裝</string>\n  <string name=\"install_app_success\">應用程式已安裝</string>\n  <string name=\"install_app_fail\">安裝應用程式失敗：%s</string>\n  <string name=\"reinstall_app_fail\">重新安裝應用程式失敗：%s</string>\n  <string name=\"uninstall_app_fail\">解除安裝應用程式失敗：%s</string>\n  <string name=\"open_app\">開啟</string>\n  <string name=\"save_apk\">儲存 APK</string>\n  <string name=\"save_apk_success\">APK 已儲存</string>\n  <string name=\"sign_fail\">簽署 APK 失敗：%s</string>\n  <string name=\"save_logs\">儲存記錄</string>\n  <string name=\"save_as_file\">儲存到檔案</string>\n  <string name=\"export_patcher_logs\">匯出修補程式記錄</string>\n  <string name=\"save_logs_success\">記錄已儲存</string>\n  <string name=\"downloader_activity_dialog_body\">需要使用者互動才能繼續使用此下載器。</string>\n  <string name=\"select_install_type\">選取安裝類型</string>\n  <string name=\"patcher_step_group_preparing\">準備中</string>\n  <string name=\"patcher_step_load_patches\">載入修補程式</string>\n  <string name=\"patcher_step_unpack\">準備修補程式</string>\n  <string name=\"patcher_step_group_patching\">修補中</string>\n  <string name=\"patcher_step_group_saving\">儲存中</string>\n  <string name=\"patcher_step_write_patched\">寫入已修補的 APK 檔案</string>\n  <string name=\"patcher_step_sign_apk\">簽署已修補的 APK 檔案</string>\n  <string name=\"patcher_notification_title\">修補進度…</string>\n  <string name=\"patcher_notification_text\">輕觸以返回修補程式</string>\n  <string name=\"patcher_stop_confirm_title\">停止修補程式</string>\n  <string name=\"patcher_stop_confirm_description\">確定要停止修補程序嗎？</string>\n  <string name=\"patcher_install_in_progress\">正在安裝。請稍候</string>\n  <string name=\"execute_patches\">執行修補程式</string>\n  <string name=\"executing_patch\">執行 %s</string>\n  <string name=\"failed_to_execute_patch\">執行 %s 失敗</string>\n  <string name=\"step_completed\">已完成</string>\n  <string name=\"step_failed\">失敗</string>\n  <string name=\"step_running\">執行中</string>\n  <string name=\"step_waiting\">等待中</string>\n  <string name=\"expand_content\">展開</string>\n  <string name=\"collapse_content\">收合</string>\n  <string name=\"drag_handle\">重新排序</string>\n  <string name=\"more\">更多</string>\n  <string name=\"less\">較少</string>\n  <string name=\"continue_\">繼續</string>\n  <string name=\"dismiss\">關閉</string>\n  <string name=\"view_announcement\">檢視公告</string>\n  <string name=\"permanent_dismiss\">不再顯示</string>\n  <string name=\"donate\">捐贈</string>\n  <string name=\"website\">網站</string>\n  <string name=\"github\">GitHub</string>\n  <string name=\"contact\">聯絡方式</string>\n  <string name=\"license\">授權</string>\n  <string name=\"source\">來源</string>\n  <string name=\"repository\">儲存庫</string>\n  <string name=\"bundle_information_by_author\">由 %1$s</string>\n  <string name=\"version\">版本</string>\n  <string name=\"version_compatibility_warning\">所選版本可能與所選補丁不相容</string>\n  <string name=\"submit_feedback\">提交問題或回饋</string>\n  <string name=\"submit_feedback_description\">協助我們改進此應用程式</string>\n  <string name=\"developer_options\">開發人員選項</string>\n  <string name=\"developer_options_description\">偵錯問題的選項</string>\n  <string name=\"patches_update_success\">更新成功</string>\n  <string name=\"patches_update_unavailable\">無可用更新</string>\n  <string name=\"view_patches\">檢視修補程式</string>\n  <string name=\"patches_view_any_version\">任何版本</string>\n  <string name=\"patches_view_any_package\">任何套件</string>\n  <string name=\"patches_delete_single_dialog_description\">確定要刪除「%s」嗎？</string>\n  <string name=\"patches_delete_multiple_dialog_description\">確定要刪除選取的修補程式嗎？</string>\n  <string name=\"announcements\">公告</string>\n  <string name=\"archive\">封存</string>\n  <string name=\"about_revanced_manager\">關於 ReVanced Manager</string>\n  <string name=\"revanced_manager_description\">ReVanced Manager 是一個 Android 應用程式，使用 ReVanced Patcher 來修補 Android 應用程式。它允許您下載和使用自訂修補程式修補應用程式，並管理修補過程。</string>\n  <string name=\"developer_options_taps\">剩餘 %d 次輕觸</string>\n  <string name=\"developer_options_enabled\">已啟用開發人員選項</string>\n  <string name=\"developer_options_already_enabled\">開發人員選項已啟用</string>\n  <string name=\"update_available\">有可用更新</string>\n  <string name=\"current_version\">目前版本：%s</string>\n  <string name=\"new_version\">新版本：%s</string>\n  <string name=\"ready_to_install_update\">準備安裝更新</string>\n  <string name=\"update_completed\">更新已安裝</string>\n  <string name=\"install_update_manager_failed\">安裝更新失敗</string>\n  <string name=\"manual_update_check\">檢查更新</string>\n  <string name=\"view_update\">檢視更新</string>\n  <string name=\"manual_update_check_description\">手動檢查更新</string>\n  <string name=\"update_checking_manager\">啟動時檢查更新</string>\n  <string name=\"update_checking_manager_description\">應用程式啟動時檢查 ReVanced Manager 的新版本</string>\n  <string name=\"update_checking_downloader\">啟動時檢查 ReVanced 下載器更新</string>\n  <string name=\"update_checking_downloader_description\">應用程式啟動時檢查已安裝 ReVanced 下載器的更新</string>\n  <string name=\"manager_prereleases\">使用預先發布版</string>\n  <string name=\"manager_prereleases_description\">使用 ReVanced Manager 的預先發布版</string>\n  <string name=\"prereleases_warning\">預發行版本可能不穩定並包含錯誤。您可能會遇到崩潰、資料遺失或其他意外問題。僅在您接受這些風險的情況下啟用此功能。</string>\n  <string name=\"changelog\">檢視變更記錄</string>\n  <string name=\"changelog_loading\">正在載入變更日誌</string>\n  <string name=\"changelog_download_fail\">下載變更日誌失敗：%s</string>\n  <string name=\"changelog_description\">查看此更新中的最新變更</string>\n  <string name=\"battery_optimization_notification\">必須關閉電池最佳化，ReVanced Manager 才能在背景正常運作。按一下這裡關閉最佳化。</string>\n  <string name=\"installing_manager_update\">正在安裝更新…</string>\n  <string name=\"downloading_manager_update\">正在下載更新…</string>\n  <string name=\"download_manager_failed\">下載更新失敗：%s</string>\n  <string name=\"cancel\">取消</string>\n  <string name=\"save\">儲存</string>\n  <string name=\"save_with_count\">儲存 (%1$s)</string>\n  <string name=\"update\">更新</string>\n  <string name=\"empty\">空白</string>\n  <string name=\"installing_message\">出現提示時輕觸<b>更新</b>。\\n更新時 ReVanced Manager 將關閉。</string>\n  <string name=\"no_changelogs_found\">未找到變更日誌</string>\n  <string name=\"just_now\">剛才</string>\n  <string name=\"minutes_ago\">%s 分鐘前</string>\n  <string name=\"hours_ago\">%s 小時前</string>\n  <string name=\"days_ago\">%s 天前</string>\n  <string name=\"invalid_date\">無效日期</string>\n  <string name=\"disable_battery_optimization\">停用電池最佳化</string>\n  <string name=\"input_dialog_value_invalid\">無效值</string>\n  <string name=\"option_required\">此選項為必填</string>\n  <string name=\"required_options_screen\">必填選項</string>\n  <string name=\"failed_to_check_updates\">檢查更新失敗：%s</string>\n  <string name=\"no_update_available\">無可用更新</string>\n  <string name=\"no_announcements_found\">找不到任何公告</string>\n  <string name=\"update_check\">正在檢查更新…</string>\n  <string name=\"dismiss_temporary\">暫時不要</string>\n  <string name=\"update_available_dialog_description\">ReVanced Manager 的新版本 (%s) 已可用。</string>\n  <string name=\"failed_to_download_update\">下載更新失敗：%s</string>\n  <string name=\"download\">下載</string>\n  <string name=\"download_confirmation_metered\">您目前使用計量付費連線，服務供應商可能會收取數據費用。\\n\\n您仍要繼續嗎？</string>\n  <string name=\"download_update_confirmation\">下載更新？</string>\n  <string name=\"no_contributors_found\">未找到貢獻者</string>\n  <string name=\"select\">選取</string>\n  <string name=\"select_deselect_all\">全選或全不選</string>\n  <string name=\"select_patches_type_dialog_description\">從 URL 或本機檔案新增修補程式</string>\n  <string name=\"local_patches_description\">從本機儲存空間新增修補程式。</string>\n  <string name=\"remote_patches_description\">從 URL 新增修補程式。修補程式可以自動更新。</string>\n  <string name=\"recommended\">推薦</string>\n  <string name=\"installation_failed_dialog_title\">安裝失敗</string>\n  <string name=\"installation_cancelled_dialog_title\">安裝已取消</string>\n  <string name=\"installation_blocked_dialog_title\">安裝已封鎖</string>\n  <string name=\"installation_conflict_dialog_title\">安裝衝突</string>\n  <string name=\"installation_incompatible_dialog_title\">安裝不相容</string>\n  <string name=\"installation_invalid_dialog_title\">安裝無效</string>\n  <string name=\"installation_storage_issue_dialog_title\">儲存空間不足</string>\n  <string name=\"installation_timeout_dialog_title\">安裝逾時</string>\n  <string name=\"installation_failed_description\">由於未知原因導致安裝失敗。要再試一次嗎？</string>\n  <string name=\"installation_aborted_description\">安裝已手動取消。要再試一次嗎？</string>\n  <string name=\"installation_blocked_description\">安裝已封鎖。請檢閱您的裝置安全性設定，然後再試一次。</string>\n  <string name=\"installation_conflict_description\">由於應用程式已存在安裝，導致安裝被阻止。要解除安裝已安裝的應用程式並再試一次嗎？</string>\n  <string name=\"installation_incompatible_description\">此應用程式與此裝置不相容。請使用與此裝置相容的 APK，然後再試一次。</string>\n  <string name=\"installation_invalid_description\">此應用程式無效。要解除安裝應用程式並再試一次嗎？</string>\n  <string name=\"installation_storage_issue_description\">由於儲存空間不足，無法安裝應用程式。請釋放一些空間，然後再試一次。</string>\n  <string name=\"installation_timeout_description\">安裝時間過長。要再試一次嗎？</string>\n  <string name=\"reinstall\">重新安裝</string>\n  <string name=\"show\">顯示</string>\n  <string name=\"debugging\">偵錯</string>\n  <string name=\"about_device\">關於裝置</string>\n  <string name=\"enter_url\">輸入 URL</string>\n  <string name=\"next\">下一步</string>\n  <string name=\"auto_update\">自動更新</string>\n  <string name=\"add_patches\">新增修補程式</string>\n  <string name=\"auto_update_description\">當有新版本可用時自動更新</string>\n  <string name=\"patches_prereleases\">使用預先發布版</string>\n  <string name=\"patches_prereleases_description\">使用 %s 的預先發布版</string>\n  <string name=\"patches_url\">修補程式 URL</string>\n  <string name=\"incompatible_patches_dialog\">這些修補程式與所選應用程式版本 (%1$s) 不相容。\\n\\n按一下修補程式以查看更多詳細資訊。</string>\n  <string name=\"incompatible_patch\">不相容的修補程式</string>\n  <string name=\"any_version\">任何</string>\n  <string name=\"never_show_again\">不再顯示</string>\n  <string name=\"show_manager_update_dialog_on_launch\">啟動時顯示更新訊息</string>\n  <string name=\"show_manager_update_dialog_on_launch_description\">啟動時有新更新可用時顯示彈出式通知</string>\n  <string name=\"failed_to_import_keystore\">匯入金鑰儲存庫失敗</string>\n  <string name=\"export\">匯出</string>\n  <string name=\"confirm\">確認</string>\n  <string name=\"new_announcement\">新公告：\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"other\">%d 修補</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"other\">執行 %d 修補</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"other\">已選取 %d 個</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-zu-rZA/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \\n\n    Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.\n\n    Raw strings are required because Crowdin AI translations regularly gets confused and\n    replace \\n with an encoded new line character.\n\n    Bad:\n        <string name=\"summary_key\">First \\'item\\' text\\nSecond \\\"item\\\" text</string>\n    Good:\n        <string name=\"summary_key\">\"First 'item' text\nSecond \\\"item\\\" text\"</string>\n\n-->\n<resources>\n  <string name=\"patcher\">I-Patcher</string>\n  <string name=\"onboarding_welcome_to\">Siyakwamukela ku</string>\n  <string name=\"onboarding_welcome_back\">Sawubona! Kungokusha</string>\n  <string name=\"onboarding_apps_subtitle\">Ungakhetha uhlelo lokusebenza ukuze ulunge njengamanje noma ukwenze kamuva</string>\n  <string name=\"onboarding_updates_subtitle\">Lungiselela izibuyekezo ezizenzekelayo ukuze ugcine i-ReVanced Manager nezilungiso zisesikhathini</string>\n  <string name=\"onboarding_updates_note\">I-ReVanced Manager izoxhuma ku-%s ukuze ilande izinguqulo zokuqala uma idivayisi yakho ixhunywe ku-inthanethi.</string>\n  <string name=\"retry\">Zama futhi</string>\n  <string name=\"onboarding_skip\">Yeqa okwamanje</string>\n  <string name=\"onboarding_recommended_version\">Inguqulo enconyiwe: %s</string>\n  <string name=\"onboarding_permissions_skip_title\">Yeqa izimvume?</string>\n  <string name=\"onboarding_permissions_skip_description\">Ngaphandle kwezimvume ezidingekayo, ezinye izici zingase zingasebenzi kahle. Ungazinikeza kamuva kuzilungiselelo zohlelo lokusebenza.</string>\n  <string name=\"onboarding_permissions_skip_anyway\">Yeqa noma kunjalo</string>\n  <string name=\"onboarding_permissions_subtitle\">I-ReVanced Manager idinga izimvume ezimbalwa ukuze isebenze kahle</string>\n  <string name=\"permission_install_apps\">Faka izinhlelo zokusebenza ezingaziwa</string>\n  <string name=\"permission_install_apps_description\">Kuyadingeka ukufaka izinhlelo zokusebenza ezilungisiwe</string>\n  <string name=\"permission_notifications\">Izaziso</string>\n  <string name=\"permission_battery\">Ukulungiswa kwebhethri</string>\n  <string name=\"permission_battery_description\">Ivikela ukuthi ukulungisa kungaphazamiseki ngemuva</string>\n  <string name=\"permission_grant\">Nikeza</string>\n  <string name=\"downloader_host_permission_label\">ReVanced Manager umphathi wokulanda</string>\n  <string name=\"downloader_host_permission_description\">Isetshenziselwa ukulawula ukufinyelela kuma-downloader we-ReVanced Manager. I-ReVanced Manager kuphela enakho lokhu.</string>\n  <string name=\"fab_patch_app\">Pheqa uhlelo lokusebenza</string>\n  <string name=\"fab_add_patches\">Engeza izipeqe</string>\n  <string name=\"new_downloader_notification\">Izilandi ezintsha ziyatholakala. Chofoza lapha ukuze uzilungiselele.</string>\n  <string name=\"patches_not_downloaded\">Izicelo azikalandiwe.</string>\n  <string name=\"app_source_dialog_option_auto_description\">Sebenzisa uhlelo lokusebenza olufakiwe, bese i-APK elandiwe, bese abalanda abakhona</string>\n  <string name=\"app_source_dialog_option_auto_unavailable\">Ayikho i-app ehambisanayo noma izilandi ezitholakalayo</string>\n  <string name=\"app_source_dialog_option_installed_no_root\">Izinhlelo zokusebenza ezifakiwe azikwazi ukufakwa isichibiyelo futhi ngaphandle kokufinyelela okungumqondo</string>\n  <string name=\"patch_selector_item\">Khetha izipeqe</string>\n  <string name=\"patch_selector_item_description\">Izikeqe ezinga-%d zikhethiwe</string>\n  <string name=\"patch_selection_changed_warning\">Ukukhethwa kwezicelo kushintshiwe.</string>\n  <string name=\"apk_source_selector_item\">Khetha umthombo we-APK</string>\n  <string name=\"apk_source_auto\">Okuzenzakalelayo</string>\n  <string name=\"apk_source_auto_installed\">Okuzenzakalelayo · Kusebenzisa i-APK efakiwe</string>\n  <string name=\"apk_source_auto_downloaded\">Okuzenzakalelayo · Kusebenzisa i-APK elandiwe</string>\n  <string name=\"apk_source_auto_downloader\">Okuzenzakalelayo · Kusebenzisa abalanda okutholakalayo</string>\n  <string name=\"apk_source_auto_storage\">Okuzenzakalelayo · Khetha kusuka endaweni yokugcina</string>\n  <string name=\"apk_source_downloaded\">Eselandiwe</string>\n  <string name=\"auto_updates_dialog_description\">Ingabe ufuna i-ReVanced Manager ihlole njalo izibuyekezo zezakhi ezilandelayo?</string>\n  <string name=\"auto_updates_dialog_manager\">ReVanced Manager</string>\n  <string name=\"auto_updates_dialog_patches\">Izipeqe ze-ReVanced</string>\n  <string name=\"auto_updates_dialog_downloaders\">ReVanced Manager: Abalandi</string>\n  <string name=\"auto_updates_dialog_note\">Lezi zilungiselelo zingashintshwa kamuva.\n\n    I-ReVanced Manager izoxhuma ku-%s ukuze ilande izinguqulo zokuqala uma idivayisi yakho ixhunywe ku-inthanethi.</string>\n  <string name=\"announcements_filter_tag\">Hlunga ngethegi</string>\n  <string name=\"announcements_show_archived\">Bonisa okufakwe kungobo yomlando</string>\n  <string name=\"updates_description\">Hlola izibuyekezo futhi ubuke i-changelog</string>\n  <string name=\"downloads_description\">Izilandi kanye nezinhlelo zokusebenza ezilandwe</string>\n  <string name=\"safeguards_toggled_warning\">Izivikelo zivuliwe/zivaliwe.</string>\n  <string name=\"about_app_name\">Mayelana no-%1$s</string>\n  <string name=\"search_languages\">Sesha izilimi…</string>\n  <string name=\"keystore\">Isitolo sokhiye</string>\n  <string name=\"patches_selections\">Ukukhetha izipeqe</string>\n  <string name=\"select_bundle_for_import\">Khetha isixuku sokungenisa kuso</string>\n  <string name=\"select_bundle_for_export\">Khetha isixuku sokuthekelisa kuso</string>\n  <string name=\"patch_selection_packages\">Izinhlelo zokusebenza ezinezinketho ezilondoloziwe</string>\n  <string name=\"patch_selection_entries\">Ingqikithi yezipheqe ezikhethiwe</string>\n  <string name=\"reset_configuration\">Setha kabusha ukulungiselelwa</string>\n  <string name=\"reset_patch_selection\">Ukukhetha izipeqe</string>\n  <string name=\"reset_patch_options\">Izinketho zokupeqa</string>\n  <string name=\"downloaders\">Izilandi</string>\n  <string name=\"downloader_prereleases\">Sebenzisa izinguqulo zangaphambi kokukhishwa</string>\n  <string name=\"downloader_prereleases_description\">Sebenzisa izinguqulo zangaphambi kokukhishwa zomlandi oyinhloko</string>\n  <string name=\"downloader_state_loaded\">Layishiwe</string>\n  <string name=\"downloader_state_failed\">Kwehlulekile ukulayisha. Chofoza ukuze uthole imininingwane eyengeziwe</string>\n  <string name=\"downloader_state_missing\">Lushodayo</string>\n  <string name=\"downloader_delete_apps_title\">Susa izinhlelo zokusebenza ezikhethiwe</string>\n  <string name=\"downloader_delete_apps_description\">Uqinisekile ufuna ukususa izinhlelo zokusebenza ezikhethiwe?</string>\n  <string name=\"downloader_delete_single_description\">Uqinisekile ufuna ukususa \\\"%s\\\"?</string>\n  <string name=\"downloader_settings_no_apps_description\">Izinhlelo zokusebenza ezilandwe nge-ReVanced Manager zizovela lapha.</string>\n  <string name=\"downloader_url\">Isixhumanisi Sesilandi</string>\n  <string name=\"downloader_add\">Engeza Isilandi</string>\n  <string name=\"select_downloader_type_dialog_description\">Engeza izilandi ezintsha kusuka ku-URL noma kumafayela endawo</string>\n  <string name=\"local_downloaders_description\">Engeza izilandi kusuka kusitoreji sendawo.</string>\n  <string name=\"remote_downloaders_description\">Engeza izilandi kusuka ku-URL. Zingabuyekezwa ngokuzenzakalelayo.</string>\n  <string name=\"install_revanced_downloaders\">Faka izilandi ukuze uthole izinhlelo zokusebenza ngokuqondile ngaphakathi kwe-ReVanced Manager.</string>\n  <string name=\"install_revanced_downloader\">Faka izilandi ze-ReVanced</string>\n  <string name=\"cancel_downloader_install_title\">Khansela ukufakwa kwezilandi?</string>\n  <string name=\"cancel_downloader_install_description\">Ukufakwa kwezilandi kuyaqhubeka. Uma uhamba manje, ukulanda kuzokhanselwa.</string>\n  <string name=\"downloader_sources_unavailable_title\">Lezi zilandi azikho</string>\n  <string name=\"downloader_sources_unavailable_description\">Chofoza inkinobho yokubuyekeza ukuze ukulungise.</string>\n  <string name=\"downloader_update_failed\">Yehlulekile ukubuyekeza isilandi: %s</string>\n  <string name=\"downloader_replace_fail\">Yehlulekile ukungenisa isilandi: %s</string>\n  <string name=\"select_from_storage_description\">Khetha ifayela le-APK kusitoreji usebenzisa isikhethi sefayela</string>\n  <string name=\"enable\">Nika amandla</string>\n  <string name=\"disable\">Khubaza</string>\n  <string name=\"process_runtime_memory_limit_description\">Inani eliphezulu lemomori inqubo yokupeqa engayisebenzisa</string>\n  <string name=\"reset_onboarding\">Setha kabusha ukungenisa</string>\n  <string name=\"reset_onboarding_description\">Bonisa isikrini sokungenisa ekuqalisweni kohlelo lokusebenza olulandelayo</string>\n  <string name=\"api_not_working_title\">Isevisi ye-API yehliwe okwamanje</string>\n  <string name=\"api_not_working_description\">Ezinye izici zingase zithinteke. Hlola uxhumano lwakho noma i-URL ye-API kuzilungiselelo.</string>\n  <string name=\"no_patched_apps_found\">Azikho izinhlelo zokusebenza eziphetshiwe ezitholakele</string>\n  <string name=\"no_patched_apps_description\">Okwamanje awunazo izinhlelo zokusebenza ezilungisiwe esizaziyo. Shintsha lokho ngokulungisa uhlelo lwakho lokuqala!</string>\n  <string name=\"patched_apps_section_title\">Izinhlelo zokusebenza ezilungisiwe</string>\n  <string name=\"patchable_apps_section_title\">Izinhlelo zokusebenza ezingalungiswa</string>\n  <string name=\"no_patches_found\">Azikho izipeqe ezitholakele</string>\n  <string name=\"no_patches_description\">Awunazo izipeqe okwamanje. Engeza izipeqe ngokuthepha inkinobho engezansi!</string>\n  <string name=\"split_apk_not_supported\">Ama-APK ahlukanisiwe awakwazi ukulungiswa</string>\n  <string name=\"no_downloaders_installed\">Azikho izilandi zohlelo lokusebenza ezifakiwe!</string>\n  <string name=\"no_downloaders_trusted\">Azikho izilandi zohlelo lokusebenza ezithenjiwe! Sicela uhlole izilungiselelo zakho.</string>\n  <string name=\"patch_selector_sheet_filter_packages_title\">Amaphakheji</string>\n  <string name=\"patch_selector_sheet_actions_title\">Izenzo</string>\n  <string name=\"restore_default_selection\">Buyisela okukhethiwe okuzenzakalelayo</string>\n  <string name=\"deselect_all\">Susa konke ukukhetha</string>\n  <string name=\"invert_selection\">Guqula ukukhetha</string>\n  <string name=\"deselect_all_except\">Susa ukukhetha konke ngaphandle kwe-%s</string>\n  <string name=\"scope_dialog_title\">Sebenzisa ku</string>\n  <string name=\"scope_all_patches\">Zonke iziqephu</string>\n  <string name=\"scope_bundle_patches\">%s kuphela</string>\n  <string name=\"save_as_file\">Londoloza kumafayela</string>\n  <string name=\"export_patcher_logs\">Thekelisa izingodo zokupeqa</string>\n  <string name=\"save_logs_success\">Izingodo zilondoloziwe</string>\n  <string name=\"downloader_activity_dialog_body\">Kudingeka ukusebenzisana komsebenzisi ukuze kuqhubeke ngalesi silandi.</string>\n  <string name=\"patcher_step_unpack\">Lungiselela isilungisi</string>\n  <string name=\"view_announcement\">Buka isimemezelo</string>\n  <string name=\"license\">Ilayisensi</string>\n  <string name=\"source\">Umthombo</string>\n  <string name=\"repository\">Indawo yokugcina</string>\n  <string name=\"bundle_information_by_author\">Ngu-%1$s</string>\n  <string name=\"version_compatibility_warning\">Inguqulo ekhethiwe ingase ingahambelani nezichibiyelo ezikhethiwe</string>\n  <string name=\"announcements\">Izimemezelo</string>\n  <string name=\"archive\">Ingobo yomlando</string>\n  <string name=\"view_update\">Buka isibuyekezo</string>\n  <string name=\"update_checking_downloader\">Hlola izibuyekezo ze-ReVanced Downloaders ekuqalisweni</string>\n  <string name=\"update_checking_downloader_description\">Hlola izibuyekezo zezilandi ze-ReVanced ezifakiwe lapho uhlelo lokusebenza luqala</string>\n  <string name=\"prereleases_warning\">Izingqikithi zangaphambi kokukhishwa zingase zingazinzi futhi ziqukethe iziphazamiso. Ungase uhlangabezane nokuphahlazeka, ukulahlekelwa idatha, noma ezinye izinkinga ezingalindelekile. Vumela lokhu kuphela uma ukhululekile ngalezi zingozi.</string>\n  <string name=\"changelog\">Buka i-changelog</string>\n  <string name=\"no_announcements_found\">Azikho izimemezelo ezitholakele</string>\n  <string name=\"new_announcement\">Isimemezelo esisha:\\n%s</string>\n  <plurals name=\"patch_count\">\n    <item quantity=\"one\">isilapha esingu-%d</item>\n    <item quantity=\"other\">izilapha ezingu-%d</item>\n  </plurals>\n  <plurals name=\"patches_executed\">\n    <item quantity=\"one\">Yenza isilapha esingu-%d</item>\n    <item quantity=\"other\">Yenza izilapha ezingu-%d</item>\n  </plurals>\n  <plurals name=\"selected_count\">\n    <item quantity=\"one\">Kukhethiwe okungu-%d</item>\n    <item quantity=\"other\">Kukhethiwe okungu-%d</item>\n  </plurals>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/xml/backup_rules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n   Sample backup rules file; uncomment and customize as necessary.\n   See https://developer.android.com/guide/topics/data/autobackup\n   for details.\n   Note: This file is ignored for devices older that API 31\n   See https://developer.android.com/about/versions/12/backup-restore\n-->\n<full-backup-content>\n    <!--\n   <include domain=\"sharedpref\" path=\".\"/>\n   <exclude domain=\"sharedpref\" path=\"device.xml\"/>\n-->\n</full-backup-content>"
  },
  {
    "path": "app/src/main/res/xml/data_extraction_rules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n   Sample data extraction rules file; uncomment and customize as necessary.\n   See https://developer.android.com/about/versions/12/backup-restore#xml-changes\n   for details.\n-->\n<data-extraction-rules>\n    <cloud-backup>\n        <!-- TODO: Use <include> and <exclude> to control what is backed up.\n        <include .../>\n        <exclude .../>\n        -->\n    </cloud-backup>\n    <!--\n    <device-transfer>\n        <include .../>\n        <exclude .../>\n    </device-transfer>\n    -->\n</data-extraction-rules>"
  },
  {
    "path": "app/src/main/res/xml/file_provider_paths.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<paths>\n    <files-path\n        name=\"ui_ephemeral\"\n        path=\"ui_ephemeral/\" />\n</paths>"
  },
  {
    "path": "build.gradle.kts",
    "content": "plugins {\n    alias(libs.plugins.android.application) apply false\n    alias(libs.plugins.android.library) apply false\n    alias(libs.plugins.devtools) apply false\n    alias(libs.plugins.kotlin.android) apply false\n    alias(libs.plugins.kotlin.serialization) apply false\n    alias(libs.plugins.kotlin.parcelize) apply false\n    alias(libs.plugins.about.libraries) apply false\n    alias(libs.plugins.about.libraries.android) apply false\n    alias(libs.plugins.compose.compiler) apply false\n}\n"
  },
  {
    "path": "crowdin.yml",
    "content": "project_id_env: \"CROWDIN_PROJECT_ID\"\napi_token_env: \"CROWDIN_PERSONAL_TOKEN\"\n\npreserve_hierarchy: true\nfiles:\n    - source: app/src/main/res/values/strings.xml\n      dest: manager.xml\n      translation: app/src/main/res/values-%android_code%/strings.xml\n      skip_untranslated_strings: true\n"
  },
  {
    "path": "docs/0_prerequisites.md",
    "content": "# 💼 Prerequisites\n\nIn order to use ReVanced Manager, certain requirements must be met.\n\n## 🤝 Requirements\n\n- An Android device running Android Oreo (8.0) or higher\n\n## ⏭️ What's next\n\nThe next page will guide you through the installation of ReVanced Manager.\n\nContinue: [⬇️ Installation](1_installation.md)\n"
  },
  {
    "path": "docs/1_installation.md",
    "content": "# ⬇️ Installation\n\nIn order to use ReVanced on your Android device, ReVanced Manager must be installed.\n\n## ✅ Installation steps\n\n1. Download the latest version of ReVanced Manager at [revanced.app/download](https://revanced.app/download) or from [GitHub releases](https://github.com/ReVanced/revanced-manager/releases/latest)\n2. Install ReVanced Manager\n\n## ⏭️ What's next\n\nThe next page will guide you through using ReVanced Manager.\n\nContinue: [🛠️ Usage](2_usage.md)\n"
  },
  {
    "path": "docs/2_1_patching.md",
    "content": "# 💉 Patching apps\n\nLearn how to use ReVanced Manager to patch apps.\n\n## ✅ Steps to patch apps\n\n1. Navigate to the `Apps` tab at the top navigation bar\n2. Select an app to patch or tap select from storage[^1]\n3. Optionally change the selection of patches[^1][^2]\n4. Optionally select a specific downloader to download the app[^3]\n5. Tap on the `Patch` button to begin the patching process\n6. Follow the instructions on the screen if prompted\n7. Tap on the `Install` button to install the patched app or export it with 💾 save button in bottom left corner\n\n[^1]: This option is protected by safeguard\n[^2]: It is recommended to use the default set of patches by tapping on the `Reset` button in the bottom right corner.\n[^3]: By default, all available downloaders will be used to download the app.\nIf you want to use a specific downloader, you can change it here.\n\n## ⏭️ What's next\n\nThe next page will explain how to view, open, re-patch or uninstall apps.\n\nContinue: [🧰 Managing apps](2_2_managing_apps.md)\n"
  },
  {
    "path": "docs/2_2_managing_apps.md",
    "content": "# 🧰 Managing apps\n\nLearn how to view, open, re-patch or uninstall apps.\n\n## ✅ Steps to manage patched apps\n\n1. Navigate to the `Apps` tab at the top navigation bar\n2. Select the app you want to view, open, re-patch or uninstall\n\n## ⏭️ What's next\n\nThe next page will explain how to add new, manage existing or remove patches.\n\nContinue: [🧩 Managing patches](2_3_managing_patches.md)\n\n"
  },
  {
    "path": "docs/2_3_managing_patches.md",
    "content": "# 🧩 Managing patches\n\nLearn how to add new, manage existing or remove patches.\n\n## ✅ Steps to manage patches\n\nSelect on one of the patches from the list to manage or remove it.\n\n### Adding patches\n\n1. Navigate to the `Patches` tab at the top navigation bar\n2. Tap on the floating edit ✏️ button in the bottom right corner\n3. The button will transition to add patches button, the floating plus `+` button, tap it\n4. Choose one of the options to add new patches[^1]:\n   - **Enter URL**: Add patches from a remote location\n   - **Select from storage**: Add patches from your local storage\n\n[^1]: The selected file must be a JSON using the [ReVanced API](https://github.com/revanced/revanced-api) format\n(Example: `https://api.revanced.app/v4/patches`).\n\n## ⏭️ What's next\n\nThe next page will explain how to manage downloaders.\n\nContinue: [🔄 Updating ReVanced Manager](2_4_managing_downloaders.md)\n\n"
  },
  {
    "path": "docs/2_4_managing_downloaders.md",
    "content": "# 🧩 Managing downloaders\n\nLearn how to manage downloaders.\nRefer to the [template](https://github.com/ReVanced/revanced-manager-downloader-template) if you are a developer who wants to create a plugin.\n\nDownloaders are APK files and installed, updated and uninstalled just like regular Android apps.\nDownloaders can execute arbitrary code inside ReVanced Manager and must be marked as trusted before use. \nManager will show a notification in the dashboard when a new downloader is discovered.\nTrust can also be granted and revoked under `Settings` > `Downloads`.\n\n## ⏭️ What's next\n\nThe next page will explain how to update ReVanced Manager.\n\nContinue: [🔄 Updating ReVanced Manager](2_5_updating.md)\n\n"
  },
  {
    "path": "docs/2_5_updating.md",
    "content": "# 🔄 Updating ReVanced Manager\n\nLearn how to update ReVanced Manager.\n\n## ✅ Steps to update ReVanced Manager\n\n1. Navigate to the settings by tapping on the settings icon in the top right corner\n2. Navigate to the `Updates` screen\n3. Configure the update settings accordingly[^1]\n\n[^1]: By default, ReVanced Manager will check for updates automatically on launch\nand let you know when an update is available by showing a badge above the icon.\n\n## ⏭️ What's next\n\nThe next page will explain how to configure ReVanced Manager.\n\nContinue: [⚙️ Configuring ReVanced Manager](2_6_settings.md)\n"
  },
  {
    "path": "docs/2_6_settings.md",
    "content": "# ⚙️ Configuring ReVanced Manager\n\nLearn how to configure ReVanced Manager.\n\n## 🔧 Settings\n- **General**: Change app language, adjust the appearances of ReVanced Manager app, or enable or disable metered networks check.\n- **Updates**: Check for ReVanced Manager app update, or use a pre-release version.\n- **Downloads**: Enable or disable ReVanced Manager downloader and manage past downloaded apps here.\n- **Import & export**: Import or export patch selections, patch options and the signing keystore.\n- **Advanced**:\n  - **Disable version compatibility check**: Patching versions of apps the patches are explicitly compatible with is enforced.\n    Disabling this will allow patching versions of apps the patches are not explicitly compatible with\n    >   ⚠️ Warning  \n    >   Patches may fail on app versions they are not explicitly compatible with.\n    >   Unless you know what you are doing, it is recommended to keep this disabled.\n  - **Require suggested app version**: Specific versions of apps is enforced based on the patch selection automatically.\n    Disabling this will allow you to patch any version of apps\n    >   ⚠️ Warning  \n    >   Patches not compatible with the selected version of the app will not be used.\n    >   Unless you know what you are doing, it is recommended to keep this enabled.\n  - **Allow changing patch selection and options**: The default selection of patches is enforced.\n    Enabling this will allow you to change the patch selection\n    >   ⚠️ Warning  \n    >   Changing the selection may cause unexpected issues.\n    >   Unless you know what you are doing, it is recommended to keep this disabled.\n  - **Allow using universal patches**: Patches that do not specify compatibility with an app are forcibly disabled.\n    Enabling this will allow selecting such patches\n    >   ⚠️ Warning  \n    >   Universal patches do not specify compatibility with an app and may not work on all apps regardless.\n    >   Unless you know what you are doing, it is recommended to keep this disabled.\n  - **(Experimental) Run patcher in another process**: Allow patcher to run faster and use more memory than limit.\n  - **Export debug logs**: Export debug logs of _ReVanced Manager_ app.\n- **About**: View more information and links about ReVanced and ReVanced Manager.\n\n## ⏭️ What's next\n\nThe next page will explain how to troubleshoot issues with ReVanced Manager.\n\nContinue: [❓ Troubleshooting](3_troubleshooting.md)\n"
  },
  {
    "path": "docs/2_usage.md",
    "content": "# 🛠️ Usage\n\nThe following pages will guide you through using ReVanced Manager to patch and manage apps, \nmanage patches, and update or configure ReVanced Manager.\n\n## 📖 Table of contents\n\n1. [💉 Patching apps](2_1_patching.md)\n2. [🧰 Managing apps](2_2_managing_apps.md)\n3. [🧩 Managing patches](2_3_managing_patches.md)\n4. [🧩 Managing downloaders](2_4_managing_downloaders.md)\n4. [🔄 Updating ReVanced Manager](2_5_updating.md)\n5. [⚙️ Configuring ReVanced Manager](2_6_settings.md)\n\n## ⏭️ What's next\n\nThe next page will explain how to use ReVanced Manager to patch apps.\n\nContinue: [💉 Patching apps](2_1_patching.md)\n"
  },
  {
    "path": "docs/3_troubleshooting.md",
    "content": "# ❓ Troubleshooting\n\nFind common issues and their solutions below.\n\n## 🆘 Common issues\n\n- **Patching fails with an error or patched app crashes**:\n  - Make sure ReVanced Manager is up to date by following [🔄 Updating ReVanced Manager](2_4_updating.md)  \n  - Reset the safeguard settings under `Settings` > `Advanced` to their default values\n  - If a patch has options, reset them to their default values or correctly configure them\n  - Make sure you are patching a full APK file and not an [APK bundle](https://developer.android.com/guide/app-bundle/app-bundle-format)\n- **Patches fail to load**: The selected file is not using the ReVanced API format or the remote URL is not reachable.\n- **Patching takes too long**: Make sure you are using a device with enough storage space and free memory.\n  Be patient during the patching process.\n- **Patching fail because of Out Of Memory error**: Try enabling [_**(Experimental) Run patcher in another process**_](/docs/2_6_settings.md#-settings).\n\n## ⏭️ What's next\n\nLearn how to build ReVanced Manager from source.\n\nContinue: [🔨 Build from source](4_building.md)\n"
  },
  {
    "path": "docs/4_building.md",
    "content": "# 🛠️ Build from source\n\nThis page will guide you through building ReVanced Manager from source.\n\n1. Install Java Development Kit 17 (e.g. [Temurin JDK](https://adoptium.net/temurin/releases/?os=any&arch=any&version=17))\n\n   Using [WinGet](https://learn.microsoft.com/en-us/windows/package-manager/winget):\n   ``sh\n   winget install EclipseAdoptium.Temurin.17.JDK\n   ``\n   \n   Using [SDKMAN!](https://sdkman.io/):\n   ```sh\n   sdk install java 17.0.18-tem\n   ```\n\n2. Clone the repository\n\n   ```sh\n   git clone https://github.com/revanced/revanced-manager.git && cd revanced-manager\n   ```\n\n3. Build the APK\n\n   ```sh\n   ./gradlew assembleRelease\n   ```\n\n> [!NOTE]\n> If the build fails due to authentication, you may need to authenticate to GitHub Packages.\n> Create a personal access tokens with the scope `read:packages` [here](https://github.com/settings/tokens/new?scopes=read:packages&description=ReVanced) and add your token to ~/.gradle/gradle.properties. Create the file if it does not exist.\n>\n> Example `gradle.properties` file:\n>\n> ```properties\n> githubPackagesUsername = <GitHub username>\n> githubPackagesPassword = <Personal access token>\n> ```\n"
  },
  {
    "path": "docs/README.md",
    "content": "# 💊 ReVanced Manager\n\nThis documentation explains how to use [ReVanced Manager](https://github.com/revanced/revanced-manager).\n\n## 📖 Table of contents\n\n0. [💼 Prerequisites](0_prerequisites.md)\n1. [⬇️ Installation](1_installation.md)\n2. [🛠️ Usage](2_usage.md)\n   1. [💉 Patching apps](2_1_patching.md)\n   2. [🧰 Managing apps](2_2_managing_apps.md)\n   3. [🧩 Managing patches](2_3_managing_patches.md)\n   4. [🧩 Managing downloaders](2_4_managing_downloaders.md)\n   4. [🔄 Updating ReVanced Manager](2_5_updating.md)\n   5. [⚙️ Configuring ReVanced Manager](2_6_settings.md)\n3. [❔ Troubleshooting](3_troubleshooting.md)\n4. [🔨 Building from source](4_building.md)\n\n## ⏭️ Start here\n\nThe next page will tell you about the prerequisites for using ReVanced Manager.\n\nContinue: [💼 Prerequisites](0_prerequisites.md)\n"
  },
  {
    "path": "gradle/libs.versions.toml",
    "content": "[versions]\nktx = \"1.18.0\"\nmaterial3 = \"1.5.0-alpha15\"\nui-tooling = \"1.10.4\"\nviewmodel-lifecycle = \"2.10.0\"\nsplash-screen = \"1.2.0\"\nactivity = \"1.12.4\"\nappcompat = \"1.7.1\"\nfragment = \"1.8.9\"\npreferences-datastore = \"1.2.0\"\nwork-runtime = \"2.11.1\"\ncompose-bom = \"2026.02.01\"\nnavigation = \"2.9.7\"\naccompanist = \"0.37.3\"\nplaceholder = \"1.0.12\"\nreorderable = \"3.0.0\"\nserialization = \"1.10.0\"\ncollection = \"0.4.0\"\ndatetime = \"0.7.1\"\nroom-version = \"2.8.4\"\nrevanced-patcher = \"22.0.2-dev.1\"\nrevanced-library = \"4.0.0\"\nkoin = \"4.1.1\"\nktor = \"3.4.1\"\nmarkdown-renderer = \"0.39.2\"\nfading-edges = \"1.0.4\"\nkotlin = \"2.3.10\"\nandroid-gradle-plugin = \"8.13.2\"\ndev-tools-gradle-plugin = \"2.3.5\"\nabout-libraries = \"13.2.1\"\ncoil = \"2.7.0\"\napp-icon-loader-coil = \"1.5.0\"\nlibsu = \"6.0.0\"\nscrollbars = \"1.0.4\"\nenumutil = \"1.1.1\"\ncompose-icons = \"1.2.4\"\nkotlin-process = \"1.5.1\"\nhidden-api-stub = \"4.4.0\"\nbinary-compatibility-validator = \"0.18.1\"\nsemver-parser = \"3.0.0\"\nackpine = \"0.20.6\"\nfoundation-layout = \"1.10.5\"\n\n[libraries]\n# AndroidX Core\nandroidx-ktx = { group = \"androidx.core\", name = \"core-ktx\", version.ref = \"ktx\" }\nruntime-ktx = { group = \"androidx.lifecycle\", name = \"lifecycle-runtime-ktx\", version.ref = \"viewmodel-lifecycle\" }\nruntime-compose = { group = \"androidx.lifecycle\", name = \"lifecycle-runtime-compose\", version.ref = \"viewmodel-lifecycle\" }\nsplash-screen = { group = \"androidx.core\", name = \"core-splashscreen\", version.ref = \"splash-screen\" }\nactivity-compose = { group = \"androidx.activity\", name = \"activity-compose\", version.ref = \"activity\" }\nfragment-ktx = { group = \"androidx.fragment\", name = \"fragment-ktx\", version.ref = \"fragment\" }\nwork-runtime-ktx = { group = \"androidx.work\", name = \"work-runtime-ktx\", version.ref = \"work-runtime\" }\npreferences-datastore = { group = \"androidx.datastore\", name = \"datastore-preferences\", version.ref = \"preferences-datastore\" }\nappcompat = { group = \"androidx.appcompat\", name = \"appcompat\", version.ref = \"appcompat\" }\n\n# Compose\ncompose-bom = { group = \"androidx.compose\", name = \"compose-bom\", version.ref = \"compose-bom\" }\ncompose-ui = { group = \"androidx.compose.ui\", name = \"ui\" }\ncompose-ui-preview = { group = \"androidx.compose.ui\", name = \"ui-tooling-preview\" }\ncompose-ui-tooling = { group = \"androidx.compose.ui\", name = \"ui-tooling\", version.ref = \"ui-tooling\" }\ncompose-livedata = { group = \"androidx.compose.runtime\", name = \"runtime-livedata\" }\ncompose-material3 = { group = \"androidx.compose.material3\", name = \"material3\", version.ref = \"material3\" }\ncompose-material-icons-extended = { group = \"androidx.compose.material\", name = \"material-icons-extended\" }\nnavigation-compose = { group = \"androidx.navigation\", name = \"navigation-compose\", version.ref = \"navigation\" }\n\n# Coil\ncoil-compose = { group = \"io.coil-kt\", name = \"coil-compose\", version.ref = \"coil\" }\ncoil-appiconloader = { group = \"me.zhanghai.android.appiconloader\", name = \"appiconloader-coil\", version.ref = \"app-icon-loader-coil\" }\n\n# Accompanist\naccompanist-drawablepainter = { group = \"com.google.accompanist\", name = \"accompanist-drawablepainter\", version.ref = \"accompanist\" }\n\n# Placeholder\nplaceholder-material3 = { group = \"com.eygraber\", name = \"compose-placeholder-material3\", version.ref = \"placeholder\" }\n\n# Kotlinx\nkotlinx-serialization-json = { group = \"org.jetbrains.kotlinx\", name = \"kotlinx-serialization-json\", version.ref = \"serialization\" }\nkotlinx-collection-immutable = { group = \"org.jetbrains.kotlinx\", name = \"kotlinx-collections-immutable\", version.ref = \"collection\" }\nkotlinx-datetime = { group = \"org.jetbrains.kotlinx\", name = \"kotlinx-datetime\", version.ref = \"datetime\" }\n\n# Room\nroom-runtime = { group = \"androidx.room\", name = \"room-runtime\", version.ref = \"room-version\" }\nroom-ktx = { group = \"androidx.room\", name = \"room-ktx\", version.ref = \"room-version\" }\nroom-compiler = { group = \"androidx.room\", name = \"room-compiler\", version.ref = \"room-version\" }\n\n# Patcher\nrevanced-patcher = { group = \"app.revanced\", name = \"patcher-android\", version.ref = \"revanced-patcher\" }\nrevanced-library = { group = \"app.revanced\", name = \"library-android\", version.ref = \"revanced-library\" }\n\n# Koin\nkoin-android = { group = \"io.insert-koin\", name = \"koin-android\", version.ref = \"koin\" }\nkoin-compose = { group = \"io.insert-koin\", name = \"koin-androidx-compose\", version.ref = \"koin\" }\nkoin-compose-navigation = { group = \"io.insert-koin\", name = \"koin-androidx-compose-navigation\", version.ref = \"koin\" }\nkoin-workmanager = { group = \"io.insert-koin\", name = \"koin-androidx-workmanager\", version.ref = \"koin\" }\n\n# About Libraries\nabout-libraries-core = { group = \"com.mikepenz\", name = \"aboutlibraries-compose-core\", version.ref = \"about-libraries\" }\nabout-libraries-m3 = { group = \"com.mikepenz\", name = \"aboutlibraries-compose-m3\", version.ref = \"about-libraries\" }\n\n# Ktor\nktor-core = { group = \"io.ktor\", name = \"ktor-client-core\", version.ref = \"ktor\" }\nktor-logging = { group = \"io.ktor\", name = \"ktor-client-logging\", version.ref = \"ktor\" }\nktor-okhttp = { group = \"io.ktor\", name = \"ktor-client-okhttp\", version.ref = \"ktor\" }\nktor-content-negotiation = { group = \"io.ktor\", name = \"ktor-client-content-negotiation\", version.ref = \"ktor\" }\nktor-serialization = { group = \"io.ktor\", name = \"ktor-serialization-kotlinx-json\", version.ref = \"ktor\" }\n\n# Markdown\nmarkdown-renderer = { group = \"com.mikepenz\", name = \"multiplatform-markdown-renderer-m3\", version.ref = \"markdown-renderer\" }\n\n# Fading Edges\nfading-edges = { group = \"com.github.GIGAMOLE\", name = \"ComposeFadingEdges\", version.ref = \"fading-edges\"}\n\n# Native processes\nkotlin-process = { group = \"com.github.pgreze\", name = \"kotlin-process\", version.ref = \"kotlin-process\" }\n\n# HiddenAPI\nhidden-api-stub = { group = \"dev.rikka.hidden\", name = \"stub\", version.ref = \"hidden-api-stub\" }\n\n# LibSU\nlibsu-core = { group = \"com.github.topjohnwu.libsu\", name = \"core\", version.ref = \"libsu\" }\nlibsu-service = { group = \"com.github.topjohnwu.libsu\", name = \"service\", version.ref = \"libsu\" }\nlibsu-nio = { group = \"com.github.topjohnwu.libsu\", name = \"nio\", version.ref = \"libsu\" }\n\n# Scrollbars\nscrollbars = { group = \"com.github.GIGAMOLE\", name = \"ComposeScrollbars\", version.ref = \"scrollbars\" }\n\n# EnumUtil\nenumutil = { group = \"io.github.materiiapps\", name = \"enumutil\", version.ref = \"enumutil\" }\nenumutil-ksp = { group = \"io.github.materiiapps\", name = \"enumutil-ksp\", version.ref = \"enumutil\" }\n\n# Reorderable lists\nreorderable = { module = \"sh.calvin.reorderable:reorderable\", version.ref = \"reorderable\" }\n\n# Compose Icons\n# switch to br.com.devsrsouza.compose.icons after DevSrSouza/compose-icons#30 is merged\ncompose-icons-fontawesome = { group = \"com.github.BenjaminHalko.compose-icons\", name = \"font-awesome\", version.ref = \"compose-icons\" }\n\n# Semantic versioning parser\nsemver-parser = { module = \"io.github.z4kn4fein:semver\", version.ref = \"semver-parser\" }\n\n# Ackpine\nackpine-core = { module = \"ru.solrudev.ackpine:ackpine-core\", version.ref = \"ackpine\" }\nackpine-ktx = { module = \"ru.solrudev.ackpine:ackpine-ktx\", version.ref = \"ackpine\" }\nandroidx-foundation-layout = { group = \"androidx.compose.foundation\", name = \"foundation-layout\", version.ref = \"foundation-layout\" }\n\n[plugins]\nandroid-application = { id = \"com.android.application\", version.ref = \"android-gradle-plugin\" }\nandroid-library = { id = \"com.android.library\", version.ref = \"android-gradle-plugin\" }\nkotlin-android = { id = \"org.jetbrains.kotlin.android\", version.ref = \"kotlin\" }\nkotlin-serialization = { id = \"org.jetbrains.kotlin.plugin.serialization\", version.ref = \"kotlin\" }\nkotlin-parcelize = { id = \"org.jetbrains.kotlin.plugin.parcelize\", version.ref = \"kotlin\" }\ncompose-compiler = { id = \"org.jetbrains.kotlin.plugin.compose\", version.ref = \"kotlin\" }\ndevtools = { id = \"com.google.devtools.ksp\", version.ref = \"dev-tools-gradle-plugin\" }\nabout-libraries = { id = \"com.mikepenz.aboutlibraries.plugin\", version.ref = \"about-libraries\" }\nabout-libraries-android = { id = \"com.mikepenz.aboutlibraries.plugin.android\", version.ref = \"about-libraries\" }\nbinary-compatibility-validator = { id = \"org.jetbrains.kotlinx.binary-compatibility-validator\", version.ref = \"binary-compatibility-validator\" }\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionSha256Sum=60ea723356d81263e8002fec0fcf9e2b0eee0c0850c7a3d7ab0a63f2ccc601f3\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-9.4.0-bin.zip\nnetworkTimeout=10000\nvalidateDistributionUrl=true\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "gradle.properties",
    "content": "org.gradle.jvmargs=-Xmx3072m -Dfile.encoding=UTF-8\nandroid.useAndroidX=true\nkotlin.code.style=official\norg.gradle.caching=true\nandroid.builtInKotlin=false\nandroid.nonFinalResIds=false\n# Must be disabled for now, otherwise :app:publish task fails.\norg.gradle.configuration-cache=false\norg.gradle.configuration-cache.parallel=true\norg.gradle.parallel=true\norg.gradle.tooling.parallel=true"
  },
  {
    "path": "gradlew",
    "content": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original 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#      https://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# SPDX-License-Identifier: Apache-2.0\n#\n\n##############################################################################\n#\n#   Gradle start up script for POSIX generated by Gradle.\n#\n#   Important for running:\n#\n#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is\n#       noncompliant, but you have some other compliant shell such as ksh or\n#       bash, then to run this script, type that shell name before the whole\n#       command line, like:\n#\n#           ksh Gradle\n#\n#       Busybox and similar reduced shells will NOT work, because this script\n#       requires all of these POSIX shell features:\n#         * functions;\n#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,\n#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;\n#         * compound commands having a testable exit status, especially «case»;\n#         * various built-in commands including «command», «set», and «ulimit».\n#\n#   Important for patching:\n#\n#   (2) This script targets any POSIX shell, so it avoids extensions provided\n#       by Bash, Ksh, etc; in particular arrays are avoided.\n#\n#       The \"traditional\" practice of packing multiple parameters into a\n#       space-separated string is a well documented source of bugs and security\n#       problems, so this is (mostly) avoided, by progressively accumulating\n#       options in \"$@\", and eventually passing that to Java.\n#\n#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,\n#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;\n#       see the in-line comments for details.\n#\n#       There are tweaks for specific operating systems such as AIX, CygWin,\n#       Darwin, MinGW, and NonStop.\n#\n#   (3) This script is generated from the Groovy template\n#       https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n#       within the Gradle project.\n#\n#       You can find Gradle at https://github.com/gradle/gradle/.\n#\n##############################################################################\n\n# Attempt to set APP_HOME\n\n# Resolve links: $0 may be a link\napp_path=$0\n\n# Need this for daisy-chained symlinks.\nwhile\n    APP_HOME=${app_path%\"${app_path##*/}\"}  # leaves a trailing /; empty if no leading path\n    [ -h \"$app_path\" ]\ndo\n    ls=$( ls -ld \"$app_path\" )\n    link=${ls#*' -> '}\n    case $link in             #(\n      /*)   app_path=$link ;; #(\n      *)    app_path=$APP_HOME$link ;;\n    esac\ndone\n\n# This is normally unused\n# shellcheck disable=SC2034\nAPP_BASE_NAME=${0##*/}\n# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\nAPP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=maximum\n\nwarn () {\n    echo \"$*\"\n} >&2\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n} >&2\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"$( uname )\" in                #(\n  CYGWIN* )         cygwin=true  ;; #(\n  Darwin* )         darwin=true  ;; #(\n  MSYS* | MINGW* )  msys=true    ;; #(\n  NONSTOP* )        nonstop=true ;;\nesac\n\nCLASSPATH=\"\\\\\\\"\\\\\\\"\"\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=$JAVA_HOME/jre/sh/java\n    else\n        JAVACMD=$JAVA_HOME/bin/java\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=java\n    if ! command -v java >/dev/null 2>&1\n    then\n        die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nfi\n\n# Increase the maximum file descriptors if we can.\nif ! \"$cygwin\" && ! \"$darwin\" && ! \"$nonstop\" ; then\n    case $MAX_FD in #(\n      max*)\n        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.\n        # shellcheck disable=SC2039,SC3045\n        MAX_FD=$( ulimit -H -n ) ||\n            warn \"Could not query maximum file descriptor limit\"\n    esac\n    case $MAX_FD in  #(\n      '' | soft) :;; #(\n      *)\n        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.\n        # shellcheck disable=SC2039,SC3045\n        ulimit -n \"$MAX_FD\" ||\n            warn \"Could not set maximum file descriptor limit to $MAX_FD\"\n    esac\nfi\n\n# Collect all arguments for the java command, stacking in reverse order:\n#   * args from the command line\n#   * the main class name\n#   * -classpath\n#   * -D...appname settings\n#   * --module-path (only if needed)\n#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif \"$cygwin\" || \"$msys\" ; then\n    APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n    CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n\n    JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    for arg do\n        if\n            case $arg in                                #(\n              -*)   false ;;                            # don't mess with options #(\n              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath\n                    [ -e \"$t\" ] ;;                      #(\n              *)    false ;;\n            esac\n        then\n            arg=$( cygpath --path --ignore --mixed \"$arg\" )\n        fi\n        # Roll the args list around exactly as many times as the number of\n        # args, so each arg winds up back in the position where it started, but\n        # possibly modified.\n        #\n        # NB: a `for` loop captures its iteration list before it begins, so\n        # changing the positional parameters here affects neither the number of\n        # iterations, nor the values presented in `arg`.\n        shift                   # remove old arg\n        set -- \"$@\" \"$arg\"      # push replacement arg\n    done\nfi\n\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Collect all arguments for the java command:\n#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n#     and any embedded shellness will be escaped.\n#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n#     treated as '${Hostname}' itself on the command line.\n\nset -- \\\n        \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n        -classpath \"$CLASSPATH\" \\\n        -jar \"$APP_HOME/gradle/wrapper/gradle-wrapper.jar\" \\\n        \"$@\"\n\n# Stop when \"xargs\" is not available.\nif ! command -v xargs >/dev/null 2>&1\nthen\n    die \"xargs is not available\"\nfi\n\n# Use \"xargs\" to parse quoted args.\n#\n# With -n1 it outputs one arg per line, with the quotes and backslashes removed.\n#\n# In Bash we could simply go:\n#\n#   readarray ARGS < <( xargs -n1 <<<\"$var\" ) &&\n#   set -- \"${ARGS[@]}\" \"$@\"\n#\n# but POSIX shell has neither arrays nor command substitution, so instead we\n# post-process each arg (as a line of input to sed) to backslash-escape any\n# character that might be a shell metacharacter, then use eval to reverse\n# that process (while maintaining the separation between arguments), and wrap\n# the whole thing up as a single \"set\" statement.\n#\n# This will of course break if any of these variables contains a newline or\n# an unmatched quote.\n#\n\neval \"set -- $(\n        printf '%s\\n' \"$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\" |\n        xargs -n1 |\n        sed ' s~[^-[:alnum:]+,./:=@_]~\\\\&~g; ' |\n        tr '\\n' ' '\n    )\" '\"$@\"'\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\r\n@rem you may not use this file except in compliance with the License.\r\n@rem You may obtain a copy of the License at\r\n@rem\r\n@rem      https://www.apache.org/licenses/LICENSE-2.0\r\n@rem\r\n@rem Unless required by applicable law or agreed to in writing, software\r\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\r\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n@rem See the License for the specific language governing permissions and\r\n@rem limitations under the License.\r\n@rem\r\n@rem SPDX-License-Identifier: Apache-2.0\r\n@rem\r\n\r\n@if \"%DEBUG%\"==\"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\"==\"\" set DIRNAME=.\r\n@rem This is normally unused\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\r\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif %ERRORLEVEL% equ 0 goto execute\r\n\r\necho. 1>&2\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2\r\necho. 1>&2\r\necho Please set the JAVA_HOME variable in your environment to match the 1>&2\r\necho location of your Java installation. 1>&2\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto execute\r\n\r\necho. 1>&2\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2\r\necho. 1>&2\r\necho Please set the JAVA_HOME variable in your environment to match the 1>&2\r\necho location of your Java installation. 1>&2\r\n\r\ngoto fail\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=\r\n\r\n\r\n@rem Execute Gradle\r\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" -jar \"%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\" %*\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif %ERRORLEVEL% equ 0 goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nset EXIT_CODE=%ERRORLEVEL%\r\nif %EXIT_CODE% equ 0 set EXIT_CODE=1\r\nif not \"\"==\"%GRADLE_EXIT_CONSOLE%\" exit %EXIT_CODE%\r\nexit /b %EXIT_CODE%\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"private\": true,\n  \"workspaces\": [\n    \"api\",\n    \"app\"\n  ],\n  \"devDependencies\": {\n    \"@anolilab/multi-semantic-release\": \"^2.0.3\",\n    \"semantic-release\": \"^24.2.7\"\n  }\n}\n"
  },
  {
    "path": "settings.gradle.kts",
    "content": "pluginManagement {\n    repositories {\n        mavenLocal()\n        mavenCentral()\n        google()\n        gradlePluginPortal()\n    }\n}\ndependencyResolutionManagement {\n    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)\n    repositories {\n        mavenLocal()\n        mavenCentral()\n        google()\n        maven(\"https://jitpack.io\")\n        maven {\n            name = \"githubPackages\"\n            // A repository must be specified for some reason. \"registry\" is a dummy.\n            url = uri(\"https://maven.pkg.github.com/revanced/registry\")\n            credentials(PasswordCredentials::class)\n        }\n    }\n}\n\nrootProject.name = \"revanced-manager\"\ninclude(\":app\", \":api\")\n"
  }
]